Проблемы с персональным виджетам 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.