Magento - Расчетный атрибут продукта (свойство) - PullRequest
1 голос
/ 10 февраля 2012

Я хотел бы добавить вычисляемый атрибут (свойство) в Товары.Его значение рассчитывается с использованием функции PHP, например:

function CalculateCustomAttribute() {
  ...
  //Do some calculations based on other Product attributes, date, etc 
  ...
  return $calculatedValue; // type float
}

Этот вычисленный атрибут должен быть:

  • , отображаемый на странице продукта,
  • фильтруемыйчерез «Многоуровневую навигацию» и
  • , которые можно отсортировать в «Списке продуктов».

Можно ли это сделать?И как?

1 Ответ

2 голосов
/ 10 февраля 2012

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

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

Основная идея состояла в том, что я создал новые атрибуты продукта (атрибуты eav).Они послужили исходными данными, чтобы определить, какой должна быть цена.Обратите внимание, что в моем случае эти атрибуты довольно регулярно обновлялись внешним процессом.

Затем я создал наблюдателя для события "catalog_product_save_before", который просто делал бы что-то вроде этого:

//some calculations to get the $newPrice
$product->setPrice($newPrice);

Таким образом, в основном, это сделает так, чтобы поле цены всегда было текущим, когда вы сохраняете продукт на административных экранах.

Кроме того, поскольку некоторые из атрибутов, которые использовались в качестве входных данных, постоянно менялись (обновляется внешним процессом), поэтому мы также должны были добавить задачу magento cron, чтобы запускать ее так часто, и она будет пересчитывать цену для всех затронутых продуктов с чем-то вроде этого ...

//some calculations to get the $newPrice
$product->addAttributeUpdate("price", $newPrice, Mage::app()->getStore()->getStoreId());

Так что все сводится к тому, что вы должны сохранить атрибут в БД.И, конечно, вам нужно найти конкретные места, где обновить этот производный атрибут.Возможно, ваши требования будут немного отличаться от того, что я описал, но, по крайней мере, это может привести вас на правильный путь.

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