【问题标题】:Magento: overriding Adminhtml template causes memory limit exhaustionMagento:覆盖 Adminhtml 模板会导致内存限制耗尽
【发布时间】:2012-12-18 15:19:21
【问题描述】:

我正在尝试覆盖 Magento 管理区域中的 phtml 文件。具体来说,我要覆盖的文件是:app/design/adminhtml/default/default/template/catalog/form/renderer/fieldset/element.phtml

在 app/code/local/CompanyName/Website/etc/config.xml 中,我有:

<rewrite>
    <catalog_form_renderer_fieldset_element>CompanyName_Website_Block_Adminhtml_Catalog_Form_Renderer_Fieldset_Element</catalog_form_renderer_fieldset_element>
</rewrite>

我已放入 app/code/local/CompanyName/Website/Block/Adminhtml/Catalog/Form/Renderer/Fieldset/Element.php 的覆盖块 PHP 文件。该文件包含:

<?php

class CompanyName_Website_Block_Adminhtml_Catalog_Form_Renderer_Fieldset_Element extends Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element
{
    public function _construct()
    {
        parent::_construct();

        $this->setTemplate('catalog/form/renderer/fieldset/element.phtml');
    }
}

最后,覆盖模板文件位于 app/design/frontend/enterprise/CompanyName/template/catalog/form/renderer/fieldset/element.phtml 并包含我要覆盖的实际模板.

我得到一个白屏,并且在日志中有这个错误:Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 227543041 bytes) in /var/www/html/gold/lib/Varien/Object.php on line 569

有什么想法吗?我在扩展正确的课程吗?文件放置正确吗?等等。在同一个 config.xml 文件中还有其他 &lt;rewrite&gt; 块可以正常工作,所以我一定是犯了一个错误!

谢谢。

【问题讨论】:

    标签: php magento


    【解决方案1】:

    这很奇怪,有几个原因。

    您似乎只是对更改此块的模板感兴趣。为什么不直接覆盖其默认模板“widget/form/renderer/fieldset/element.phtml”?

    你确定你没有类似 print_r($someObject->getData());在你的构造函数或模板的某个地方?

    Further Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element::_construct() 只是设置模板文件,所以可能没有理由调用 parent::_construct()。

    您是否在构造函数和模板文件中设置了一些 error_log() 以确保它们被调用?该模板的完整路径是什么?即它类似于 /app/design/adminhtml/default/default...?或 /app/design/adminhtml/company/...?如果是后者,我假设您有合适的配置来允许 adminhtml 模板覆盖?

    /lib/Varien/Object.php 的第 569 行发生了什么? (我的必须是不同的版本,因为该行在评论中,并且它周围的东西似乎不相关)


    编辑: 覆盖 adminhtml 模板。将此添加到 /app/etc/local.xml 中的 节点

    <stores>
        <admin>
            <design>
                <package>
                    <name>default</name>
                </package>
                <theme>
                    <default>companyname</default>
                </theme>
            </design>
        </admin>
    </stores>
    

    现在在 /app/design/adminhtml/default/ 中创建一个名为“companyname”的文件夹,并将“template”、“layout”等文件夹放入其中,就像使用任何主题一样。例如/app/design/adminhtml/default/companyname/template/widget/form/renderer/fieldset/element.phtml 适合您的情况。

    【讨论】:

    • 据我了解,您不能简单地覆盖 adminhtml 模板,您必须创建一个模块来执行此操作。这是不正确的吗?在 Google 上搜索“magento override adminhtml template”会得到非常复杂的结果,其中没有一个是清楚的。 Incho 甚至还有这种看似复杂的方法,here。有没有更简单的方法?
    • 你当然可以! (至少我正在使用的版本......)我会更新我的答案。
    • 谢谢!这确实有效(尽管我将&lt;/store&gt; 更改为&lt;/stores&gt;)。有没有办法让它“真正模块化”:即在模块文件夹本身中编辑 /etc/config.xml 文件,而不是全局 app/etc/config.xml 文件?
    • 值得注意的是,CE Find_Feed 模块包含此解决方案中描述的stores/admin/design 配置节点。因此,有必要指定stores/admin/design/package/theme/template 以使用完整的回退机制并且不破坏Find_Feed 模块。
    • 很好,我手动输入了 XML,显然弄乱了最后一个结束标记。我不确定您所说的“破坏 Find_Feed”模块是什么意思,我已经使用这种覆盖方法有一段时间了。在 1.12.0.2 上,我没有任何以“F”开头的模块,并且搜索“Find_Feed”也没有返回任何内容。
    猜你喜欢
    • 2012-07-06
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    相关资源
    最近更新 更多