ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php-需要Zend Paginator对象的动态列信息

2019-11-21 20:31:52  阅读:226  来源: 互联网

标签:zend-db-select zend-framework2 php zend-paginator


我正在构建一个用于网格列表的插件(当然是供我个人使用).现在,我在链接http://framework.zend.com/manual/2.1/en/tutorials/tutorial.pagination.html中集成了ZF2 Paginator.我正在使用DB Select for Paginator(Not Array).我需要字段名称为动态字段,所以我可以对其进行迭代,像这样

<?php $headers = $this->paginator->getFirstRow()->getColumns(); ?>
<tr>
<?php foreach ($headers as $col) : ?>
    <th><?php echo $col; ?></th>
<?php endforeach; ?>
</tr>

<?php foreach ($this->paginator as $row) : ?>
    <tr>
    <?php foreach ($row->getColumns() as $col) : ?>
        <td><?php echo $row->{$col}; ?></td>
    <?php endforeach; ?>
    </tr>
<?php endforeach; ?>

由于这是实践项目,因此我真的不需要集成一些已经存在的第三方网格解决方案.我只想知道使用Zend Paginator API是否可以进行类似上述的操作?

更新:问题终于解决了.解决方案与@netiul的解决方案非常匹配,但有一些修改.

在插件助手中:

$resultSet = $paginator->getIterator(); 

$columnNames = array_keys(get_object_vars($resultSet->getArrayObjectPrototype()));

$grid .= '<thead><tr>';
foreach($columnNames as $header)
{
    $grid .= '<th>'.$header.'</th>';
}
$grid .= '</tr></thead>';

$grid .= '<tbody>';
foreach($resultSet as $row)
{
    $grid .= '<tr>';
    foreach($columnNames as $col)
    {
        $grid .= '<td>'.$row->$col.'</td>';
    }
}
$grid .= '</tbody>';

在Model中还需要进行一项更改(可惜,我需要在插件外部进行此更改,现在除了如何修复被所有项目模型覆盖的Model父类之外,不要修复).

我需要添加结果集缓冲区以修复前向光标错误,例如This result is a forward only result set, calling rewind() after moving forward is not supported – Zend)

在模型中:

public function __construct(Adapter $adapter)
{
    $this->adapter = $adapter;
    $this->resultSetPrototype = new ResultSet();
    $this->resultSetPrototype->buffer();  // New Line added for buffer
    $this->resultSetPrototype->setArrayObjectPrototype(new Leads());
    $this->initialize();
}

解决方法:

因此,回顾一下您的问题:您想输出一个您不知道列名的分页器的内容,因为它们可能是动态的?

假设我们有一个有效的Paginator,其中包含结果和未知的列名.这些是正确输出它们的步骤:

>提取第一行的列名,并将它们放入数组中.
>生成表/网格的标题.
>使用数组遍历各行以匹配表标题序列.

可能如下所示.

$firstItem = reset($paginator->getIterator());
$columnNames = array_keys(get_object_vars($firstItem));

// optional do some sorting here like `sort($columNames)`

echo '<thead><tr>';
foreach ($columnNames as $columnName) {
    echo '<th>' . $columnName . '</th>';
}
echo '</tr></thead>';

echo '<tbody>';
foreach ($paginator as $item) {
    echo '<tr>';
    foreach ($columnNames as $columnName) {
        echo '<td>' . $item->$columnName . '</td>';
    }
    echo '</tr>';
}
echo '</tbody>';

标签:zend-db-select,zend-framework2,php,zend-paginator
来源: https://codeday.me/bug/20191121/2054339.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有