Как разместить мой блок на странице просмотра продукта каталога
Мой XML-код находится здесь
<?xml version="1.0"?>
<layout version="0.1.0">
<catalog_product_view>
<reference name="product.info">
<block type="demo/demo" before="product.description" name="demo" template="demo/demo.phtml" />
</reference>
</catalog_product_view>
</layout>
Я хочу поставить свой блок под product.info и выше описание продукта.
Я не хочу изменять какой-либо основной файл и не хочу использовать Метод getChildHtml
3 answers
Попробуйте это:
<catalog_product_view>
<reference name="alert.urls">
<block type="total/prototal" name="total_prototal" template="total.phtml" />
</reference>
</catalog_product_view>
Убедитесь, что эта строка должна существовать в представлении.phtml файл:
<?php echo $this->getChildHtml('alert_urls') ?>
Надеюсь, это поможет!
Перейдите к файлу просмотра вашей темы и добавьте его туда, где вы хотите отобразить содержимое..
Mage::app()->getLayout()->createBlock('modulename/blockname')->getFunctionName()->setTemplate('path_to_template');
Вы можете управлять порядком вставленных блоков с помощью атрибута узла before
и after
. См. http://www.magentocommerce.com/knowledge-base/entry/controlling-block-order для получения дополнительной информации.
Но, поскольку вы устанавливаете свой блок demo.demo
как дочерний блок product.info
, он не будет отображаться как дочерний блок, если вы не отображаете его getChildHtml
внутри catalog/product/view.phtml
(product.info файл шаблона).
Установите свой блок не внутри product.info
, а снаружи, прямо перед этим описанной выше техникой:
<catalog_product_view>
<block type="demo/demo" before="product.info" name="demo" template="demo/demo.phtml" />
</catalog_product_view>
Дочерние блоки не отображаются автоматически путем перебора их дочерних элементов. Есть всего несколько типов блоков, где это верно. См. http://blog.philwinkle.com/the-most-misunderstood-concept-in-magento / чтобы понять это и неправильное представление о блоках в Magento.
Автоматически отображаемые блоки
При определении в макете любой блок типа ядро/text_list автоматически отобразит все свои дочерние элементы. В то время как ядро/текст будет автоматически отображаться, он действительно должен содержать только текст и, следовательно, не полезен для целей компоновки
И
Другие блоки
Любой другой тип блока необходимо будет отрисовывать вручную. Предоставьте блоку псевдоним, который затем можно передать в getChildHtml, возвращая содержимое, которое вы затем повторяете.
Чтобы дать вам tl; др.