gpt4 book ai didi

php - 在 Magento 的 Checkout 'Review' 阶段添加 block

转载 作者:数据小太阳 更新时间:2023-10-29 02:51:55 24 4
gpt4 key购买 nike

我正在构建一个扩展,以在 Magento 的单页结帐中的“下订单”按钮之前添加一个特定的 block 。我很难找到正确的咒语来简单地将一个 block 附加到这个部分,更不用说在另一个句柄之前/之后得到它了。目的是在不更改任何模板的情况下使用此覆盖。

在我的扩展的 XML 中,我有:

<checkout_onepage_review>
<reference name="root">
<block type="myextension/blockname" name="myextension.block" template="myextension/block.phtml" before="checkout.onepage.review.button" />
</reference>
</checkout_onepage_review>

myextension/block.phtml 目前只是一个简单的文本 block 。我知道一般语法是正确的,因为我可以将我的 添加到 checkout_cart_index 并看到它就好了。我缺少一些基本的东西吗?

谢谢!

最佳答案

背景

并不是所有的 block 都会自动输出它们的子 block 。只有 core/text_list 类型的 block 和调用 echo $this->getChildHtml()(无参数)的模板。
模板 block 的子项通过调用 echo $this->getChildHtml('child_alias') 呈现。
如果您考虑一下,这是有道理的 - 模板 block 的子项需要定位在模板 HTML 上下文中的某个位置。
关于您的问题,布局句柄 checkout_onepage_reviewcheckout_cart_index 除了引用不同的页面外,在功能上没有区别。

向结帐评论添加内容

结帐审核 block 包含两个 core/text_list 子项,您可以使用将自动显示的布局 XML 添加子项。

<checkout_onepage_review>
<reference name="checkout.onepage.review.info.items.before">
<block type="core/text" name="review.test.1">
<action method="setText">
<text>Test Block Before</text>
</action>
</block>
</reference>
<reference name="checkout.onepage.review.info.items.after">
<block type="core/text" name="review.test.2">
<action method="setText">
<text>Test Block After</text>
</action>
</block>
</reference>
</checkout_onepage_review>

唯一的问题是 checkout.onepage.review.info.items.after block 在协议(protocol) block 之前呈现,因此在您的情况下它可能不够好。
协议(protocol)使用以下代码呈现:

<?php foreach ($this->getAgreements() as $_a): ?>
<li>
<div class="agreement-content"<?php echo ($_a->getContentHeight() ? ' style="height:' . $_a->getContentHeight() . '"' : '')?>>
<?php if ($_a->getIsHtml()):?>
<?php echo $_a->getContent() ?>
<?php else:?>
<?php echo nl2br($this->htmlEscape($_a->getContent())) ?>
<?php endif; ?>
</div>
<p class="agree">
<input type="checkbox" id="agreement-<?php echo $_a->getId()?>" name="agreement[<?php echo $_a->getId()?>]" value="1" title="<?php echo $this->htmlEscape($_a->getCheckboxText()) ?>" class="checkbox" /><label for="agreement-<?php echo $_a->getId()?>"><?php echo $_a->getIsHtml() ? $_a->getCheckboxText() : $this->htmlEscape($_a->getCheckboxText()) ?></label>
</p>
</li>
<?php endforeach ?>

如果你想在协议(protocol)之后添加一个 block ,就在“下订单”按钮之前,不更改模板,也不重写协议(protocol) block ,你可以尝试在 checkout/agreements 集合的末尾添加一个额外的项目,将 is_html 设置为 true,输出为 content
然而,这证明是有问题的,因为协议(protocol)模型、资源和集合不提供自定义事件前缀。

如果提供的 checkout.onepage.review.info.items.after block 不起作用,这归结为以下选项。每个人都以自己的方式丑陋,所以最小的邪恶是你的选择:

  • 观察评论中链接的帖子中提到的 core_block_abstract_to_html_before
  • 观察core_collection_abstract_load_before事件,动态添加html协议(protocol)
  • 重写checkout/agreements block 并重载_toHtml()方法

我的建议是以某种方式利用 checkout.onepage.review.info.items.after block ——这样的解决方案会好得多。

关于php - 在 Magento 的 Checkout 'Review' 阶段添加 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9540480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com