cancel
Showing results for 
Search instead for 
Did you mean: 

Связать категорию и набор атрибутов

Связать категорию и набор атрибутов

День добрый. 

 

Необходимо сделать так чтобы при создании категории было поле для указания подходящего под категорию набора атрибутов

 

Застрял вот на каком моменте:

 

<?php
$installer = $this;
$installer->startSetup();
$attribute = array(
'type' => 'text',
'label'=> 'Associated set of attributes',
'input' => 'select',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute:Smiley FrustratedCOPE_GLOBAL,
'visible' => true,
'required' => true,
'user_defined' => true,
'default' => "",
'option' => array ('value' => array(
'optionone'=> array(
0 =>'My First Option'),
'optiontwo'=> array(
0 =>'My Second Option'))),
'group' => "General Information"
);
$installer->addAttribute('catalog_category', 'bottom_description', $attribute);
$installer->endSetup();
?>

 

как мне вывести вместо 'value' => array(
'optionone'=> array(
0 =>'My First Option'),
'optiontwo'=> array(
0 =>'My Second Option'))

 

список наборов атрибутов.

 

хотел по аналогии с 

'values'=> Mage::getResourceModel('eav/entity_attribute_set_collection')
->setEntityTypeFilter(Mage::registry('product')->getResource()->getEntityType()->getId())
->load()
->toOptionArray()

 

но он на getResource() ругается.

Может есть у кого идеи.

5 REPLIES 5

Re: Связать категорию и набор атрибутов

Если вы про это 

Mage::registry('product')->getResource()->getEntityType()->getId()

 то Это получение текущего товара их registry если он там конечно есть, т.е. вы находитесь на странице товара.На странице  категории в сессии эта переменная

Mage::registry('product')

 всегда будет пуста (ну или в лучшем случае содержать какое то старое значение). Так что ошибка гарантирована.

Re: Связать категорию и набор атрибутов

Спасибо за ответ. Понял что не туда копаю. Задача вывести список действующих наборов атрибутов (я на странице создания категории в админке)

 

т.е идея в том что бы при создании категории в доп поле внести id одного из наборов атрибутов (при этом действующие атрибуты просто списком вываливаются - выбираешь один из них и его id в это доп поле в БД сохраняется)

 

хотел как по аналогии с app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit/Tab/Settings.php вывести - это когда на странице создания продукта выбираешь один из действующих наборов атрибутов. там код выглядит

 

$form = new Varien_Data_Form();
        $fieldset = $form->addFieldset('settings', array('legend'=>Mage::helper('catalog')->__('Create Product Settings')));

        $entityType = Mage::registry('product')->getResource()->getEntityType();

        $fieldset->addField('attribute_set_id', 'select', array(
            'label' => Mage::helper('catalog')->__('Attribute Set'),
            'title' => Mage::helper('catalog')->__('Attribute Set'),
            'name'  => 'set',
            'value' => $entityType->getDefaultAttributeSetId(),
            'values'=> Mage::getResourceModel('eav/entity_attribute_set_collection')
                ->setEntityTypeFilter($entityType->getId())
                ->load()
                ->toOptionArray()
        ));

Re: Связать категорию и набор атрибутов

Класс, который вернет массив опций для выпадающего списка лучше вообще делать отдельно. Примеров интернете много.

Вот то что я делал в одном проекте для адресов клиентов

class Smartceo_Customer_Model_Metro extends Mage_Eav_Model_Entity_Attribute_Source_Abstract {

	const MAIN = 1;
	const OTHER = 2;

