【发布时间】:2020-01-13 15:35:22
【问题描述】:
我正在使用 CakePHP 1.3。在app/views/layouts/default.ctp 我正在使用这个:
<?php echo $content_for_layout;?>
根据 CakePHP 应用程序开发,作者 Ahsanul Bari 和 Anupom Syam,
"这一行主要负责放置controller-rendered view 布局内的内容。我们必须包含这个来告诉 Cake 去哪里 放置特定于操作的控制器渲染视图。”
我试图弄清楚如何修改$content_for_layout 的内容。但我想这不是我应该修改以修改布局的那种变量。我想要完成的是修改$content_for_layout 或创建一个新布局来为 A/B 测试实验定制一些元素。你能帮我更好地理解如何操作$content_for_layout吗?谢谢。
更新 1:
我正在配置 A/B 测试实验。我在app/views/layouts/default.ctp 有这个:
<body>
..........
<div id="split-test-homepage-content-original">
..........
<?php echo $content_for_layout;?>
..........
</div>
<div id="split-test-homepage-content-redesign">
..........
<?php echo $content_for_layout;?>
..........
</div/>
</body>
使用 CSS 我隐藏/显示 split-test-homepage-content-original 或 split-test-homepage-content-redesign 取决于拆分测试将显示的版本。但是我遇到了问题,因为$content_for_layout 被渲染了两次。尽管视觉上人们只看到一个版本,但在幕后页面在同一页面上加载了两次 $content_for_layout。这给我带来了各种各样的问题,例如重复的表单、由于重复变量而导致 JavaScript 元素无法正常工作等。我想要做的是修改 $content_for_layout 为 <div id="split-test-homepage-content-redesign"> 所做的事情。我正在考虑的一个选择是使用 JavaScript,以便在 jQuery(document).ready(function($) { 部分中我可以在实验中做一些事情,以便如果变量包含特定的布尔值,我会显示一个版本或另一个版本。像这样的:
if(javascriptvariable==true){ 然后为视图使用以下 HTML:
<div id="split-test-homepage-content-original">
..........
<?php echo $content_for_layout;?>
..........
</div>
否则,Javascript 会处理不显示上述内容,但是:
<div id="split-test-homepage-content-redesign">
..........
<?php echo $content_for_layout;?>
..........
</div/>
JavaScript 方法对您是否有意义,或者我应该做些什么来创建新布局或修改 $content_for_layout 所做的事情?谢谢。
【问题讨论】:
-
$content_for_layout包含渲染的动作视图模板(例如views/posts/index.ctp),如果您想修改变量包含的内容,那么您可能需要相应地修改动作视图模板。如果您解释究竟是什么您想要/需要更改如何准确,您可能会得到更好的答案,也许提供之前/之后的示例。 -
谢谢@ndm。我在
UPDATE 1中更具体地解释了我想要完成的问题。 -
究竟是在哪里做出的(程序化)决定应该向用户显示哪个版本?如果决定是在服务器端做出的,那么您可以简单地更改为不同的布局,例如您的应用程序控制器。如果决定是在前端做出的,那么您应该考虑将该更改移至后端;)
-
这个决定是由谷歌优化在前端做出的,它是我正在使用的配置 A/B 测试实验的工具。谷歌优化不操纵后端,但它可以处理前端的任何事情。因此,在我看来,我需要考虑前端解决方案,因为计划 A 和计划 B 将是后端解决方案。
-
啊,我明白了,一种方法是使用脚本模板,即
<script type="text/template">,并通过JS 相应地插入所需的模板。只要内容在模板标签内,它就不会被解释为 HTML,因此不会搞砸。但请注意,您不能在模板内嵌套<script>标签。
标签: cakephp model-view-controller layout cakephp-1.3 cakephp-1.2