Magento: удалить способ доставки в веб-интерфейсе - PullRequest
0 голосов
/ 13 октября 2011

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

Все работает нормально, но проблема в том, что способ доставки виден во внешнем интерфейсе. Я опубликую это расширение позже в magento connect, поэтому редактировать шаблоны внешнего интерфейса невозможно.

Кто-нибудь знает, как отключить носитель во внешнем интерфейсе, не отключая модуль во внутреннем интерфейсе, не изменяя статус на неактивный и не редактируя шаблоны? (например, пользовательский блок, отображение которого отклоняется)

Спасибо всем! Mru

EDIT: Я попробовал ваш совет так, но он не работает:

    <blocks>
        <checkout>
            <rewrite>
                <onepage_shipping_method_availible>XXX_XXX_Block_Checkout_Onepage_Shipping_Method_Available</onepage_shipping_method_availible>
            </rewrite>
        </checkout>
    </blocks>

и создал этот класс:

class XXX_XXX_Block_Checkout_Onepage_Shipping_Method_Available extends Mage_Checkout_Block_Onepage_Shipping_Method_Available
{

    public function getShippingRates()
    {
        if (empty($this->_rates)) {
            $this->getAddress()->collectShippingRates()->save();

            $groups = $this->getAddress()->getGroupedAllShippingRates();

            return $this->_rates = $groups;
        }
        return $this->_rates;
    }
}

(я не знаю, почему он отображается неправильно ...)

Спасибо за внимание, MRu

EDIT2: Извините за то, что я так глуп ... Приведенный выше код сработал бы, если бы я не смог написать 'availablealbe' ...

Спасибо!

Ответы [ 2 ]

2 голосов
/ 27 марта 2015

Вы можете скрыть способ доставки из внешнего интерфейса с помощью наблюдателя, напишите этот код в config.xml

<frontend>
<events>
    <sales_quote_collect_totals_before>
        <observers>
            <frontend_shipping_rates_sales_quote_collect_totals_before>
                <class>yourmodule/observer</class>
                <method>hideShippingMethods</method>                    
            </frontend_shipping_rates_sales_quote_collect_totals_before>
        </observers>                
    </sales_quote_collect_totals_before>
</events>

Второй в Observer.php используйте этот код

public function hideShippingMethods( Varien_Event_Observer $observer )
{
    if (Mage::getDesign()->getArea() ===   Mage_Core_Model_App_Area::AREA_FRONTEND)
    {
        $quote              = $observer->getEvent()->getQuote();
        $store              = Mage::app()->getStore($quote->getStoreId());
        $carriers           = Mage::getStoreConfig('carriers', $store);

        $hiddenMethodCode   = 'freeshipping'; 

        foreach ($carriers as $carrierCode => $carrierConfig) 
        {
            if( $carrierCode ==  $hiddenMethodCode )
            {
                $store->setConfig("carriers/{$carrierCode}/active", '0');
            }
        }
}
 }
1 голос
/ 13 октября 2011

Вам необходимо перегрузить метод Mage_Checkout_Block_Onepage_Shipping_Method_Available::getShippingRates()

...