简体   繁体   中英

How to modify $content_for_layout in CakePHP 1.3

I am using CakePHP 1.3. In app/views/layouts/default.ctp I am using this:

<?php echo $content_for_layout;?>

According to CakePHP Application Development, by Ahsanul Bari and Anupom Syam,

"This line is mainly responsible for placing controller-rendered view contents inside the layout. We must include this to tell Cake where to place the action-specific controller-rendered views."

I was trying to figure out how to modify the content of $content_for_layout . But I guess that is not the kind of variable that I am supposed to modify to modify the layout. What I am trying to accomplish is to either modify $content_for_layout or create a new layout to customize some elements for an A/B testing experiment. Could you help me to better understand how to manipulate $content_for_layout ? Thank you.

UPDATE 1:

I am configuring an A/B testing experiment. I have this in 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>

With CSS I am hiding/showing either split-test-homepage-content-original or split-test-homepage-content-redesign depending on the version that the split test will show. But I am having problems because $content_for_layout is being rendered twice. Even though visually people only see one version but behind the scenes the page has $content_for_layout loading twice on the same page. This is causing all kinds of problems to me such as duplicate forms, JavaScript elements not working correctly as a result of duplicate variables, etc. What I want to do is to modify what $content_for_layout does for <div id="split-test-homepage-content-redesign"> . One option I am considering is to use JavaScript so that in the jQuery(document).ready(function($) { section I can do something in the experiment so that if a variable contains a specific boolean value, I show one version or the other. Something like this:

if(javascriptvariable==true){ then use the following HTML for the view:

<div id="split-test-homepage-content-original">
    ..........
    <?php echo $content_for_layout;?>
    ..........
</div>

else, the Javascript will take care of not displaying the above, but this:

<div id="split-test-homepage-content-redesign">
    ..........
    <?php echo $content_for_layout;?>
    ..........
</div/>

Does the JavaScript approach make sense to you or should I do something about creating new layouts or modifying what $content_for_layout does? Thank you.

Duplicating content was definitely asking for trouble. I used a much better approach to manipulate CSS classes and ids only without duplicating content.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM