Чтобы создать виджет (который вы можете вставить с помощью cms), который использует категорию, чтобы сделать что-то, начните с создания стандартной структуры модуля с: / Block / etc / Helper / Model
Обратите внимание, что вМои примеры кода и имена файлов ниже вам нужно заменить [Пространство имен], [Модуль] и [модуль] на соответствующее пространство имен и модуль, который вы хотите использовать.Дело важно!
Начните с создания приложения / кода / локального / [пространства имен] / [модуля] /etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<[Namespace]_[Module]>
<version>0.0.1</version>
</[Namespace]_[Module]>
</modules>
<global>
<helpers>
<[module]>
<class>[Namespace]_[Module]_Helper</class>
</[module]>
</helpers>
<blocks>
<[module]>
<class>[Namespace]_[Module]_Block</class>
</[module]>
</blocks>
<models>
<[module]>
<class>[Namespace]_[Module]_Model</class>
</[module]>
</models>
</global>
</config>
Затем создайте приложение / код / локального /[Пространство имен] / [Модуль] /etc/widget.xml Этот виджет содержит параметр с именем «selected_category»
<?xml version="1.0"?>
<widgets>
<[module]_category type="[module]/category">
<name>[Module]: Category</name>
<description type="desc">Adds a [module] for a category.</description>
<parameters>
<selected_category>
<label>Categories</label>
<visible>1</visible>
<required>1</required>
<type>select</type>
<source_model>[module]/catopt</source_model>
</selected_category>
</parameters>
</[module]_category>
</widgets>
Затем обязательный вспомогательный файл в приложении / code / local / [Пространство имен] / [Модуль]/Helper/Data.php
<?php
class [Namespace]_[Module]_Helper_Data extends Mage_Core_Helper_Abstract
{
}
Затем модель, позволяющая пользователю выбрать категорию в диалоговом окне виджета.Это идет в app / code / local / [Namespace] / [Module] /Model/Catopt.php
<?php
class [Namespace]_[Module]_Model_Catopt
{
public function toOptionArray()
{
$category = Mage::getModel('catalog/category');
$tree = $category->getTreeModel();
$tree->load();
$ids = $tree->getCollection()->getAllIds();
$arr = array();
if ($ids){
foreach ($ids as $id){
$cat = Mage::getModel('catalog/category');
$cat->load($id);
array_push($arr, array('value' => $id, 'label' => $cat->getName().' ('.$cat->getProductCount().')'));
}
}
uasort($arr, array($this, 'labelsort'));
return $arr;
}
function labelsort($a, $b){
if ( $a['label'] == $b['label'] )
return 0;
else if ( $a['label'] < $b['label'] )
return -1;
else
return 1;
}
}
Наконец, на стороне модуля есть блок, который идет в app / code / local / [Пространство имен] / [Модуль] /Block/Category.php В этом блоке используется собственный файл .phtml для его отображения, но вы можете изменить его, чтобы использовать все, что вам может потребоваться показать, изменив тип блока и ввод в setTemplate.
<?php
class [Namespace]_[Module]_Block_Category
extends Mage_Core_Block_Template
implements Mage_Widget_Block_Interface
{
/**
* A model to serialize attributes
* @var Varien_Object
*/
protected $_serializer = null;
/**
* Initialization
*/
protected function _construct()
{
$this->_serializer = new Varien_Object();
$this->setTemplate('[module]/[module].phtml');
parent::_construct();
}
public function getCategory(){
return $this->getData('selected_category');
}
}
Не забудьте добавить установочный файл модуля в /app/etc/modules/[Namespace]_[Mo]].xml вот так
<?xml version="1.0"?>
<config>
<modules>
<[Namespace]_[Module]>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Cms />
</depends>
</[Namespace]_[Module]>
</modules>
</config>
Наконец, вам нужносоздайте файл шаблона для отображения содержимого блока.Это будет идти в /app/design/frontend/default/default/template/[module]/[module].phtml
Этот файл .phtml может использовать $ this-> getCategory () для получения категории ииди оттуда.Вы можете легко настроить блок, включенный в эти примеры, для отображения сеток списков продуктов magento по умолчанию вместо использования настраиваемого файла .phtml.