草庐IT

php - 从模块更新前端布局

coder 2024-04-18 原文

我已经创建了自己的 magento 模块并成功地扩展了核心 Controller 和模型,但是我在对布局 xml 文件执行相同操作时遇到了问题。我只想更新结帐多运费运输页面。到目前为止,我只设法覆盖了整个 checkout.xml 文件,但我更愿意只将它放在我的 xml 文件中。

这是我的模块 config.xml 中的内容,tm.xml 文件位于 app/design/frontend/default/default/layout/

<frontend>
        <layout>
            <updates>
                    <checkout>
                         <file>tm.xml</file>
            </checkout>
        </updates>
    </layout>
</frontend>

谢谢

最佳答案

Update: The text below refers to a method of storing template and XML files outside of the app/design folder. Over the years since this answer was written, this has been strongly discouraged my the Magento core team. They've gone so far as to enforces this at the application level with code, and continued to block new techniques as they've been developed. It's strongly discouraged, but I'm leaving the answer as it is for historical reasons.

首先,您可能需要考虑将布局文件放在模块中的某个位置。我不确定这种做法有多普遍,但从分布的角度来看是有道理的。它还确保您的布局覆盖将应用,即使有人更改了默认主题。做这样的事情应该可行

<file>../../../../../code/local/Packagename/Modulename/layouts/tm.xml</file>

其次,正如您所指出的,使用上面的 XML,您将完全替换 magento 安装中的 checkout.xml。你不想这样做。相反,您想将布局更新(该 XML 文件的内容)添加到 Magento 的可用更新列表中。所以改为做这样的事情。

<layout>
    <updates>
        <my_package_my_module_name>                     
            <file>../../../../../code/local/Packagename/Modulename/layouts/tm.xml</file>
        </my_package_my_module_name>
    </updates>
</layout>        

此处最大的变化是我们将 更改为 。 Magento 将本节中指定的所有 XML 加载到称为包布局的东西中。因此,您的 XML 将与 checkout.xml 中的 XML 一起存在。

在 tm.xml 中,您将为多次运输设置特定规则

<layout version="0.1.0">
    <checkout_multishipping>
        <!-- ... -->
    </checkout_multishipping>

    <checkout_multishipping_login>
        <!-- ... -->
    </checkout_multishipping_login>
</layout>

这里要牢记的重要一点是,checkout.xml 中针对多运费的现有规则仍然存在。您需要编写 规则来覆盖这些规则的作用。这就是 Magento 布局系统的工作原理。我建议查看 Magento Designer's Guide如果你还没有,特别是 Intro to Layouts部分。

最后一点,您提到您正在覆盖 Controller 。如果您正在验证多重运输 Controller ,则需要使用 标签,您需要使用与 Controller 上该页面的 Action Controller / Action 方法组合的名称相匹配的标签

<packagename_modulename_actioncontrollername_action />

关于php - 从模块更新前端布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1058848/

有关php - 从模块更新前端布局的更多相关文章

  1. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  2. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  3. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  4. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  5. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  6. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

  7. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

  8. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  9. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  10. ruby - nanoc 和多种布局 - 2

    是否可以为特定(或所有)项目使用多个布局?例如,我有几个项目,我想对其应用两种不同的布局。一个是绿色的,一个是蓝色的(但是)。我想将它们编译到我的输出目录中的两个不同文件夹中(例如v1和v2)。我一直在玩弄规则和编译block,但我不知道这是怎么回事。因为,每个项目在编译过程中只编译一次,我不能告诉nanoc第一次用layout1编译,第二次用layout2编译。我试过这样的东西,但它导致输出文件损坏。compile'*'doifitem.binary?#don’tfilterbinaryitemselsefilter:erblayout'layout1'layout'layout2'

随机推荐