Фон
Не все блоки выводят свои дочерние блоки автоматически.Только блоки типа core/text_list
и шаблоны, в которых вызывается echo $this->getChildHtml()
(без аргументов).
Дочерние блоки шаблонов отображаются при вызове echo $this->getChildHtml('child_alias')
.
Это имеет смысл, если вы подумаете об этом -дочерние элементы блоков шаблона должны быть расположены где-то в контексте шаблона HTML.
Что касается вашего вопроса, функциональных различий между дескрипторами макета checkout_onepage_review
и checkout_cart_index
нет, кроме того, что они ссылаются на разные страницы.
Добавление содержимого к обзору оформления заказа
Блок проверки извлечения содержит двух core/text_list
детей, к которым можно добавить детей с помощью макета XML, который будет автоматически отображаться.
<checkout_onepage_review>
<reference name="checkout.onepage.review.info.items.before">
<block type="core/text" name="review.test.1">
<action method="setText">
<text>Test Block Before</text>
</action>
</block>
</reference>
<reference name="checkout.onepage.review.info.items.after">
<block type="core/text" name="review.test.2">
<action method="setText">
<text>Test Block After</text>
</action>
</block>
</reference>
</checkout_onepage_review>
Единственная проблема заключается в том, что блок checkout.onepage.review.info.items.after
отображается перед блоком соглашений, поэтому в вашем случае он может быть недостаточно хорошим.
Соглашения отображаются с этим кодом:
<?php foreach ($this->getAgreements() as $_a): ?>
<li>
<div class="agreement-content"<?php echo ($_a->getContentHeight() ? ' style="height:' . $_a->getContentHeight() . '"' : '')?>>
<?php if ($_a->getIsHtml()):?>
<?php echo $_a->getContent() ?>
<?php else:?>
<?php echo nl2br($this->htmlEscape($_a->getContent())) ?>
<?php endif; ?>
</div>
<p class="agree">
<input type="checkbox" id="agreement-<?php echo $_a->getId()?>" name="agreement[<?php echo $_a->getId()?>]" value="1" title="<?php echo $this->htmlEscape($_a->getCheckboxText()) ?>" class="checkbox" /><label for="agreement-<?php echo $_a->getId()?>"><?php echo $_a->getIsHtml() ? $_a->getCheckboxText() : $this->htmlEscape($_a->getCheckboxText()) ?></label>
</p>
</li>
<?php endforeach ?>
Если вы хотите добавить блок после соглашений, прямо перед кнопкой «Разместить заказ», без изменения шаблона,и, не переписывая блок соглашений, вы можете попытаться добавить дополнительный элемент в конец коллекции checkout/agreements
, установив для is_html
значение true, и вы получите вывод content
.
.проблематично, потому что модель соглашений, ресурс и коллекция не предлагают пользовательский префикс события.
К чему это сводится, если предоставленный блок checkout.onepage.review.info.items.after
не работает, это следующие опции.Каждый из них по-своему безобразен, поэтому вы выбираете самое маленькое зло:
- Соблюдайте
core_block_abstract_to_html_before
, упомянутое в сообщении, на которое ссылаются в комментариях - СоблюдайтеСобытие
core_collection_abstract_load_before
и добавление HTML-соглашения на лету - Перепишите блок
checkout/agreements
и перегрузите метод _toHtml()
Моя рекомендация состоит в том, чтобы каким-то образом использоватьcheckout.onepage.review.info.items.after
блок - это решение было бы намного приятнее.