Magento: как предварительно заполнить значения атрибута раскрывающегося списка товаров - PullRequest
6 голосов
/ 06 октября 2009

Я создаю магазин Magento для покупателя и хотел бы добавить атрибут ко всем продуктам, который функционирует как выпадающий список. Как и атрибут «Производитель».

Однако вместо того, чтобы вручную вводить список значений для атрибута, я бы хотел, чтобы значения заполнялись с внешнего сайта. Таким образом, каждый раз, когда вы создаете новый продукт или редактируете существующий, выпадающий список заполняется актуальным списком значений, которые были получены с удаленного сайта. Список следует выбирать не один раз при создании атрибута, а каждый раз, когда продукт создается или редактируется.

Например, предположим, что вы можете получить список всех производителей через curl с удаленного сайта. Имена в этом списке иногда изменяются или добавляются, однако идентификаторы остаются неизменными, поэтому их следует использовать за кулисами. Как бы вы заполнили значения выпадающего списка производителя?

Я знаю, как создать простое пользовательское расширение, но расширение админ-панели - новый для меня материал.

Любая помощь приветствуется.

Ответы [ 3 ]

10 голосов
/ 26 октября 2009

Атрибуты продукта Magento чрезвычайно гибкие, но наличие динамических значений для каждого продукта означает, что вам потребуется один атрибут для каждого продукта, что не имеет особого смысла, поэтому я предполагаю, что эти значения атрибутов имеют некоторые общие черты для продуктов вашего магазина поэтому у вас будет ограниченное количество атрибутов (или один?). Для каждого такого атрибута вы должны заранее создать атрибут и базовую модель для него, а затем использовать задание cron или событие, обновить параметры значения атрибута из вашего API и кэшировать их локально в базе данных или каким-либо другим методом. Вы можете добавить атрибут в установщик вашего модуля следующим образом:

$installer->addAttribute('catalog_product', 'my_attr_code', array(
    'label' => 'Attribute Name',
    'required' => false,
    'input' => 'select',
    'source' => 'namespace/source',
    'default' => 'none',
    'position' => 1,
    'sort_order' => 3,
));

Или сверните свой собственный оператор вставки SQL для таблицы eav_attribute. Убедитесь, что ваш новый атрибут назначен атрибуту, заданному в бэкэнде, чтобы его можно было использовать с вашими продуктами. Затем вы создаете модель на My_Namespace_Model_Source, которая расширяет Mage_Eav_Model_Entity_Attribute_Source_Table (при условии, что вы хотите выбрать входные данные для значений вашего атрибута) и реализует как минимум следующие методы:

getAllOptions()
getOptionText($value)

Таким образом, они будут извлекать данные из динамических параметров, которые кэшируются локально, и по большей части ваш новый атрибут будет вести себя как любой другой в Magento. Обязательно используйте интеллектуальное кэширование, потому что эти методы потенциально могут получить многократный удар при загрузке одной страницы. Вы можете наблюдать событие, которое вызывается непосредственно перед отображением страницы создания или редактирования продукта, в противном случае просто переопределите класс или контроллер или используйте задачу Magento cron.

Редактировать: Вы также можете использовать существующие модели атрибутов Magento и создавать значения параметров с помощью существующего API, но я предполагаю, что для выполнения синхронизации или по какой-либо другой причине вам могут потребоваться дополнительные метаданные, в этом случае вам понадобится пользовательская модель бэкэнда.

4 голосов
/ 25 октября 2009

Вам нужно найти диспетчеры событий Magento.

По сути, каждый раз, когда происходит событие - обновление продукта, отправка заказа, удаление чего-либо и т. Д. - через систему отправляется сообщение. Эти сообщения могут быть перехвачены и могут вызывать методы, которые вы создали. Чтобы достичь того, чего вы хотите, вам нужно отловить событие, которое запускается при создании и обновлении продукта, и заставить его запускать метод из одного из ваших пользовательских модулей. Этот метод затем получит значение с удаленного сайта и обновит продукт вместе с ним.

После быстрого поиска в Google я нашел следующую статью:

http://blog.baobaz.com/en/tag/magento-events

Вы можете узнать, какие события Magento запускаются, посмотрев соответствующий код модуля.

4 голосов
/ 09 октября 2009

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

Затем на странице отображения продукта в администраторе я бы переопределил редактирование и новые действия productController, чтобы загрузить значения с помощью curl для этого атрибута (вы можете найти идентификатор атрибута в таблице eav_attribute)

Затем вы можете упаковать это как пользовательское расширение, чтобы не редактировать основной код напрямую. Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...