【问题标题】:Need dynamic column information from Zend Paginator Object需要来自 Zend Paginator 对象的动态列信息
【发布时间】:2014-05-05 12:41:50
【问题描述】:

我正在为网格列表构建一个插件(当然供我个人使用)。现在我在链接 http://framework.zend.com/manual/2.1/en/tutorials/tutorial.pagination.html 中集成了 ZF2 Paginator。我正在为分页器(非数组)使用数据库选择。我需要字段名称作为动态名称,所以我可以迭代它们,类似的东西

<?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; ?>

由于这是一个实践项目,我真的不需要集成一些已经存在的 3rd 方网格解决方案。我只是想知道是否可以使用 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();
}

【问题讨论】:

  • 很有趣的问题!
  • echo '&lt;pre&gt;'; print_r($paginator); exit();被执行时,如果所有的列都被选中,它会显示[columns:protected] =&gt; Array ( [0] =&gt; * )数组,如果特定的列被选中,它会显示[1] =&gt; id [2] =&gt; name [....]。但无法获取该数组。如果您找到解决方案,请告诉我们。真的很感激。
  • 很明显Paginator对象会有一些信息,但是按需访问是个问题?同样* 不是解决方案,因为解决方案需要结果集而不是查询对象。

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


【解决方案1】:

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

假设我们有一个有效的分页器,其结果和列名未知。这些是正确输出它们的步骤:

  1. 获取第一行的列名并将它们放入一个数组中。
  2. 生成表格/网格的标题。
  3. 使用数组遍历行以匹配表头序列。

可能如下所示。

$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>';

【讨论】:

  • 它看起来很有希望,我肯定会检查它。
  • 通过一些必要的修改修复了问题(在我的问题更新中)。接受你的回答。
  • 很高兴能帮上忙。
猜你喜欢
  • 2011-09-29
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 2018-11-22
  • 2016-09-03
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多