Новый атрибут Magento для продуктов со странами
У меня в магазине magento 10000 товаров, и мне пришлось сделать эти товары доступными для определенных стран, поэтому я хотел бы продолжить выполнение задачи, добавив доступную страну в качестве нового атрибута для каждого продукта, как я могу это сделать?
1 answers
Если я согласен с комментарием Пола, я отвечу на вопрос так, как вам нужно, т. Е. Создам атрибут со списком стран.
К сожалению, создание атрибута в панели администратора не является простым решением. Вам придется вручную вводить каждую страну вручную. Что было бы излишним, так как список стран уже доступен в Magento.
Чтобы создать атрибут страны в Magento, вам необходимо создать атрибут при установке (или обновлении) сценарий и установите для него исходную модель.
Mangeto предлагает две модели, которые загружают страны:
Mage_Adminhtml_Model_System_Config_Source_Country
Mage_Catalog_Model_Product_Attribute_Source_Countryofmanufacture
Первый, может использоваться только в качестве источника для записей конфигурации и не может использоваться в качестве атрибута продукта.
Второй, хотя его название могло бы быть более общим, может быть использован в качестве источника для списка стран. Что он делает, так это загружает список стран и сопоставляет их с доступными странами, выбранными в панель администратора.
Для более полного (и ocd-менее) решения вы можете создать свою собственную исходную модель и использовать для нее другое имя, а также расширить модель Countryofmanufacture
или просто повторно реализовать метод getAllOptions()
в случае, если вам нужно удалить первый пустой элемент.
В вашем сценарии установки/обновления вам понадобится следующий код. Я объясню это встроенным в код как комментарии PHP
/*
* Due to the large amount of variables & options here,
* I'll start by setting them first,
* and you change them as needed
*/
/*
* I'm using the default attribute set here, if you need other
* or more attribute sets, just replace `Default` or add it as an
* extra array item.
*/
$attributeSets = array(
'Default',
);
$attributeLabel = 'Available in Countries';
$attributeCode = 'available_in_countries';
$attributeGroup = 'General';
$attributeOrder = 100;
$attributeOptions = array(
// This is the the label text which will show in the admin panel
'label' => $attributeLabel,
// You can change the input to 'select' instead of 'multiselect'
// if you don't want to allow multi selection
'input' => 'multiselect',
// A multiple select is saved as varchar in the database,
// besides the country ids are actually text.
'type' => 'varchar',
// Set the 'backend' to null if changed 'multiselect' to 'select'
'backend' => 'eav/entity_attribute_backend_array',
'frontend' => null,
// This line is where the magic happens. We are setting a source
// model as the values of attribute. Each time its data needs
// to be loaded, it will go to that model and load the return
// values of its 'getAllOptions()' method
'source' => 'catalog/product_attribute_source_countryofmanufacture',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
'required' => false,
// You can set this to true, but leaving it as false removes some
// admin capabilities like deleting the attribute from admin panel.
'user_defined' => false,
// Change the following option to true
// if the attribute should be required.
'required' => false,
'class' => null,
'unique' => false,
'searchable' => false,
'filterable' => false,
'comparable' => false,
'visible_on_front' => false,
'is_configurable' => false,
'visible' => true,
);
/*
* The following method will finally create the attribute
*/
$this->addAttribute(
Mage_Catalog_Model_Product::ENTITY,
$attributeCode,
$attributeOptions, $attributeCode
);
/*
* This block of code will add the attribute to the attribute sets
* which are set in the $attributeSets variable
*/
foreach ($attributeSets as $attributeSet) {
$this->addAttributeToSet(
Mage_Catalog_Model_Product::ENTITY, $attributeSet,
$attributeGroup, $attributeCode, $attributeOrder
);
}
Отказ от ответственности: В этом ответе учитывается, что вы уже знаете, как создавать сценарии установки, и что ваш сценарий установки использует класс Mage_Eav_Model_Entity_Setup
или пользовательский класс, который расширяет его.