Проблемы с персональным виджетам Magento

Надеюсь, кто-то может помочь мне здесь.

В настоящее время я разрабатываю виджет Magento, который просматривает список подкатегорий и продуктов, содержащихся в этих категориях, и отображает их в ul.

До сих пор у меня есть две проблемы.

  1. HTML из шаблона.phtml не отображается в интерфейсе

Я добрался до сцены, когда виджет показывает в бэкэнд, и когда вы его выбираете, он вставляет виджет, указывающий на правильный путь для шаблона, но когда вы проверяете интерфейс, он ничего не отображает. Я не уверен, почему? Мой код ниже.

  1. Названия продуктов не вытягиваются

Я протестировал свой PHP-код из файла шаблона.phtml на лицевой стороне, и он работает до некоторой степени. Он отображает несколько тегов с указанием категории, а затем под списком правильных продуктов для этой категории. Каждый продукт является ссылкой и имеет правильный URL для этого продукта, но, похоже, он не пробивает названия продуктов, используя:

<!--?php echo $_product--->getName()?>

Ниже мой код, с путями к файлам.

шаблон/каталог/навигация /pronav_list.phtml

<!--?php $mainCategory = Mage::getModel('catalog/category') ---> load(3) -> getChildren(); $categoryIDs = explode(',', $mainCategory);
?>
<!--?php foreach($categoryIDs as $catID): ?--> <div> <!--?php $category = Mage::getModel('catalog/category') ---> load($catID); ?> <a href="<?php echo $category -> getUrl(); ?>" title="<?php echo $category -> getName(); ?>" target="_blank"><!--?php echo $category ---> getName(); ?></a> <!--?php $_productCollection = Mage::getResourceModel('catalog/product_collection') ---> addCategoryFilter($category); ?> <!--?php if(count($_productCollection)-->0): ?> <ul> <!--?php foreach ($_productCollection as $_product): ?--> <li> <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_product->getName()?>" target="_blank"><!--?php echo $_product--->getName() ?></a> </li> <!--?php endforeach; ?--> </ul> <!--?php endif; ?-->
</div>
<!--?php endforeach?-->

Приложение/код/локальные /Ecreation/PNListWidget/Block

<!--?php class Ecreation_PNListWidget_Block_List extends Mage_Core_Block_Template implements Mage_Widget_Block_Interface { protected function _construct() { parent::_construct(); } protected function _toHtml() { $blockHTML = $this ---> getLayout() -> createBlock('cms/block') -> toHtml(); return parent::_toHtml(); } }
?>

Приложение/код/локальные /Ecreation/PNListWidget/ и т.д./config.xml

<!--?xml version="1.0" encoding="UTF-8"?-->
<config> <modules> <ecreation_pnlistwidget> <version>0.1.0</version> </ecreation_pnlistwidget> </modules>
</config>

Приложение/код/локальные /Ecreation/PNListWidget/ и т.д./widget.xml

<!--?xml version="1.0"?-->
<widgets> <list type="pronav/list_widget"> <name>ProNav Navigation List Widget</name> <description>Automatically renders 2nd level categories and their products.</description> <parameters> <template> <required>1</required> <visible>1</visible> <label>Template</label> <type>select</type> <values> <nav_list translate="label"> <value>catalog/navigation/pronav_list.phtml</value> <label>ProNav Navigation List</label> </nav_list> </values> </template> </parameters> </list>
</widgets>

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

ПРИМЕЧАНИЕ. В конечном итоге то, что я хотел бы сделать, это позволить пользователю выбрать категорию верхнего уровня, затем получить идентификатор для этой категории и вставить его в код, который будет использоваться в качестве основной категории в приведенном ниже коде, где это загружает категорию ID 3:

$mainCategory = Mage::getModel('catalog/category') -> load(3) -> getChildren();

EDIT: ОК, ребята, я изменил код файла.phtml, чтобы теперь показывать названия продуктов, а также показывать только те продукты, которые были установлены в качестве видимых в каталоге. Код ниже.

