Всегда отображайте ярлык Правил цены корзины покупок над корзиной (не только при первом применении правила)


Я только что начал использовать расширение промо-товаров Amasty для добавления бесплатных товаров в корзину при покупке определенных товаров.

Надпись, которую я написал, сообщающая покупателю, почему был добавлен бесплатный товар, появляется над списком покупок при первом применении правила (у меня есть просмотры магазинов на 2 языках, и это отлично работает для обоих).

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

Я спросил об этом Amasty, и они сказали мне, что это поведение Magento по умолчанию для правил цены корзины покупок (только для отображения метки при первом применении правила).

Есть ли способ переопределить это поведение и чтобы надпись всегда отображалась над корзиной?

Author: rwired, 2014-06-28

2 answers

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

Чтобы отобразить пользовательский элемент цитаты там, где я хотел его показать, я вызываю вспомогательный метод из любого шаблона, который мне нужно изменить. Я мог бы когда-нибудь превратить это в настоящий универсальный модуль, и когда я это сделаю, я придумаю лучший способ отображения этого атрибута, а не взломаю кучу шаблонов. Из-за нехватки времени мне пришлось использовать "быстрый и грязный" метод.

Ниже приведен код, который я использовал для создания, установки и получения атрибута, а также список шаблонов, которые я изменил:

Config.xml

<config>
    <modules>
        <Company_PromoName>
            <version>0.2.0</version>
        </Company_PromoName>
    </modules>
    <global>
        <models>
            <company_promoname>
                <class>Company_PromoName_Model</class>
            </company_promoname>
        </models>
        <helpers>
           <company_promoname>
                <class>Company_PromoName_Helper</class>
            </company_promoname>
        </helpers>
        <resources>
            <company_promoname_setup>
                <setup>
                    <module>Company_PromoName</module>
                    <class>Company_PromoName_Model_Resource_Setup</class>
                </setup>
            </company_promoname_setup>
        </resources>
        <events>
            <sales_quote_add_item>
                <observers>
                    <company_promoname>
                        <class>company_promoname/observer</class>
                        <method>salesQuoteAddItem</method>
                    </company_promoname>
                </observers>
            </sales_quote_add_item>
        </events>
        <fieldsets>
            <sales_convert_quote_item>
                <promo_name>
                    <to_order_item>*</to_order_item>
                </promo_name>
            </sales_convert_quote_item>
            <sales_convert_order_item>
                <promo_name>
                    <to_quote_item>*</to_quote_item>
                    <to_invoice_item>*</to_invoice_item>
                </promo_name>
            </sales_convert_order_item>
        </fieldsets>
    </global>
</config>

Model/Resource/Setup.php

class Company_PromoName_Model_Resource_Setup extends Mage_Sales_Model_Resource_Setup
{
}

Data-install-1.0.0.php

$installer = $this;
$entities = array(
    'quote_item',
    'order_item',
    'invoice_item',
);
$options = array(
    'type'     => Varien_Db_Ddl_Table::TYPE_VARCHAR,
    'visible'  => true,
    'required' => false
);

$installer->startSetup();

foreach ($entities as $entity) {
    $installer->addAttribute($entity, 'promo_name', $options);
}

$installer->endSetup();

Observer.php

class Company_PromoName_Model_Observer
{
    /**
     * Adds the promo name to the quote item if it is a promo item when the item
     * is added to the quote
     *
     * @param  Varien_Event_Observer $observer Object containing data passed
     *                                         from the event
     * @see    Mage_Sales_Model_Quote::addItem()
     * @return void
     */
    public function salesQuoteAddItem(Varien_Event_Observer $observer)
    {
        $quoteItem = $observer->getEvent()->getQuoteItem();
        $amPromoRule = $quoteItem->getOptionByCode('ampromo_rule');

        if ($amPromoRule && $amPromoRule->getValue()) {
            $rule = Mage::getModel('salesrule/rule')->load($amPromoRule->getValue());

            if ($rule) {
                $quoteItem->setPromoName($rule->getName());
            }
        }
    }
}

Helper/Data.php

class Company_PromoName_Helper_Data extends Mage_Core_Helper_Abstract
{
    /**
     * Gets the name of the promotion from a custom item attribute
     *
     * @param  Mage_Core_Model_Abstract $item The promo item
     * @return string
     */
    public function getPromoName(Mage_Core_Model_Abstract $item)
    {
        $promoName = '';

        if ($item->getPromoName()) {
            $promoName = $item->getPromoName();
        }

        return $promoName;
    }
}

Изменено шаблоны:

frontend:
    checkout/cart/item/default.phtml
    checkout/onepage/review/item.phtml

adminhtml:
    sales/items/column/name.phtml

Скриншот рекламного товара в корзине:

Promo Item Name in Cart

Примечание: Имя расширения и снимок экрана были изменены для защиты конфиденциальности клиента.

Я надеюсь, что код, который я предоставил, поможет вам в вашем пути. Наслаждайтесь!

 3
Author: Joseph Leedy, 2014-07-03 03:32:22

Я пишу ответ, потому что пока не могу добавить комментарий.

Используя предложение Джозефа, вы можете добавить скрытый атрибут, в котором вы можете сохранить "почему я здесь, в корзине" для рекламных товаров.

Позже вы можете повторить элемент в предложении, и если этот скрытый атрибут будет найден, вы можете снова добавить промо-сообщение. Я сделаю это в файле cart.phtml или лучше в контроллере корзины, если вам нужно использовать функцию "addmessage"., Окончательный выбор зависит от того, как амасты расширение управляет сообщениями.

 0
Author: Giuseppe, 2014-07-02 18:12:36