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