CakePHP查看包括其他视图

时间:2008-09-18 15:34:39

标签: php templates cakephp

我有一个CakePHP应用程序,在某个时刻会显示产品媒体(图片或视频)的视图我想知道是否有一些视图包含威胁视频或威胁图片的视图,具体取决于标志。我想将这些“小视图”用于其他几个目的,因此它应该像“蛋糕组件”一样用于重复利用。

你们建议在Cake约定中使用什么(而不是使用原始include('')命令)

8 个答案:

答案 0 :(得分:18)

查看此link,更具体地说,该手册页的元素部分,应告诉您需要知道的所有内容

答案 1 :(得分:9)

为了获取此处的信息以防万一有人偶然发现,请务必注意解决方案因CakePHP版本而异。

对于CakePHP 1.1

$this->renderElement('display', array('flag' => 'value'));

在您的视图中,然后在/app/views/elements/中,您可以创建一个名为display.thtml的文件,其中$flag将包含您传递给它的任何值。

对于CakePHP 1.2

$this->element('display', array('flag' => 'value'));

在您的视图中,然后在/app/views/elements/中,您可以创建一个名为display.ctp的文件,其中$flag将包含您传递给它的任何值。

<小时/> 在这两个版本中,元素都可以访问视图可以访问的所有数据+传递给它的任何值。此外,正如有人指出的那样,requestAction()也是一种选择,但如果不使用缓存就可以在性能上付出沉重代价,因为它必须完成正常操作所需的所有步骤。

< / p>

答案 2 :(得分:7)

在您的控制器中(在此示例中为posts控制器)。

function something() {
    return $this->Post->find('all');
}

在您的元素目录(app / views / element)中创建一个名为posts.ctp。

的文件

在posts.ctp中:

$posts = $this->requestAction('posts/something'); 
foreach($posts as $post): 
    echo $post['Post']['title']; 
endforeach; 

然后在你看来:

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

这主要取自CakePHP书籍: Creating Reusable Elements with requestAction

我确实认为使用requestAction非常昂贵,所以你需要考虑缓存。

答案 3 :(得分:5)

只需使用:

<?php include('/<other_view>.ctp'); ?>

在.ctp中,您的操作最终会进入。

例如,构建存档函数

function archived() {
  // do some stuff
  // you can even hook the index() function
  $myscope = array("archived = 1");
  $this->index($myscope);
  // coming back, so the archived view will be launched
  $this->set("is_archived", true); // e.g. use this in your index.ctp for customization
}

可能会调整您的索引操作:

function index($scope = array()) {
  // ...
  $this->set(items, $this->paginate($scope));
}

您的archive.ctp将是:

<?php include('/index.ctp'); ?>

理想地重用控制器动作和视图的代码。

答案 4 :(得分:4)

对于CakePHP 2.x

Cake 2.x的新功能是扩展给定视图的能力。因此,虽然元素非常适合于使用少量可重用代码,但扩展视图允许您重用整个视图。

有关更多/更好的信息,请参阅手册

http://book.cakephp.org/2.0/en/views.html#extending-views

答案 5 :(得分:1)

如果您希望元素可以访问调用视图可以访问的相同数据,则元素可以正常工作。

如果您希望嵌入式视图可以访问自己的数据集,则可能需要使用requestAction()之类的内容。这允许您嵌入一个完整的视图,否则它将是独立的。

答案 6 :(得分:0)

  

我想用那些“小视图”来   其他几个目的,所以它应该   是“喜欢”的蛋糕组成部分   再利用。

这是通过“助手”完成的,described here。但我不确定这真的是你想要的。 “Elements”建议似乎也是正确的。这在很大程度上取决于你想要完成的事情。我的两分钱......

答案 7 :(得分:0)

在CakePHP 3.x中,您可以简单地使用:

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>
<body id="Bodenpreisrechner">
<div class="container">
    <form>
        <section class="row">
            <div class"col-md-6">
                <div class="input-group">
                    <label for="lohn"> Durchschnittliche Arbeitszeit je Hektar
                        <input id="arbeitszeitjeha" input type="number" class="form-control" aria-label="..."  placeholder="Stunden/ha">
                    </label>

                    <div class="dropdown">
                        <button class="btn btn-default dropdown-toggle" type="button" id="hilfe" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
                            Hilfe
                            <span class="caret"></span>
                        </button>

                        <ol class="dropdown-menu" aria-labelledby="hilfe">
                        <table id="arbeitszeit" height="auto" class="gridtable" border="1" style="cursor: pointer;">
                        <tr>
                            <td></td>
                            <td>10ha</td>
                            <td>50ha</td>
                            <td>100ha</td>
                            <td>Individuel</td>
                        </tr>
                        <tr>
                            <td>Marktfrucht</td>
                            <td>10</td>
                            <td>10</td>
                            <td>10</td>
                            <td><a href="http://daten.ktbl.de/vrpflanze/prodverfahren/start.action#start" target="_blank">KTBL</a></td>
                        </tr>
                        <tr>
                            <td>Milchvieh</td>
                            <td>10</td>
                            <td>10</td>
                            <td>10</td>
                            <td><a href="http://daten.ktbl.de/wkrtier/?tx_ktblsso_checktoken[token]=" target="_blank">KTBL</a></td>
                        </tr>
                        <tr>
                            <td>Veredelung</td>
                            <td>10</td>
                            <td>10</td>
                            <td>10</td>
                            <td><a href="http://daten.ktbl.de/wkrtier/?tx_ktblsso_checktoken[token]=" target="_blank">KTBL</a></td>

                        </tr>
                    </table>
                    </ol>
                    </div>
                </div>
            </div>  
        </section>
    </form>
</div>

这将从与父视图相同的目录呈现视图。