Я пишу быстрый и грязный модуль, чтобы ограничить способы доставки, основанные на продуктах в корзине.Например, если клиент добавляет еду, я хочу, чтобы были выбраны способы доставки только на одну ночь.Некоторые из коммерческих расширений просто излишни и обладают гораздо большей функциональностью, которая мне нужна.
Каждый продукт будет иметь выпадающий атрибут, называемый «Класс доставки».Администратор сможет создавать эти классы доставки в бэкэнде.Они дадут ему имя и выберут, какие методы разрешены.
Когда придет время получать квоты доставки, мы будем показывать только разрешенные методы, основанные на классе доставки.
Мой главный вопрос: как я могу получить список всех методов доставки, которые администратор может выбрать при создании этих классов доставки?
И как дополнительный вопрос, имеет ли смысл делатьфильтрация разрешенных методов внутри Mage_Sales_Model_Quote_Address :: requestShippingRates?(Я буду переопределять этот метод, конечно)
РЕДАКТИРОВАТЬ:
Благодаря @BrianVPS, я смог придумать код ниже.Он отображает все отдельные методы от носителей, используя optgroups.Отлично работает с множественным выбором!Я не думаю, что он проверяет, действительно ли включены методы.
public function getAllShippingMethods()
{
$methods = Mage::getSingleton('shipping/config')->getActiveCarriers();
$options = array();
foreach($methods as $_ccode => $_carrier)
{
$_methodOptions = array();
if($_methods = $_carrier->getAllowedMethods())
{
foreach($_methods as $_mcode => $_method)
{
$_code = $_ccode . '_' . $_mcode;
$_methodOptions[] = array('value' => $_code, 'label' => $_method);
}
if(!$_title = Mage::getStoreConfig("carriers/$_ccode/title"))
$_title = $_ccode;
$options[] = array('value' => $_methodOptions, 'label' => $_title);
}
}
return $options;
}