Magento 2 - block name vs เป็นชื่อ


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

แล้วใช้เป็นจะให้มันถูกเรียกว่าผ่าน:

เป็น = "blog.posts"

เมื่อฉันพยายามที่จะอ้างอิงบล็อกจะถูกลบออกใช้เป็นชื่อผมสังเกตเห็นว่ามันก็ไม่ได้ลบออกจากหน้า:

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

ดังนั้นฉันจึงไปดูสิ่งที่หน้าจริงเรียกว่าในส่วนหน้า (เพียงเพราะมันถูกเปลี่ยนชื่อที่อื่นหรือไม่ได้ใช้ชื่อ posts.tab) - ชื่อบล็อกจะถูกเรียกด้วยposts.tabซึ่งเป็นสิ่งที่ดี เนื่องจากฉันสามารถอ้างอิงบล็อกนั้นเพื่อลบออกได้ มันใช้งานได้ดี

แต่คำถามของฉันคือทำไมบล็อกไม่ถูกดึงผ่านการใช้เป็นและแทนที่จะถูกดึงผ่านการใช้ชื่อแทน

ประการที่สองสิ่งที่เป็นจุดในการเป็นเพราะเห็นได้ชัดว่าบล็อกไม่สามารถมีความขัดแย้งชื่ออยู่แล้วและต้องไม่ซ้ำกัน - แต่ผมอาจจะผิดโดยสิ้นเชิง

คำตอบ:


2

ในตัวอย่างนี้ดูเหมือนว่าแอททริบิวต์นั้นไม่มีประโยชน์ (ยกเว้นว่าจะใช้ที่อื่น) ฉันไม่คิดว่ามันจะสร้างความแตกต่างถ้ามันถูกเรียกผ่านชื่อหรือนามแฝงดังนั้นมันขึ้นอยู่กับนักพัฒนาที่จะเลือกว่าจะใช้อะไร getChildHtmlถ้านามแฝงมีการตั้งค่าที่คุณจะต้องใช้ว่าเมื่อเรียก

โดยส่วนตัวฉันจะใช้นามแฝงเพื่อย่อชื่อบล็อกยาวและ / หรือเพื่อให้สามารถอ่านได้ง่ายเมื่อแสดงผลผ่านเทมเพลต ตัวอย่างเช่นหากcheckout.header.logo.textจำเป็นต้องใช้เป็นlogo.textและheader.logo.textใช้ไปแล้วคุณสามารถใช้นามแฝงlogoTextบนบล็อคทั้งหมด สิ่งนี้จะไม่ส่งผลกระทบต่อการแสดงผลของบล็อกอื่น ๆ ที่ใช้นามแฝงเดียวกันเว้นแต่ว่าพวกเขาจะถูกตั้งค่าในการจัดการรูปแบบและการอ้างอิงเดียวกัน

TL: DRมันไม่ได้สร้างความแตกต่างมากนักมันเป็นชื่อที่อ่านง่าย / สั้นลง

หมายเหตุ

คำถาม M1 นี้มีข้อมูลเพิ่มเติมอีกเล็กน้อยเมื่อ - ใช้ 'ชื่อ' และเมื่อใช้ 'เป็น'

ฉันไม่แน่ใจว่าสิ่งนี้จะใช้กับ M2 หรือไม่ แต่ใน M1 มีอาร์กิวเมนต์อย่างน้อยหนึ่งตัวที่เรียกว่าaliasใช้asคุณลักษณะนี้ฉันคิดว่าเกี่ยวข้องกับการแทรกหรือการตั้งค่าบล็อก

อ้างอิงจากสเฟเบียน Schmengler: "ถ้าบล็อกที่สร้างขึ้นโดยไม่กำหนดนามแฝงชื่อแทนค่าเริ่มต้น" นั่นหมายถึง M1 แต่ฉันคิดว่าเป็นสิ่งเดียวกันกับ M2


ตอนนี้ที่ 2.3.1 ฉันไม่สามารถรับชื่อจาก HTML เนื่องจากบล็อกมี "เป็น" นามแฝง หลังจากลบนามแฝงฉันจะได้บล็อกในเทมเพลต
TheKitMurkit

จุดดี @TheKitMurkit - ฉันได้เพิ่มคำตอบของฉันที่ระบุว่า "หากตั้งชื่อแทนคุณจะต้องใช้เมื่อเรียก getChildHtml" ขอบคุณ
Ben Crook
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.