Я надеюсь, что кто-то может помочь мне здесь.
В настоящее время я разрабатываю виджет Magento, который просматривает список подкатегорий и продуктов, содержащихся в этих категориях, и отображает их в ul.
Пока у меня две проблемы.
- HTML из шаблона .phtml не отображается на внешнем интерфейсе
У меня естьдобрался до стадии, когда виджет показывается в бэкэнде и когда вы выбираете его, он вставляет виджет, указывающий на правильный путь для шаблона, но когда вы проверяете интерфейс, он ничего не отображает.Я не уверен, почему?Мой код приведен ниже.
- Названия продуктов не проходят через
Я проверил свой код 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 class="row">
<?php $category = Mage::getModel('catalog/category') -> load($catID); ?>
<a href="<?php echo $category -> getUrl(); ?>" title="<?php echo $category -> getName(); ?>"><?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()?>"><?php echo $_product->getName() ?></a>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
<?php endforeach?>
приложение / код / локальное / создание / 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();
}
}
?>
app / code / local / Ecreation / PNListWidget / etc / config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Ecreation_PNListWidget>
<version>0.1.0</version>
</Ecreation_PNListWidget>
</modules>
</config>
app / code / local / Ecreation / PNListWidget / etc/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>
Надеюсь, я был настолько подробен, насколько это возможно, и что кто-то может указать мне правильное направление.
ПРИМЕЧАНИЕ.Мне бы хотелось, чтобы виджет позволил пользователю выбрать категорию верхнего уровня, затем получить идентификатор для этой категории и вставить его в код, который будет использоваться в качестве основной категории в приведенном ниже коде, где он загружает идентификатор категории 3.:
$mainCategory = Mage::getModel('catalog/category') -> load(3) -> getChildren();
EDIT : ОК, ребята, я изменил код файла .phtml, чтобы теперь отображать названия продуктов,а также показывать только те товары, которые были выставлены видимыми в каталоге.Код ниже.
<?php
$mainCategory = Mage::getModel('catalog/category') -> load(3) -> getChildren();
$categoryIDs = explode(',', $mainCategory);
?>
<div class="row">
<?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();?>"><?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(); ?>"><?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>
Я знаю, что я очень близок, но это расстраивает, и мне нужно уложиться в сроки, чтобы это работало,так что, если у кого-то есть какие-либо предложения или они могут указать мне правильное направление, это было бы здорово.Спасибо.