Magento 2-块名称与名称


10

我已经在Magento 2中进行了一些工作,并且已经覆盖了我已经安装的某些模块(在前端)。

但是今天,我遇到了以前从未遇到过的事情。我一直在使用的模块内部有一个块,其中包含以下内容:

<referenceBlock name="product.info.details">
    <block class="Vender\Module\Block\Catalog\Related" name="posts.tab" as="blog.posts"
               template="Vender_Module::catalog/posts.phtml" group="detailed_info">
    </block>
</referenceBlock>

它设置其名称:

posts.tab

然后使用as允许通过以下方式调用它:

as =“ blog.posts”

当我尝试使用as名称引用要删除的块时,我注意到它没有从页面中删除它:

<referenceBlock name="product.info.details">
    <referenceBlock as="blog.posts" remove="true"/>
</referenceBlock>

所以我去看看的页面居然要求在前端(只是柜面它被改名别的地方或者没有使用posts.tab名) -块的名字被称为与posts.tab,这是罚款因为我可以引用该块将其删除。很好。

但是我的问题是,为什么不使用as而不是使用name来拖动块?

其次,as中的意义是什么,因为显然,块无论如何都不能有冲突的名称,并且应该是唯一的-但我可能完全错了。

Answers:


2

在这种情况下,as属性似乎毫无用处(除非在其他地方使用了该属性),我认为通过名称或别名来调用它不会有所不同,因此由开发人员决定使用什么-只需注意如果设置了别名,则在调用时需要使用该别名getChildHtml

就个人而言,我只会使用别名来缩短长块名称和/或在通过模板呈现时使其易于阅读。例如,如果checkout.header.logo.text需要用作logo.text并且header.logo.text已经使用,则可以logoText在所有块上使用别名。除非将其他块设置在相同的布局句柄和引用中,否则这不会影响使用相同别名的其他块的渲染。

TL:DR并没有太大的区别,更多的是用于可读性/缩短名称。

笔记

这个M1问题还有更多信息- 何时使用“名称”以及何时使用“ as”

我不确定这是否适用于M2,但是在M1中至少有一个alias使用该as属性的参数被调用,我认为它与插入或取消设置块有关。

根据Fabian Schmengler的说法:“如果创建块时未定义别名,则别名默认为名称。” 那是指M1,但我想同样的道理也适用于M2。


刚刚在2.3.1上,我无法通过名称获取childChildHtml,因为该块具有“ as”别名。只有删除别名后,我才能在模板中获取该块。
TheKitMurkit

好点@TheKitMurkit-我在回答中添加了一点,指出“如果设置了别名,则在调用getChildHtml时需要使用该别名。”。谢谢。
Ben Crook
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.