在home.ctp上的cakephp中呈现元素

时间:2013-11-14 09:30:00

标签: cakephp

我正在使用cakephp 2.4

在我的应用中,我在CategoriesController中有一个视图,即“编辑”,我可以通过http://mydomain/categories/editorial

显示该类别下的所有文章

我试图通过echo $this->element('editorials');

显示home.ctp中“编辑”类别下的所有文章

但它显示Notice (8): Undefined variable: articles [APP\View\Elements\Editorials.ctp, line 4]

CategoriesController.php

public function Editorial() {
    $category =  $this->Category->find('first', array(
        'conditions' => array(
            'Category.id' => 1
        )
    ));

    $this->set(compact('category'));

    $this->Paginator = $this->Components->load('Paginator');

    $this->Paginator->settings = array(
        'Article' => array(
            'recursive' => -1,
            'contain' => array(
                'Category'
            ),
            'limit' => 5,
            'conditions' => array(
                'Article.category_id' => $category['Category']['id'],

            ),
            'order' => array(
                'Article.id' => 'ASC'
            ),
            'paramType' => 'querystring',
        )
    );
    $articles = $this->Paginator->paginate($this->Category->Article);

    $this->set(compact('articles'));

}

查看文件:

    <?php if (!empty($articles)): ?>

<?php echo $this->element('editorials'); ?>

<?php echo $this->element('pagination-counter'); ?>

<?php echo $this->element('pagination'); ?>

<?php endif; ?>

元素/ Editorials.ctp:

    <div class="row">
<?php
$i = 0;
foreach ($articles as $art):
$i++;
if (($i % 4) == 0) { echo "\n<div class=\"row\">\n\n";}
?>
<div class="col col-sm-3">

<?php echo $this->Html->link($art['Article']['title'], array('controller' => 'articles', 'action' => 'view', 'id' => $art['Article']['id'])); ?>
<br />
</div>
<?php
if (($i % 4) == 0) { echo "\n</div>\n\n";}
endforeach;
?>

<br />
<br />

</div>

2 个答案:

答案 0 :(得分:0)

尝试在您的编辑操作中添加$this->render('file');,并使用视图文件名替换文件而不使用.ctp

答案 1 :(得分:0)

你可以改变的东西:

    1. In controller:
       $this->set(compact('category', 'articles')); // one set()

    2. In view: (Main Point)

      <?php echo $this->element('editorials', array('articles' => $articles)); ?>

在这里,您需要将articles变量传递给上面的元素,默认情况下,元素无法识别viewVars