	public function getAllOptions() {

		$metro = array(
			"",
			"Авиамоторная",
			"Автозаводская",
			"Академическая",
			"Александровский сад",
			"Алексеевская",
			"Алма-Атинская",
			"Алтуфьево",
			"Аннино",
			"Арбатская (Арбатско-Покровская линия)",
			"Арбатская (Филевская линия)",
			"Аэропорт",
			"Бабушкинская'",
			"Багратионовская",
			"Баррикадная",
			"Бауманская",
			"Беговая",
			"Белорусская",
			"Беляево",
			"Бибирево",
			"Библиотека имени Ленина",
			"Битцевский парк",
			"Борисовская",
			"Боровицкая",
			"Ботанический сад",
			"Братиславская",
			"Бульвар адмирала Ушакова",
			"Бульвар Дмитрия Донского",
			"Бунинская аллея",
			"Варшавская",
			"ВДНХ",
			"Владыкино",
			"Водный стадион",
			"Войковская",
			"Волгоградский проспект",
			"Волжская",
			"Волоколамская",
			"Воробьевы горы",
			"Выставочная",
			"Выхино",
			"Деловой центр",
			"Динамо",
			"Дмитровская",
			"Добрынинская",
			"Домодедовская",
			"Достоевская",
			"Дубровка",
			"Жулебино",
			"Зябликово",
			"Измайловская",
			"Калужская",
			"Кантемировская",
			"Каховская",
			"Каширская",
			"Киевская",
			"Китай-город",
			"Кожуховская",
			"Коломенская",
			"Комсомольская",
			"Коньково",
			"Красногвардейская",
			"Краснопресненская",
			"Красносельская",
			"Красные ворота",
			"Крестьянская застава",
			"Кропоткинская",
			"Крылатское",
			"Кузнецкий мост",
			"Кузьминки",
			"Кунцевская",
			"Курская",
			"Кутузовская",
			"Ленинский проспект",
			"Лубянка",
			"Люблино",
			"Марксистская",
			"Марьина роща",
			"Марьино",
			"Маяковская",
			"Медведково",
			"Международная",
			"Менделеевская",
			"Митино",
			"Молодежная",
			"Мякинино",
			"Нагатинская",
			"Нагорная",
			"Нахимовский проспект",
			"Новогиреево",
			"Новокосино",
			"Новокузнецкая",
			"Новослободская",
			"Новоясеневская",
			"Новые Черемушки",
			"Октябрьская",
			"Октябрьское поле",
			"Орехово",
			"Отрадное",
			"Охотный ряд",
			"Павелецкая",
			"Парк культуры",
			"Парк Победы",
			"Партизанская",
			"Первомайская",
			"Перово",
			"Петровско-Разумовская",
			"Печатники",
			"Пионерская",
			"Планерная",
			"Площадь Ильича",
			"Площадь Революции",
			"Полежаевская",
			"Полянка",
			"Пражская",
			"Преображенская площадь",
			"Пролетарская",
			"Проспект Вернадского",
			"Проспект Мира",
			"Профсоюзная",
			"Пушкинская",
			"Пятницкое шоссе",
			"Речной вокзал",
			"Рижская",
			"Римская",
			"Рязанский проспект",
			"Савеловская",
			"Свиблово",
			"Севастопольская",
			"Семеновская",
			"Серпуховская",
			"Славянский бульвар",
			"Смоленская (Арбатско-Покровская линия)",
			"Смоленская (Филевская линия)",
			"Сокол",
			"Сокольники",
			"Спортивная",
			"Сретенский бульвар",
			"Строгино",
			"Студенческая",
			"Сухаревская",
			"Сходненская",
			"Таганская",
			"Тверская",
			"Театральная",
			"Текстильщики",
			"Теплый Стан",
			"Тимирязевская",
			"Третьяковская",
			"Трубная",
			"Тульская",
			"Тургеневская",
			"Тушинская",
			"Улица 1905года",
			"Улица Академика Янгеля",
			"Улица Горчакова",
			"Улица Подбельского",
			"Улица Скобелевская",
			"Улица Старокачаловская",
			"Университет",
			"Филевский парк",
			"Фили",
			"Фрунзенская",
			"Царицыно",
			"Цветной бульвар",
			"Черкизовская",
			"Чертановская",
			"Чеховская",
			"Чистые пруды",
			"Чкаловская",
			"Шаболовская",
			"Шипиловская",
			"Шоссе Энтузиастов",
			"Щелковская",
			"Щукинская",
			"Электрозаводская",
			"Юго-Западная",
			"Южная",
			"Ясенево"
		);

		$this->_options = array();
		foreach ($metro as $item) {
			$this->_options[] = array(
				'label' => $item,
				'value' => $item
			);
		}

		return $this->_options;
	}

	public function toOptionArray() {
		return $this->getAllOptions();
	}

}

Используется и в админке и фронте соответственно.

Re: Связать категорию и набор атрибутов

Спасибо за подсказку. Класс отдельный попозже напишу - сейчас стараюсь суть сделать - потом оформлю.

 

Вот накропал

<?php

$_options = array();

function toOptionArray()
{
if (!count($this->_options)) {
$entityTypeId = Mage::getResourceModel('catalog/product')->getTypeId();
$attributeSetCollection = Mage::getResourceModel('eav/entity_attribute_set_collection')
->setEntityTypeFilter($entityTypeId);

foreach ($attributeSetCollection as $_attributeSet) {
$this->_options[] = array(
'value' => $_attributeSet->getId(),
'label' => $_attributeSet->getAttributeSetName()
);
}
}
return $this->_options;
}


$installer = $this;
$installer->startSetup();
$attribute = array(
'type' => 'text',
'label'=> 'Associated set of attributes',
'input' => 'select',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute:Smiley FrustratedCOPE_GLOBAL,
'visible' => true,
'required' => true,
'user_defined' => true,
'default' => "",
'option' => $_options,
'group' => "General Information"
);
$installer->addAttribute('catalog_category', 'bottom_description', $attribute);
$installer->endSetup();
?>

 

но он выдает мне пустую строку - хотя в наборах атрибутов есть наборы кроме дефаултного - а он их не выводит на странице создания категории.

Re: Связать категорию и набор атрибутов

Делайте сразу по уму. Мадженто не Опенкарт. Наколенные и заплаточные методы здесь не проходят.