2

我读了这个这个。但我找不到答案。

我有这个文件,其中存在我的操作视图: View/MyController/index.ctp

我也有这个文件 View/Commons/blocks.ctp

Blocks.ctp文件包括以下内容:

$this->start('sidebar1');
echo 'Some content';
$this->end();

$this->start('sidebar2');
echo 'Some content more';
$this->end();

所以在“ index.ctp ”文件中我想获取sidebar1sidebar2。我怎样才能做到这一点?我把它写到index.ctp,但没有用。

<?php echo $this->fetch('sidebar1'); ?>

这个也没用

<?php echo $this->fetch('../View/Commons/blocks.ctp/sidebar1'); ?>

谢谢

4

1 回答 1

3

放在 index.ctp 的顶部:

$this->extend('Common/blocks.ctp');

通过块和视图继承,您可以创建基本上类似于标准 Cake 布局文件的“子布局”。因此,您将拥有主 layout.ctp,而控制器操作视图 ctp 将基于通过块“填充”的父视图文件(例如 /Commons/xxxx.ctp)。

块类似于元素,但不那么“正式”,除非您使用“视图继承”功能。它们的标记和数据在您的脚本中创建,可能在多个位置,因此调试/维护它们可能更麻烦(即想象将标记附加到来自多个类的块)。如果您不使用继承,它们也更难重用。

元素更像是可以在任何控制器+动作视图或布局中使用的独立视图文件:所有标记都在一个地方,您只需传入数据。

底线:如果你是 Cake 新手,你可以只用元素就可以过得很好。视图继承可以帮助使视图/布局更加优雅,但代价是一些复杂性。

于 2012-04-12T09:46:59.030 回答