2012-02-04 2 views
3

Я пытаюсь закодировать сайт Cake в JQM, но всякий раз, когда я нажимаю на ссылку, экран переходит на страницу, содержащую только слово «Undefined».CakePHP - jQuery Mobile возвращает пустую страницу, содержащую слово «Undefined»

Рассмотрение источника показывает, что есть новый div с data-role = "страница", который содержит это слово, и что исходное содержимое моей старой страницы остается нетронутым.

Это мой макет для мобильного просмотра:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <title><?php echo (isset($title_for_layout)) ? $title_for_layout : 'My default title';?></title> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <?php 
      // javascript 
      $javascripts = array(
        'jquery', 
        'jquery.mobile-1.0.min.js', 
       ); 
      echo $this->Html->script($javascripts); 
      // css 
      $css = array('jquery.mobile-1.0.css','jquery.mobile.structure-1.0.css','themes/mobires.css'); 
      echo $this->Html->css($css) . "\n\t"; 
     ?> 
    </head> 
    <body> 
     <div data-role="page"> 
      <?php echo $this->Session->flash(); ?> 
      <div data-role="header"> 
       <h1> 
        <?php echo (isset($title_for_layout)) ? $title_for_layout : 'My default title';?> 
       </h1> 
       <div data-role="navbar"> 
        <ul> 
         <li><?php echo $this->Html->link('Home',array('controller'=>'pages','action'=>'display','home'))?></li> 
         <li><?php echo $this->Html->link('Contact',array('controller'=>'pages','action'=>'display','contact'))?></li> 
        </ul> 
       </div><!-- /navbar --> 
      </div><!-- /header --> 
      <div data-role="content"> 
       <?php 
        echo $this->Session->flash(); 
        echo $content_for_layout; 
       ?> 
      </div> 
      <!-- start footer --> 
       <div data-role="footer"> 
        &copy; 2012<?php if (date("Y") > 2012) { echo '-' . date("Y"); } ?> Mobires. All Rights Reserved. 
        <br /> 
        &nbsp; 
        <?php echo $this->Html->link('Privacy Policy',array('controller'=>'pages','action'=>'display','privacy'))?> 
        &nbsp; 
        <?php echo $this->Html->link('Terms & Conditions',array('controller'=>'pages','action'=>'display','terms'))?> 

       </div> 
     </div><!-- /page --> 
     <?php echo $this->Js->writebuffer(); ?> 
    </body> 
</html> 

и мой home.ctp просто есть слово «тест» в нем. Я пытаюсь щелкнуть по кнопкам в нижнем колонтитуле, чтобы проверить загрузку Ajax.

ответ

2

Если вы хотите интегрировать cakephp с jQuery mobile, на мой взгляд это лучшее решение. Также решает пропущенные пустые страницы на cakephp 2.x. Вы также можете увидеть пример того, как получить имя файла вида (файл рендеринга) в контроллере cakephp с помощью Inflector :: underscore ($ this-> action).

public function beforeFilter() { 
$this->isMobile = false; 
     if ($this->RequestHandler->isMobile()) { 

      // required for CakePHP 2.2.2 
      $viewDir = App::path('View'); 
      // returns an array 
      /* 
      * array(
      *  (int) 0 => '/var/www/maps-cakephp2/app/View/' 
      *) 
      */ 
      //path to your folder for mobile views . You must modify these lines that you want 
      //in my case I have views in folders in to /app/view/mobile and here users folder etc. 
      $mobileView = $viewDir[0] . 
        'mobile' . DS . $this->name . DS; 
      $mobileViewFile = $mobileView . 
        Inflector::underscore($this->action) . '.ctp'; 

      if (file_exists($mobileViewFile)) { 
       $this->isMobile = true; 
       $this->viewPath = 'mobile' . DS . $this->name; 

      } 

    } 
} 

public function beforeRender() { 
    if ($this->isMobile == true) { 
     $this->autorender = true; 
     //app/View/Layouts/mobile.ctp 
     $this->layout = 'mobile'; 
    } 
} 
+0

Вы можете также используйте новую функциональность темы для просмотров в cakephp – Martin

1

Ах, JQM ожидает полностью отформатированный ответ JQM, поэтому нужно вернуть полное «страничное» подразделение, а не только контент.

+0

Hi Andy. У меня такая же проблема ... Как вы получили полностью отформатированный ответ JQM в CakePHP ??? – hasentopf

+0

Хорошо, я нашел решение здесь: http://stackoverflow.com/questions/6385714/cakephp-ajax-layout – hasentopf

+0

Я просто добавлял биты ответа JQM, отсутствовавшие в $ content_for_layout, объявляя «заголовок» и элемент «footer», который я выводил до и после моего контента. Как отключить обработчик запросов для вас? – Andy

Смежные вопросы