【问题标题】:How to modify $content_for_layout in CakePHP 1.3如何在 CakePHP 1.3 中修改 $content_for_layout
【发布时间】: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-originalsplit-test-homepage-content-redesign 取决于拆分测试将显示的版本。但是我遇到了问题,因为$content_for_layout 被渲染了两次。尽管视觉上人们只看到一个版本,但在幕后页面在同一页面上加载了两次 $content_for_layout。这给我带来了各种各样的问题,例如重复的表单、由于重复变量而导致 JavaScript 元素无法正常工作等。我想要做的是修改 $content_for_layout&lt;div id="split-test-homepage-content-redesign"&gt; 所做的事情。我正在考虑的一个选择是使用 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 将是后端解决方案。
  • 啊,我明白了,一种方法是使用脚本模板,即&lt;script type="text/template"&gt;,并通过JS 相应地插入所需的模板。只要内容在模板标签内,它就不会被解释为 HTML,因此不会搞砸。但请注意,您不能在模板内嵌套&lt;script&gt; 标签。

标签: cakephp model-view-controller layout cakephp-1.3 cakephp-1.2


【解决方案1】:

复制内容肯定是自找麻烦。我使用了一种更好的方法来操作 CSS 类和 ID,而无需复制内容。

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    相关资源
    最近更新 更多