2013-03-08 5 views
3

В настоящее время я пытаюсь найти список с разбивкой по страницам ajax. Я думаю, что я рядом. Когда я нажимаю на предыдущие, следующие или отдельные номера страниц, отображаются правильные результаты, но div.postsPaging загружается с разбивкой по страницам, а также заголовок и нижний колонтитул Cake по умолчанию. Я попытался настроить макет на ajax в представлении displayPosts или в действии displayPosts, но макет по умолчанию вообще не отображается (внутри или вне div).CakePHP Ajax Pagination

Мой вопрос в том, как загрузить нагрузочный div postsPaging только с разбивкой по страницам, а не в верхний или нижний колонтитул или что-либо еще в макете. Как я могу получить результаты запроса ajax, чтобы не включать верхний и нижний колонтитулы макета по умолчанию?

события JQuery, присоединенные к одному из индексов страниц и кнопки Далее являются:

$("#link-196981051").bind("click", function (event) {$.ajax({dataType:"html", success:function (data, textStatus) {$("#postsPaging").html(data);}, url:"\/AuthAdminCakeApp\/posts\/displayPosts\/page:2"}); 
return false;});` 

$("#link-296431922").bind("click", function (event) {$.ajax({dataType:"html", success:function (data, textStatus) {$("#postsPaging").html(data);}, url:"\/AuthAdminCakeApp\/posts\/displayPosts\/page:2"}); 
return false;});` 

Мой PostsController код выглядит следующим образом:

class PostsController extends AppController { 

public $helpers = array('Js' => 'Jquery');  
public $paginate = array(
    'limit' => 3, 
    'order' => array(
     'Post.title' => 'asc' 
    ) 
); 

public function displayPosts() { 
    $this->set('posts', $this->paginate()); 
} 

// other actions 
} 

Мой пейджинговой элемент (paging.ctp) выглядит например:

<?php 
$this->Paginator->options(
     array('update'=>'#postsPaging', 
       'url'=>array('controller'=>'posts', 
'action'=>'displayPosts'))); 
?> 
<table cellpadding="0" cellspacing="0"> 
<tr> 
    <th><?php echo $this->Paginator->sort('id'); ?></th> 
    <th><?php echo $this->Paginator->sort('user_id'); ?></th> 
    <th><?php echo $this->Paginator->sort('title'); ?></th> 
    <th><?php echo $this->Paginator->sort('body'); ?></th> 
    <th><?php echo $this->Paginator->sort('created'); ?></th> 
    <th><?php echo $this->Paginator->sort('modified'); ?></th> 
    <th class="actions"><?php echo __('Actions'); ?></th> 
</tr> 

<?php 
foreach ($posts as $post): ?> 
<tr> 
    <td><?php echo h($post['Post']['id']); ?>&nbsp;</td> 
    <td> 
     <?php echo $this->Html->link($post['User']['id'],  array('controller' => 'users', 'action' => 'view', $post['User']['id'])); ?> 
    </td> 
    <td><?php echo h($post['Post']['title']); ?>&nbsp;</td> 
    <td><?php echo h($post['Post']['body']); ?>&nbsp;</td> 
    <td><?php echo h($post['Post']['created']); ?>&nbsp;</td> 
    <td><?php echo h($post['Post']['modified']); ?>&nbsp;</td> 

    <td class="actions"> 
     <?php echo $this->Html->link(__('View'), array('action' => 'view', $post['Post']['id'])); ?> 
     <?php echo $this->Html->link(__('Edit'), array('action' => 'edit', $post['Post']['id'])); ?> 
     <?php echo $this->Form->postLink(__('Delete'), array('action' => 'delete', $post['Post']['id']), null, __('Are you sure you want to delete # %s?', $post['Post']['id'])); ?> 
    </td> 
</tr> 
<?php endforeach; ?> 
</table> 
<?php 
echo $this->Paginator->prev('< ' . __('previous'), array(), null, array('class' => 'prev disabled')); 
echo $this->Paginator->numbers(array('separator' => '')); 
echo $this->Paginator->next(__('next') . ' >', array(), null, array('class' => 'next disabled')); 
?> 

Вид действия displayPosts выглядит так:

<div id="postsPaging"> 
<?php echo $this->element('Posts/paging'); ?> 
</div> 

Edit: Я использую CakePHP 2.2.5.

ответ

5

Вы должны использовать макет ajax.

$this->layout = ($this->request->is("ajax")) ? "ajax" : "default"; 

Вы также можете поместить этот код в AppController, для Ajax приложения ответов широкий.

public function beforeRender() { 
    $this->layout = ($this->request->is("ajax")) ? "ajax" : "default"; 
} 
+0

Спасибо :) Я помещал изменение макета в неправильный файл и без условного. – 2013-03-08 09:44:44

+0

Другое дело: я обнаружил, что новые события привязки не генерируются для кнопок «Предыдущая» и «Страница 1» после нажатия «Далее» или «Страница 2». Существуют только исходные события привязки. Разве это не может быть для этого? – 2013-03-08 10:04:42

+0

Ознакомьтесь со следующими ссылками: http://stackoverflow.com/questions/9328621/ajax-paging-sorting-in-cakephp-2-0 и http://book.cakephp.org/2.0/en/core-libraries /helpers/js.html#ajax-pagination –

0

Также убедитесь, что вы загружаете компонент RequestHandler.

var $components = array('RequestHandler'); 

Собирает выше в контроллере или AppController будет обрабатывать настройки макета Аякса.