我无法在default.ctp中加载块

时间:2014-01-25 17:27:23

标签: cakephp

我想在我的应用程序中使用blocks语句。我有一个名为:Boostrap的主题。如果我只使用语句 $ this-> element()我的元素加载没有问题,但如果我使用 $ this-> start() $ this-> end()我无法加载我的元素。

我尝试为TestsController创建一个名为index.ctp的新文件,但结果是一样的。我在此文件中添加了 $ this-> fetch('header') $ this-> fetch('footer'),但没有。

这只是我真实结构的一个例子:

  1. 主体\自举\布局\ 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>
    
  2. 主体\自举\元素\ header.ctp

    <header>
        <h1>Hello World!!</h1>
    </header>
    
  3. 主体\自举\元素\ footer.ctp

    <!-- app/views/themed/boostrap/elements/footer.ctp -->
    <footer>
        Copyright (c) Bla bla bla 2014.
    </footer>
    
  4. 我的环境详情

    • S.O:Windows 7

    • CakePHPVersión:2.4.4

    • PHPVersión:5.3.28

1 个答案:

答案 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(); ?>