<!--?php
$mainCategory = Mage::getModel('catalog/category') ---> load(3) -> getChildren();
$categoryIDs = explode(',', $mainCategory);
?>
<div> <!--?php foreach($categoryIDs as $catID): ?--> <!--?php $category = Mage::getModel('catalog/category') ---> load($catID);?> <!--?php $_productCollection = Mage::getResourceModel('catalog/product_collection') ---> addAttributeToSelect(array('name','visibility'), 'inner') -> addCategoryFilter($category); ?> <!--?php if(count($_productCollection)-->0): ?> <ul> <a href="<?php echo $category -> getUrl();?>" title="<?php echo $category -> getName();?>" target="_blank"><!--?php echo $category ---> getName(); ?></a> <!--?php foreach ($_productCollection as $_product): ?--> <!--?php $productVisibility = $_product--->getVisibility(); ?> <!--?php if($productVisibility != 1): ?--> <li> <a href="<?php echo $_product->getProductUrl(); ?>" title="<?php echo $_product->getName(); ?>" target="_blank"><!--?php echo $_product--->getName(); ?></a> </li> <!--?php endif; ?--> <!--?php endforeach;?--> </ul> <!--?php endif; ?--> <!--?php endforeach ?-->
</div>

Это работает безупречно при использовании объявления блока на странице CMS или статическом блоке со следующим кодом:

{{block type="catalog/navigation" template="catalog/navigation/pronav_list.phtml"}}

Теперь я также немного изменил код виджета, но пока ничего не отображается на интерфейсе. Виджет можно увидеть в бэкэнд и вставить его, генерируя этот код:

{{widget type="cms/list_widget" template="catalog/navigation/pronav_list.phtml" id_path="category/3"}}

Опять же, ничего не происходит на интерфейсе. Я вполне уверен, что это проблема с кодом виджета в одном из следующих файлов.

List.php - Расположен по адресу app/code/local/Ecreation/PNListWidget/Block/

<!--?php
class Ecreation_PNListWidget_Block_List extends Mage_Core_Block_Template
implements Mage_Widget_Block_Interface { protected function _construct() { parent::_construct(); } protected function _toHtml() { $blockHTML = $this ---> getLayout() -> createBlock('cms/block') -> toHtml(); return parent::_toHtml(); } public function getCategoryID() { $idPath = explode('/', $this -> _getData('id_path')); }
}
?>

widget.xml - Расположен по адресу app/code/local/Ecreation/PNListWidget/etc/

<!--?xml version="1.0"?-->
<widgets> <list type="catalog/navigation"> <name>ProNav Category and Product Navigation List</name> <description>Automatically renders 2nd level categories and their products.</description> <parameters> <id_path translate="label"> <visible>1</visible> <required>1</required> <label>Category</label> <type>label</type> <helper_block> <type>adminhtml/catalog_category_widget_chooser</type> <data> <button translate="open"> <open>Select Category...</open> </button> </data> </helper_block> <sort_order>90</sort_order> </id_path> <template translate="label"> <label>Template</label> <visible>1</visible> <type>select</type> <value>catalog/navigation/pronav_list.phtml</value> <values> <default translate="label"> <value>catalog/navigation/pronav_list.phtml</value> <label>ProNav Sub-Category Navigation List</label> </default> </values> </template> </parameters> </list>
</widgets>

config.xml - Расположен в app/code/local/Ecreation/PNListWidget/etc/

<!--?xml version="1.0" encoding="UTF-8"?-->
<config> <modules> <ecreation_pnlistwidget> <version>0.1.0</version> </ecreation_pnlistwidget> </modules>
</config>

Я знаю, что я очень близок, но это вызывает разочарование, и мне нужно соответствовать срокам, чтобы это работало, поэтому, если у кого-то есть предложения или я могу указать мне в правильном направлении, тогда это будет здорово. Благодарю.

1 ответ

Попробуй это

Приложение/код/локальные /Ecreation/PNListWidget/Block

protected function _toHtml() { $blockHTML = $this -> getLayout() -> createBlock('cms/block') -> toHtml(); return parent::_toHtml($blockHTML);
}

licensed under cc by-sa 3.0 with attribution.