Проблемы с пользовательским виджетом Magento - PullRequest
1 голос
/ 24 января 2012

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

В настоящее время я разрабатываю виджет 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 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>

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

1 Ответ

0 голосов
/ 27 января 2012

Попробуйте это

Приложение / код / ​​местные / Ecreation / PNListWidget / Блок

protected function _toHtml() {
    $blockHTML = $this -> getLayout() -> createBlock('cms/block') -> toHtml();
    return parent::_toHtml($blockHTML);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...