Когда использовать "имя" и когда использовать "как"


Я обнаружил, что при попытке использовать метод unsetChild иногда мне приходится использовать атрибут "имя" и другие "как". Похоже, что если блок добавляется обычно, вы используете "как", но если он добавляется в блок с помощью метода append, возможно, вам придется использовать "имя". Верно ли это предположение?

Каковы причины этого и существует ли стандартный способ понять, какой атрибут вы должны использовать?

Author: Fabian Schmengler, 2013-02-15

3 answers

На блок всегда можно ссылаться с помощью name. Псевдоним (as) используется для упрощения длинного имени блока и отличается только областью действия. Name должен быть уникальным внутри страницы и alias внутри родительского блока.

 16
Author: user487772, 2013-02-15 14:30:39

Когда вы используете как , вы можете вызвать $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>

Видишь? as="медиа", а затем $this->getChildHtml("медиа")...

 6
Author: Ricardo Martins, 2013-02-17 16:09:40

Никто еще не ответил на конкретный вопрос о unsetChild. Методы, связанные с дочерними элементами блока , всегда ссылаются на дочерние блоки по псевдониму, который известен только родителю и, в отличие от имени, не является глобально уникальным.

Но если блок был создан без определения псевдонима, псевдоним по умолчанию соответствует имени.

Короче говоря, если дочерний блок имеет явный псевдоним, вы должны использовать псевдоним. Если нет, используйте имя.

Псевдонимы задаются as="..." если блок был создан как дочерний блок с помощью XML или с помощью параметра действия, если они были перемещены или динамически добавлены с помощью таких методов, как append(), insert() или setChild().

 5
Author: Fabian Schmengler, 2016-03-23 09:26:25