Добавить ссылку на корзину (с количеством товаров) на боковой панели в Magento - PullRequest
3 голосов
/ 26 января 2011

Я столкнулся с уникальной проблемой от уникального клиента. На экране учетной записи Magento обычно есть два места, где появляется «Моя корзина»; верхняя панель и боковая панель в виде блока. Однако мне было поручено удалить их и разместить ссылку (с количеством товаров в корзине) в разделе «Моя учетная запись» на боковой панели.

Похоже, что как новый пользователь я не могу публиковать изображения. Это создаст проблему.

МОЙ СЧЕТ

Приборная панель
Адресная книга
Моя корзина (2 товара) <---- Эта ссылка здесь. В пределах этой области и показывая количество элементов <br> Мои заказы
Мои обзоры продукции
Майские метки Подписка на рассылку

Теперь добавление самой ссылки является проблемой. На самом деле, это довольно просто и выполняется

<action method="addLink" translate="label" module="checkout"><name>cart</name><path>checkout/cart/</path><label>My Cart</label></action>

в файле customer.xml.

Проблема связана с перечислением товаров в корзине в этой области. Если бы этот сайт был только на английском языке, несколько операторов "if" внутри code \ core \ Mage \ Customer \ Block \ Account \ Navigation.php могли бы его разрешить. Тем не менее, кажется, что весь перевод выполняется до вызова функции addItem для добавления этих ссылок в меню.

Я полагаю, что если бы количество элементов в корзине могло отображаться до вызова addItem, эта проблема была бы решена, но весь php из тегов игнорировался.

Если у кого-то есть решение или какие-либо подсказки, это будет с благодарностью! Спасибо, что нашли время, чтобы прочитать это.

Ответы [ 2 ]

1 голос
/ 26 января 2011

Обычно связь с количеством элементов достигается в Mage_Checkout_Block_Links по методу addCartLink(). Боковая панель учетной записи пользователя - Mage_Customer_Block_Account_Navigation, у которой нет этого метода. Вы должны добавить его самостоятельно, переопределив класс.

Ваш / модуль / и т.д. / config.xml

<config>
    <global>
        <blocks>
            <yourmodule>
                <class>Your_Module_Block</class>
            </yourmodule>
            <customer>
                <rewrite>
                    <account_navigation>Your_Module_Block_Account_Navigation</account_navigation>
                </rewrite>
            </customer>
        </blocks>
    </global>
</config>

Ваш / модуль / блок / Account / navigation.php
(скопировано в основном из Mage_Checkout_Block_Links)

class Your_Module_Block_Account_Navigation extends Mage_Customer_Block_Account_Navigation
{
    public function addCartLink()
    {
        if ($parentBlock = $this->getParentBlock()) {
            $count = $this->helper('checkout/cart')->getSummaryCount();

            if( $count == 1 ) {
                $text = $this->__('My Cart (%s item)', $count);
            } elseif( $count > 0 ) {
                $text = $this->__('My Cart (%s items)', $count);
            } else {
                $text = $this->__('My Cart');
            }

            $parentBlock->addLink($text, 'checkout/cart', $text, true, array(), 50, null, 'class="top-link-cart"');
        }
        return $this;
    }
}

макет / customer.xml

<reference name="customer_account_navigation">
    <action method="addCartLink" />
</reference>
1 голос
/ 26 января 2011

Я вполне уверен, что мы не сможем выполнить функцию "Моя корзина (% d элементов)" из действия блока addLink (особенно из файла макета), так как нам нужно вызвать Mage::helper('checkout/cart')->getCart()->getItemsCount() дляполучите количество товаров в нашей корзине.

Я рекомендую использовать операторы if, как вы предлагаете, затем подключиться к системе локализации с помощью <?php echo $this->__($str) ?>, чтобы перевести ваши строки в файл шаблона, добавив перевод вфайлы CSV локали, если необходимо.

...