在CakePhp中合并两个控制器/视图的最佳解决方案

时间:2012-04-24 19:22:26

标签: cakephp

我有两种模式:

Book
Category

我有两种观点:

books/browse

在此视图中,有分页选项,书籍语言选择,作者/标题过滤器等分页列表。有一件事没有 - 书类别树。实际上,此控制器将参数category_id作为参数,仅显示此类别的书籍。

categories/tree

此视图(控制器)找到类别树,它需要一个参数 - > category_id - >确定如何打印树(显示所有父节点,父节点列表等)。

现在我需要一个视图(例如browsetree),左边是类别树,右边是书籍列表(包含所有内容)。

实现这一目标的最佳解决方案是什么? (问题是我也希望能够保存链接到书籍浏览视图的所有它的参数(category_id参数+排序+几个GET参数用于过滤),我也不想重写任何视图或控制器方法.. 。

--------------编辑

好的,我的树有元素     categorytree 它看起来像这样:

$params = $this->requestAction('/categories/tree/'.$category_id); 
print_category($params['tree'][0],$params['parents'],$category_id);

$ category_id作为参数传递给元素。 这是在/ books / browse:

<?php echo $this->element('categorytree', array("category_id" => $category_id)); ?>

我需要的是,在categorytree元素中,我希望每个树节点都是基于当前URL加载书籍/浏览的/ books / browse的有效链接。 我的意思是网址可能是:

books/browse/34/sort:asc/page:4?author=Author&something=something

我可以得到这个链接     里面/书籍/浏览/ ... 查看并将其传递给元素,然后解析它以替换/ 34 /(它的类别ID)与其他类别......但有没有更容易/更优雅的方式这样做?

1 个答案:

答案 0 :(得分:1)

将您的类别树放在元素中,然后使用CakePHP's requestAction从类别控制器中获取数据。

您可以将您的树状视图保留在图书区域(这是有意义的,因为这是用户正在浏览的内容) - 取决于您将其放入哪个视图。

最重要的是,用户正在搜索书籍,因此这就是视图和代码所在的位置。使用“类别”树可以根据书籍传递要在查询中使用的类别的变量。