通过自定义布局高效呈现分页数据


Efficiently render pagination data via custom layouts?

当前方法

目前,我使用具有页眉、正文和页脚结构的<table>将所有分页结果呈现在单个元素中。渲染风格非常像电子表格,这个元素可以处理多个控制器的分页结果。

问题所在

我现在需要支持分页结果的可配置渲染样式。两种主要样式是电子表格和 pinterest.com 样式(通过pinterest,我指的是不同长度的垂直列)。

如何实施

我正在寻找如何使用 CakePHP 2.2 视图功能实现这一点的答案。块、主题和嵌套视图。因此,尽可能多的代码都是枯燥的,并且配置的部分仅应用不同的样式。

用于呈现每个平板电脑单元格中的值的代码、记录标题和类似的详细信息都应与将其呈现为表或 pinterest(或您称之为样式的代码)分开。

挑战

Cake中的每种方法似乎都有局限性。哪种方法最适合处理以下问题?

  • 呈现每条记录时,它将需要不同的前/后标记,并且该记录中的每个字段都相同。这些标签由样式渲染器定义了很多。
  • 将来我可能需要添加功能,例如字段值的 AJAX 编辑,并且不需要修改样式处理程序。所以样式渲染器应该只处理样式。
  • 我的很多样式标签都会涉及wrapping呈现的数据。什么CakePHP方法最适合它?
  • 配置它的最佳方法是什么?以便分页元素知道要呈现哪种样式。

我最近不得不使用定义列表的无序列表来执行此操作。在保持代码干燥的同时做到这一点的关键是使用元素。元素是位于文件夹视图/元素中的 ctp 文件

在我的 index.ctp 中,我将表更改为 ul 标签,将 tr 标签更改为 li 标签,并调用元素来处理渲染 dl。使用数组将对象及其类型传递给元素,其余的可以用css完成

索引.ctp :

<ul><?php
  foreach ($blobs as $blob){
   echo $this->Html->tag('li',$this->element('dl',array('blob'=>$blob,'type'=>'Blob')));
  }
?></ul>

dl.ctp :

<dl class="<?php echo $type;?>"><?php
  foreach ($blob[$type] as $key => $v){
    echo $this->Html->tag('dt',$key);
    echo $this->Html->tag('dd',$v);
  }
?></dl>

你最好的选择可能是使用CSS;你会惊讶于你可以用它做什么。您甚至可以将表格从矩形布局"翻转"到垂直布局(例如在移动屏幕上),这似乎接近您想要的。