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

26

Я обнаружил, что при попытке использовать unsetChildметод иногда приходится использовать атрибут «name» и другие «as». Кажется, что если блок добавляется нормально, вы используете «как», но если он добавляется в блок с использованием appendметода, вам, возможно, придется использовать «имя». Это предположение верно?

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

Glo
источник

Ответы:

15

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

user487772
источник
5
Боюсь, все это не правда. В шаблоне вы не можете ссылаться на блок по его имени, если у него установлен псевдоним. Вы можете использовать только псевдоним. Что касается уникальности псевдонима, то все наоборот: псевдоним был введен, чтобы сделать возможным визуализацию другого блока без изменения шаблона.
Ян Томка
5
@JanTomka дал основное использование псевдонимов. Следует отметить, что, хотя утверждение, что «вы не можете ссылаться на блок по его имени, если у него есть набор псевдонимов», в целом верно, существует метод с именем, getBlockHtml()который иногда используется для визуализации блоков по имени.
отметки
6

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

Если вы откроете каталог / product / view.phtml, вы увидите:

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

Вы видите? as = "media", а затем $ this-> getChildHtml ('media') ...

Рикардо Мартинс
источник
5

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

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

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

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

Фабиан Шменглер
источник