Я пишу быстрый и грязный модуль, чтобы ограничить способы доставки, основанные на товарах в тележке. Например, если покупатель добавляет еду, я хочу, чтобы были выбраны только способы доставки в ночное время. Некоторые коммерческие расширения просто излишни и имеют гораздо больше функций, которые мне нужны.
У каждого продукта будет раскрывающийся атрибут под названием «Класс доставки». Администратор сможет создавать эти классы доставки в серверной части. Они дадут ему имя и выберут, какие методы разрешены.
Когда придет время получать расценки на доставку, мы покажем только разрешенные методы, основанные на классе доставки.
Мой главный вопрос: как я могу получить список всех методов доставки, которые может выбрать администратор при создании этих классов доставки?
И в качестве второстепенного вопроса, имеет ли смысл выполнять фильтрацию разрешенных методы внутри 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;
}