php – Magento:为不同的页面布局使用不同的页脚

编程之家收集整理的这篇文章主要介绍了php – Magento:为不同的页面布局使用不同的页脚编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我已经尝试了各种教程,但我无法让它工作.

基本上,我想在我的主页上有一个不同的页脚.我已经设置了两个页面布局,并将它们应用到了cms页面.

所以在主页布局中我指的是……

<?PHP echo $this->getChildHtml('footer_home') ?>

在所有其他页面上……

<?PHP echo $this->getChildHtml('footer_alt') ?>

很简单!
然后在页面xml我修改了引用页脚的部分如下…

            <block type="page/html_footer" name="footer_alt" as="footer_alt" template="page/html/footer_alt.phtml">
            <block type="page/html_wrapper" name="bottom.container" as="bottomContainer" translate="label">
                <label>Page Footer</label>
                <action method="setElementClass"><value>bottom-container</value></action>
            </block>
            <block type="page/switch" name="store_switcher" as="store_switcher" template="page/switch/stores.phtml"/>
            <block type="page/template_links" name="footer_links" as="footer_links" template="page/template/links.phtml"/>
        </block>


          <block type="page/html_footer" name="footer_home" as="footer_home" template="page/html/footer_home.phtml">
            <block type="page/html_wrapper" name="bottom.container" as="bottomContainer" translate="label">
                <label>Page Footer2</label>
                <action method="setElementClass"><value>bottom-container</value></action>
            </block>
            <block type="page/switch" name="store_switcher" as="store_switcher" template="page/switch/stores.phtml"/>
            <block type="page/template_links" name="footer_links" as="footer_links" template="page/template/links.phtml"/>
        </block>

我认为这就是问题所在.以上所有页面显示了’footer_alt’页脚,我不知道为什么.

我可以确认’page / html / footer_alt.phtml’和’page / html / footer_home.phtml’设置正常.

我希望这是有道理的.谢谢.

解决方法:

所有这些答案对于简单直接的解决方案而言过于复杂.重写是过度的.重写Magento核心,即使正确完成,也应始终引发警报并立即强迫开发人员彻底阅读Magento源代码.根据我的经验,每一次Magento的心痛都伴随着一种神秘但完全令人满意的解决方案.这是令人满意的解决方案之一.

毫无疑问,Magento任意决定确保页脚模板不会生成唯一的缓存键.这意味着根据加载的网站部分,页脚不能有所不同;要清楚,它实际上可以,但只有禁用块缓存.但是,永远不应该禁用块缓存,因此最终,这相当于限制整个站点的单个页脚.

在网站的不同部分需要不同的页脚是合法的用例.例如,在结账时:结账应该是身临其境且没有注意力分散.但是,当网站上的任何页面被点击时,这些页面中的页脚将被缓存,然后结帐将显示相同的页脚.

这里描述的解决方案需要核心重写,这是不好的,或者需要一些其他条件检查,这些检查不会在一些条件下合理扩展.

我的解决方案很简单:将cacheKey添加新模板.定位给定页面的布局句柄,引用页脚,设置模板,然后添加cacheKey.这只是标准的Magento布局XML.此布局XML更改单页结帐时的页脚 – 并且仅在单页结帐时更改.此外,缓存将继续适用于以这种方式定义的每个唯一页脚.

    <checkout_onepage_index>
        <reference name="footer">
            <action method="setTemplate">
                <template>linusmoneymaker/page/html/checkout-footer.phtml</template>
            </action>
            <action method="setCacheKey">
                <key>your-own-unique-cache-key-for-linus-moneymaker</key>
            </action>
        </reference>
    </checkout_onepage_index>

这有以下原因.以下是app / code / core / Mage / Core / Block / Abstract.PHP的源代码,它处理所有块缓存:

/**
 * Get Key for caching block content
 *
 * @return string
 */
public function getCacheKey()
{
    if ($this->hasData('cache_key')) {
        return $this->getData('cache_key');
    }
    /**
     * don't prevent recalculation by saving generated cache key
     * because of ability to render single block instance with different data
     */
    $key = $this->getCacheKeyInfo();
    //ksort($key);  // ignore order
    $key = array_values($key); // ignore array keys
    $key = implode('|', $key);
    $key = sha1($key);
    return $key;
}

请注意,如果定义了一个cacheKey,那个将优先于将从app / code / core / Mage / Page / Block / Html / Footer.PHP中的getCacheKeyInfo方法生成的那个,这不会产生一个模板唯一的cacheKey.通过从布局XML提供cacheKey,Magento有效地放弃了认的,非唯一的页脚cacheKey,而不是通过站点的给定部分的布局XML手动提供的.

这不仅是正确的方式,而且无限扩展.网站上的每个页面都可以实际定义自己的页脚.

总结

以上是编程之家为你收集整理的php – Magento:为不同的页面布局使用不同的页脚全部内容,希望文章能够帮你解决php – Magento:为不同的页面布局使用不同的页脚所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

猜你在找的PHP相关文章

创建测试数据: 首先我们需要创建一些测试记录,然后先来演示一下数据库的基本的链接命令的使用. create table username ( uid int not null,name varchar
漏洞总结 PHP 文件上传漏洞 只验证MIME类型: 代码中验证了上传的MIME类型,绕过方式使用Burp抓包,将上传的一句话小马*.php中的Content-Type:application/php
笔者将学习PHP时的学习笔记分享出来,基本上是前面的那些博文的汇总,看起来更方便一些,笔者最近放弃了PHP代码审计部分,所以不再继续学下去了,由于精力实在达不到,只能选择一样进行发展,不想成为半瓶子醋
字符操作 字符串输出: 字符串输出格式与C语言保持一致, &lt;?php // printf 普通的输出函数 $string = &quot;hello lyshark&quot;; $number
PHP 基本语法 普通变量: 普通变量的定义语法,以及通过各种方式判断字符串是否为空. &lt;?php $var = &quot;&quot;; // 定义字符串 define(&quot;CON_
只验证MIME类型: 代码中验证了上传的MIME类型,绕过方式使用Burp抓包,将上传的一句话小马*.php中的Content-Type:application/php,修改成Content-Type
代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。软件代码审计是对编程项目中源代码的全面分析,旨在发现错误,安全漏洞或违反编程约定。 接下来你需要准备好L
(o゜▽゜)o☆[BINGO!] ok,我们先看看cookie是什么东东? cookie是服务器留在客户端的用于识别用户或者存储一些数据的小文件(注意,session存储在服务器端,这是两者的区别之一
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注