我的控制行动是
public function indexAction(){
Zend_View_Helper_PaginationControl::setDefaultViewPartial('index.phtml');
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'',
'dbname' =>'test'
);
$db = new Zend_Db_Adapter_Pdo_Mysql($params);
$select = $db->select()->from('tableviewdemo');
$paginator = Zend_Paginator::factory($select);
$paginator->setCurrentPageNumber($this->_getParam('page', 1));
$paginator->setItemCountPerPage(10);
$this->view->paginator=$paginator;
}
并且查看文件是
<? echo "<table border=1>";
foreach ($this->paginator as $item) {
echo '<tr><td>' . $item['id'] . '</td>';
echo '<td>' . $item['name'] . '</td>';
echo '<td>' . $item['city'] . '</td>';
echo '<td>' . $item['state'] . '</td>';
echo '<td>' . $item['date'] . '</td>';
echo '<td>' . $item['zip'] . '</td></tr>';}
echo "</table>";
echo $this->paginationControl($this->paginator,'Sliding','/test/index.phtml'); ?>
显示错误 table和pagelink如下 首先| &LT;上一页|下一个&gt; |最后
并发出警告 警告:在C:\ Users \ Administrator \ hello \ application \ views \ scripts \ test \ index.phtml中为foreach()提供的参数无效 为什么会发生这种情况????
答案 0 :(得分:0)
如果它实现了接口迭代器,你只将除数组之外的任何变量传递给foreach,我认为Zend_Paginator没有实现它。并且你正在使用paginator进行列表它是完全无法解决的,只需尝试这个
$this->view->records = $db->select()->from('tableviewdemo')->fetchAll()->toArray();
并在您的视图文件中进行迭代
foreach($this->records)
{
}
我也怀疑你的数据库查询是否有效。
答案 1 :(得分:0)
我注意到你将index.phtml
设置为默认视图部分,错误引用引号... 我不认为该方法符合您的想法。
至少在一开始我建议你指明一切。指定select(),指定适配器,创建新的分页器。之后你可以采取捷径。
public function indexAction(){
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'',
'dbname' =>'test'
);
$db = new Zend_Db_Adapter_Pdo_Mysql($params);
$select = $db->select()->from('tableviewdemo');
//specify paginator adapter
$adapter = new Zend_Paginator_Adapter_DbTableSelect($select);
//instantiate the paginator
$paginator = new Zend_Paginator($adapter);
//if you really have to use the factory, don't forget the string for the adapter.
//The paginator should work without the string, but may not work as expected.
//$paginator = Zend_Paginator::factory($select, 'DbTableSelect');
$paginator->setCurrentPageNumber($this->_getParam('page', 1));
$paginator->setItemCountPerPage(10);
//assign paginator to the view
$this->view->paginator=$paginator;
}
关于适配器的说明。
适配器Zend_Paginator_Adapter_DbTable
和Zend_Paginator_Adapter_DbTableSelect
之间的最大明显差异是 DbTable 返回aray将使用数组表示法{{1} }和 DbTableSelect 返回一个对象(rowset对象)使用对象表示法`$ item-&gt; name'所以请使用适合您需要的适配器。
回到原点。默认视图partial不会引用您想要显示的页面。它指的是包含paginator控件的视图partial。 Zend没有example的默认分页控件实现。
在您的视图中尝试此操作。
$item['name']
我通常使用的分页器与手册中的示例非常相似,我在我的视图脚本中调用它(所有部分视图的默认位置是<!-- assumes you using DbTableSelect paginator adapter -->
<!-- for DbSelect adapter just change to array notation: $item['id'] -->
<table border=1>
<?php foreach ($this->paginator as $item) : ?>
<tr>
<td><?php echo $this->escape($item->id) ?></td>
<td><?php echo $this->escape($item->name) ?></td>
<td><?php echo $this->escape($item->city) ?></td>
<td><?php echo $this->escape($item->state) ?></td>
<td><?php echo $this->escape($item->date) ?></td>
<td><?php echo $this->escape($item->zip) ?></td>
</tr>
</table>
<?php endForeach ?>
<?php echo $this->paginationControl($this->paginator,'Sliding','MyPaginatorControl.phtml'); ?>
):
views/scripts
以防有人需要它是我的基本控制部分:
<?php
echo $this->paginationControl(
//remember the third parameter is the controls partial
$this->paginator, 'Sliding', '_paginatorControl.phtml'
)
?>
我希望这会有所帮助。