通过自定义布局有效地渲染分页数据?

时间:2013-01-21 22:19:19

标签: php cakephp cakephp-2.2

当前方法

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

问题

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

如何实施

我正在寻找关于如何使用CakePHP 2.2视图功能实现此问题的答案。块,主题和嵌套视图。因此,尽可能多的代码是干的,配置的部分仅应用不同的样式。

在每个数位板单元格中呈现值的代码,记录标题以及类似的详细信息都应该与将其呈现为表格或pinterest(或者您称之为该样式)的代码分开。“ p>

挑战

Cake中的每个方法似乎都存在局限性。有什么方法可以解决以下问题?

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

2 个答案:

答案 0 :(得分:1)

我最近不得不使用无序的定义列表列表。在保持代码DRY的同时执行此操作的关键是使用元素。元素是生活在Views / Elements

文件夹中的ctp文件

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

完成

index.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>

答案 1 :(得分:0)

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