เมื่อใดควรใช้ 'ชื่อ' และเมื่อใช้ 'เป็น'


26

ฉันพบว่าเมื่อพยายามใช้unsetChildวิธีการบางครั้งฉันต้องใช้แอตทริบิวต์ 'name' และ others 'as' ดูเหมือนว่าหากมีการเพิ่มบล็อกตามปกติคุณใช้ 'เป็น' แต่ถ้าถูกเพิ่มเข้าไปในบล็อกโดยใช้appendวิธีการคุณอาจต้องใช้ 'ชื่อ' สมมติฐานนี้ถูกต้องหรือไม่

อะไรคือเหตุผลที่อยู่เบื้องหลังสิ่งนี้และมีวิธีมาตรฐานที่จะเข้าใจคุณลักษณะที่คุณควรใช้

คำตอบ:


15

nameบล็อกจะสามารถอ้างอิงโดย นามแฝง ( as) ใช้เพื่อทำให้ชื่อยาวของบล็อกง่ายขึ้นและมีความแตกต่างกับขอบเขตเท่านั้น Nameจะต้องไม่ซ้ำกันภายในหน้าและaliasภายในบล็อกหลัก


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

5
@JanTomka ให้การใช้งานหลักของนามแฝงแล้ว มันควรจะชี้ให้เห็นว่าในขณะที่คำสั่งที่ว่า"คุณไม่สามารถอ้างอิงบล็อกด้วยชื่อของมันถ้ามันมีชุดนามแฝง"เป็นความจริงโดยทั่วไปมีวิธีการตั้งชื่อgetBlockHtml()ซึ่งบางครั้งใช้ในการแสดงบล็อกโดยชื่อ
benmarks

6

เมื่อคุณใช้เป็นคุณสามารถโทร$ this-> getChildHtml ("as_value")บนเทมเพลต phtml

ชื่อต้องไม่ซ้ำกันและสามารถนำมาใช้สำหรับการ<อ้างอิง>บล็อก<ลบ>อื่น ๆ

ตัวอย่างเช่น (catalog.xml):

<block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
    <block type="catalog/product_view_media" name="product.info.media" as="media" template="catalog/product/view/media.phtml"/>
</block>

หากคุณเปิดแคตตาล็อก / ผลิตภัณฑ์ / view.phtml คุณจะเห็น:

<div class="product-img-box">
    <?php echo $this->getChildHtml('media') ?>
</div>

เห็นไหม เป็น = "media" จากนั้น $ this-> getChildHtml ('media') ...


5

ยังไม่มีใครตอบคำถามโดยเฉพาะอย่างยิ่งเกี่ยวกับunsetChildเลย วิธีการที่เกี่ยวข้องกับลูก ๆของบล็อกมักจะอ้างถึงบล็อกเด็กโดยนามแฝงซึ่งเป็นที่รู้จักกันเฉพาะผู้ปกครองและแตกต่างจากชื่อที่ไม่ซ้ำกันทั่วโลก

แต่ถ้าบล็อกนั้นถูกสร้างขึ้นโดยไม่มีการกำหนดนามแฝง

ดังนั้นโดยย่อหากบล็อกย่อยมีนามแฝงชัดเจนคุณต้องใช้นามแฝง ถ้าไม่ใช้ชื่อ

นามแฝงจะได้รับจากas="..."ถ้าบล็อกถูกสร้างขึ้นเป็นบล็อกเด็กผ่านทาง XML หรือโดยพารามิเตอร์การกระทำถ้าพวกเขาถูกย้ายไปรอบ ๆ หรือแบบไดนามิกเพิ่มเข้ามาด้วยวิธีการเช่นappend(), หรือinsert()setChild()

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