草庐IT

xml - 结帐时出错 - AddBodyClass

coder 2024-06-28 原文

我在 local.xml 中添加了以下内容,以便在客户登录时添加额外的主体类:

<customer_logged_in>
<reference name="root">
  <action method="addBodyClass">
    <classname>logged-in</classname>
  </action>
</reference>
</customer_logged_in>

这行得通,但是当我转到单页结帐时,出现以下错误:

a:5:{i:0;s:98:"Invalid method Mage_Checkout_Block_Onepage_Progress::addBodyClass(Array
(
[0] => logged-in
)
)";i:1;s:1967:"#0 [internal function]: Varien_Object->__call('addBodyClass', Array)
#1 [internal function]: Mage_Checkout_Block_Onepage_Progress->addBodyClass('logged-in')

最佳答案

卡梅隆自己就根 block 是 Mage_Page_Block_Html 继承的假设提出了一个很好的观点。我做了和你一样的假设,我的代码是一样的!我还发现这破坏了一些与结帐相关的逻辑(严格来说,它破坏了不使用 Mage_Page_Block_Html 作为根 block 的 AJAX 逻辑)。

但是,作为对 cameronhimselfs 答案的改进,实际上很容易通过观察者添加主体类而无需观察 core_block_abstract_to_html_before。唯一的问题是你需要一个模块。因此,您要么需要为此目的制作一个,要么使用一个现有的有意义的。然后,最好是,我们希望挂接到每次页面加载时触发一次的事件总是

嗯,有这样的事件。 benmarks 提供了一个非常简洁的 answer to another question这给了我们一些提示。从中可以看出,好的事件可能是 controller_action_layout_generate_blocks_after

所以通过像往常一样观察事件:

<controller_action_layout_generate_blocks_after>
    <observers>
        <tghpcore_controller_action_layout_generate_blocks_after>
            <type>singleton</type>
            <class>yourmodule/observer</class>
            <method>addBodyClasses</method>
        </tghpcore_controller_action_layout_generate_blocks_after>
    </observers>
</controller_action_layout_generate_blocks_after>

你可以在你的观察者类中干净安全地达到同样的目的:

public function addBodyClasses($observer)
{
    /** @var $layout Mage_Core_Model_Layout */
    $layout = $observer->getEvent()->getLayout();
    // Retrieve the root block
    $root = $layout->getBlock('root');
    // Be 100% sure that there is a root block
    if($root) {
        // Check that the root block is a Magento page block that we can add body classes to
        if(is_a($root, 'Mage_Page_Block_Html')) {
            // Add logged in/out body classes
            if(Mage::helper('customer')->isLoggedIn()) {
                $root->addBodyClass('logged-in');
            } else {
                $root->addBodyClass('logged-out');
            }
            // You can even add more conditions and body classes for whatever you may want here
        }
    }
}

对我来说效果很好。希望它也适用于您!

关于xml - 结帐时出错 - AddBodyClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16105610/

有关xml - 结帐时出错 - AddBodyClass的更多相关文章

  1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  2. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  3. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  4. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  5. ruby - 使用 postgres.app 在 rvm 下要求 pg 时出错 - 2

    我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension

  6. ruby-on-rails - 为什么在安装 Ruby 1.9.3 时出现 404 错误? - 2

    我最近对我的计算机(OS-MacOSX10.6.8)进行了删除,并且我正在重新安装我所有的开发工具。我再次安装了RVM;但是,它不会让我安装Ruby1.9.3。到目前为止我已经尝试过:rvminstall1.9.3rvm安装1.9.3-p194rvm安装1.9.3-p448rvminstall1.9.3--with-gcc=clang所有返回相同的命令行错误:Searchingforbinaryrubies,thismighttakesometime.Nobinaryrubiesavailablefor:osx/10.6/x86_64/ruby-1.9.3-p448.Continuin

  7. objective-c - 在设置 Cocoa Pods 和安装 Ruby 更新时出错 - 2

    我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U

  8. ruby-on-rails - 使用 Rails 2.3.5 运行 Thinking Sphinx 时出现问题 - 2

    我刚刚安装了Sphinx(发行版:archlinux)并下载了源代码。然后我为Rails安装了“ThinkingSphinx”插件。我关注了officialpagesetup和thisScreencastfromRyanBates,但是当我尝试为模型建立索引时,出现了这个错误:$rakethinking_sphinx:index(in/home/benoror/Dropbox/Proyectos/cotizahoy)Sphinxcannotbefoundonyoursystem.Youmayneedtoconfigurethefollowingsettingsinyourconfig/

  9. ruby-on-rails - 使用 HTTP.get_response 检索 Facebook 访问 token 时出现 Rails EOF 错误 - 2

    我试图在我的网站上实现使用Facebook登录功能,但在尝试从Facebook取回访问token时遇到障碍。这是我的代码:ifparams[:error_reason]=="user_denied"thenflash[:error]="TologinwithFacebook,youmustclick'Allow'toletthesiteaccessyourinformation"redirect_to:loginelsifparams[:code]thentoken_uri=URI.parse("https://graph.facebook.com/oauth/access_token

  10. ruby - 尝试运行 minitest 单元测试时出错 - 2

    尝试使用rubytest/test_foo.rb运行minitest单元测试时出现以下错误:Warning:youshouldrequire'minitest/autorun'instead.Warning:oradd'gem"minitest"'before'require"minitest/autorun"'From:/home/emile/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/minitest/autorun.rb:15:```test_foo.rb看起来像这样:require'minitest/autorun'classTestFoo

随机推荐