我正在使用 CakePHP 使用 MySQL 后端为 PowerDNS 创建前端 UI。在应用程序的首页上,我想要一些小部件(“快速添加记录”、“快速添加域”等)。我想要的小部件之一是现有域的分页列表。
DomainsController.php 中的索引函数如下所示:
public $paginate = array(
'fields' => array('id', 'name'),
'limit' => 25,
'order' => array( 'name' => 'asc' ),
'conditions' => array( "NOT" => array( "name LIKE" => "%.arpa" ) )
);
public function index() {
$domains = $this->paginate();
if ( $this->request->is('requested')) {
return $domains;
} else {
$this->set('domains', $domains);
}
}
我创建了一个如下所示的元素:
<?php $domains = $this->requestAction('Domains/index'); ?>
<ol>
<?php foreach( $domains as $domain) :?>
<li>echo $domains['domain']['name']</li>
<?php endforeach; ?>
</ol>
<?php echo $paginator->numbers(); ?>
当我访问首页时,我收到“未定义变量:分页器”错误。我尝试使用 $this->Paginator->numbers() 代替,但这只是给了我“未定义的属性:View::$Paginator”。将“Paginator”助手添加到 PagesController.php 也无济于事 - $this->Paginator 可用,但我得到“未定义索引:pageCount”。
是否可以从 home.ctp 上的元素进行这种分页,还是我必须做一些自定义 JavaScript 的东西?
编辑
现在我到了某个地方:我将 DomainsController 索引函数更改为:
public function index() {
$domains = $this->paginate();
$paginator = $this->params;
if ( $this->request->is('requested')) {
return compact( 'domains', 'paginator' );
} else {
$this->set('domains', $domains);
}
}
并将以下内容添加到 domainList.ctp 元素:
<?php
$result = $this->requestAction('Domains/index');
$domains = $result['domains'];
$this->Paginator->request = $result['paginator'];
?>
<ol>
<?php foreach( $domains as $domain) :?>
<li>echo $domains['domain']['name']</li>
<?php endforeach; ?>
</ol>
<?php echo $paginator->numbers(); ?>
$this->Paginator 现在工作正常,我可以正常访问它的所有方法和属性等等。我现在的问题是,如果我点击“2”,浏览器会导航到 /pages/home/page:2 但域列表仍然显示第 1 页。只需要弄清楚如何传递“page:2”到元素。并且 AJAX-ify 整个事情,这样我就不需要刷新整个页面。