我想在我的应用程序中使用blocks语句。我有一个名为:Boostrap的主题。如果我只使用语句 $ this-> element()我的元素加载没有问题,但如果我使用 $ this-> start()和 $ this-> end()我无法加载我的元素。
我尝试为TestsController创建一个名为index.ctp的新文件,但结果是一样的。我在此文件中添加了 $ this-> fetch('header')和 $ this-> fetch('footer'),但没有。
这只是我真实结构的一个例子:
主体\自举\布局\ default.thtml中:
<html>
<head>
<title></title>
</head>
<body>
<?php $this->start('header'); ?>
<?php echo $this->element('header'); ?>
<?php $this->end(); ?>
<?php echo $this->Session->flash(); ?>
<?php echo $this->fetch('content'); ?>
<?php $this->start('footer'); ?>
<?php echo $this->element('footer'); ?>
<?php $this->end(); ?>
</body>
</html>
主体\自举\元素\ header.ctp :
<header>
<h1>Hello World!!</h1>
</header>
主体\自举\元素\ footer.ctp :
<!-- app/views/themed/boostrap/elements/footer.ctp -->
<footer>
Copyright (c) Bla bla bla 2014.
</footer>
我的环境详情:
S.O:Windows 7
CakePHPVersión:2.4.4
PHPVersión:5.3.28
答案 0 :(得分:1)
你的布局应该定义块输出,而不是开始和结束方法:
<?php echo $this->fetch('header'); ?>
然后,在您的视图中,您勾勒出将要输出的块:
<?php $this->start('header'); ?>
<?php echo $this->element('header'); ?>
<?php $this->end(); ?>
鉴于此用例,块似乎不是正确的解决方案。您的元素似乎是唯一要显示的元素,您可以在布局中输出元素。但是,更合适的用例是每页的不同输出。
在你的布局中:
<?php echo $this->element('header'); ?>
<?php echo $this->fetch('header_block'); ?>
第一页:
<?php $this->start('header_block'); ?>
//Something unique to page 1
<?php $this->end(); ?>
第二页:
<?php $this->start('header_block'); ?>
//Something unique to page 2
<?php $this->end(); ?>