Получить список всех способов доставки программным способом.

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

У каждого продукта будет раскрывающийся атрибут под названием «Класс доставки». Администратор сможет создавать эти классы доставки в серверной части. Они дадут ему имя и выберут, какие методы разрешены.

Когда придет время получать расценки на доставку, мы покажем только разрешенные методы, основанные на классе доставки.

Мой главный вопрос: как я могу получить список всех методов доставки, которые может выбрать администратор при создании этих классов доставки?

И в качестве второстепенного вопроса, имеет ли смысл выполнять фильтрацию разрешенных методы внутри 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;
}
17
задан Cœur 3 July 2017 в 17:51
поделиться