Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

How To или Чекаут: кастомайзим “Предварительная сумма”, “Доставка и обработка” и “Итог
 
t_rodriguez
Sr. Member
 
Avatar
Total Posts:  229
Joined:  2009-01-14
 

Товарищи! Этот кусок кода верно всем нам будет полезен. Особенно для тех, кто занимается кастомайзом чекаута, и ломает голову с $this->renderTotals(). Черт возьми, как ЭТО настроить под себя! Вывод идет, так сказать, «сплошняком».

Подсмотрено где-то в буржуйской части форума:

<?php foreach($this->getTotals() as $name => $totals): ?>
<?php $total[$name] 
strip_tags(Mage::helper('checkout')->formatPrice($totals->getValue())); ?>
<?php 
echo $total[$name] ?>
<?php 
endforeach ?>

Круто, вывел цены subtotal, shipping и grand_total без названий, как бы одной строкой… Нам нужны цены отдельно!

Подсмотрено здесь snippi.net

<?php $quote Mage::getModel('checkout/session')->getQuote(); ?>
<?php $totals 
$quote->getTotals(); ?>
<?php 
echo $totals['subtotal']->_data['value']?>
<br />
<?php echo $totals['shipping']->_data['value']?>
<br />
<?php echo $totals['grand_total']->_data['value']?>
<br />

Ох, как же прекрасен этот мир, имеем все цены по отдельности, используем как хотим и где хотим, добавляя названия перед ними [ценами] как нам угодно.

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

Объединяем первое и второе, получаем нужный результат:

<?php $quote Mage::getModel('checkout/session')->getQuote(); ?>
<?php $totals 
$quote->getTotals(); ?>
<?php 
echo Mage::helper('checkout')->formatPrice($totals['subtotal']->getValue()); ?>
<br />
<?php echo Mage::helper('checkout')->formatPrice($totals['shipping']->getValue()); ?>
<br />
<?php echo Mage::helper('checkout')->formatPrice($totals['grand_total']->getValue()); ?>
<br />

Все супер )

Думаете конец? Нет! Еще один вариант, и ему найдется применение. Кастомайзим код в app/code/core/Mage/Sales/Model/Quote/Address/Total: Shipping.php и Subtotal.php по аналогии с Grand.php.

Ð’ Grand.php в public function fetch(Mage_Sales_Model_Quote_Address $address) есть строка ‘area’=>’footer’, которой нет в других, указанных мной, двух файлах. А теперь смотрим в totals.phtml (в папке design/ваша_тема/checkout):

<?php echo $this->renderTotals('footer'); ?>

Вы думаете правильно — выводит grand total, по нашему «Итого с учетом доставки».
По сути вместо footer можно былобы написать что-то вроде print_grand_total. Аналогия ясна. Добавляем такуюже строку Shipping.php и Subtotal.php. Только вместо footer используем свои индивидуальные метки.

Вуаля. Пользуйтесь. И да прибудет с вами сила!

 
Magento Community Magento Community
Magento Community
Magento Community
 
Rugento
Guru
 
Avatar
Total Posts:  540
Joined:  2008-11-15
Russia, Vologda
 

Сила будет с нами только до ближайшего обновления. А потом мы перестанем считать тебя джедаем))

 
Magento Community Magento Community
Magento Community
Magento Community
 
alesto
Guru
 
Total Posts:  624
Joined:  2009-03-21
 
gomer-lab - 02 October 2009 10:20 PM

Сила будет с нами только до ближайшего обновления. А потом мы перестанем считать тебя джедаем))

Отлично сказано!!! все ждут с нетерпением версию 1.4 , но мне страшно представить на сколько же разработчики изменят модели и методы <s>чтоб всем неповадно было</s> чтобы подогнать их под новые стандарты более быстрой версии движка.

Я так понимаю с помощью этой штуки можно получить на какую сумму у человека в корзине лежит товаров?

 
Magento Community Magento Community
Magento Community
Magento Community
 
t_rodriguez
Sr. Member
 
Avatar
Total Posts:  229
Joined:  2009-01-14
 

@alesto — да, получить предварительную сумму (без доставки), сумму доставки и итоговую (сумма + доставка).
@gomer-lab — нам никто не мешает: раз - продолжать сидеть на версии 1.3.2.4, два - при обновлении сверить свои старые файлы с новыми, три - откастомайзенные коре-файлы держать в папке локал, четыре - писать свои модули, и наконец пять - для 1.4 stable все равно придется все переписать. Ну может не все, так многое, раз они так за изменение ядра взялись, пока не смотрел, не знаю. Так что в этом только Сила да с нами и прибудет.

 
Magento Community Magento Community
Magento Community
Magento Community
 
alesto
Guru
 
Total Posts:  624
Joined:  2009-03-21
 

Раз уж реч про модули зашла… Ð’Ñ‹ встречали тутор в котором бы описывалось как создать простенький модуль для магенто?

 
Magento Community Magento Community
Magento Community
Magento Community
 
t_rodriguez
Sr. Member
 
Avatar
Total Posts:  229
Joined:  2009-01-14
 

Целую кучу! Из 10-ти туторов заработал 1, может 2 ) Честно говоря, далее чем «Hello World!» я не заходил, т.к. ничего глобального по функционалу я не менял, а смысла делать модуль для каких-то мелочей (типа подправить одну-две строчки), которые просто можно сдублировать в local — ясно нет. Да и не программист я вобщем. Для меня это все танцы с бубном и чистая интуиция.

1, 2, 3, 4, 5, 6, Google в помощь и на русском — тыц.

 
Magento Community Magento Community
Magento Community
Magento Community
 
alesto
Guru
 
Total Posts:  624
Joined:  2009-03-21
 

Если так разобраться то я тоже скорее спец по юзабилити\функционалу и верстальщик и не программист по крайней мере на php, по крайней мере пока что smile Хотя и не плохо в нём разбираюсь. А можете сказать какой из туторов заработал ?
Ещё такой вопросик мне показалось или вы между строк написали что файлы положенные в папку локал с абсолютным путём перезаписываються для текущей темы?

 
Magento Community Magento Community
Magento Community
Magento Community
 
t_rodriguez
Sr. Member
 
Avatar
Total Posts:  229
Joined:  2009-01-14
 

Какой из туторов точно не скажу. Насчет local, я имел ввиду это: app/code/core/local — если мы сюда дублируем код из Mage, Zend или Varien (с сохранением структуры папок и имен), то он при обновлении не затрагивается. Я думаю вы и сами это знали. Или вопрос был не об этом?

 
Magento Community Magento Community
Magento Community
Magento Community
 
alesto
Guru
 
Total Posts:  624
Joined:  2009-03-21
 

Об этом. Честно не знал.
Большой нужды писать какой то модуль писать пока что нет, но интересно было бы посмотреть как он пишется, мало ли может когда то припрёт, а навыки то остануться smile Я вот думаю кто-то из разработчиков читает форум, они могут нас успокоить по поводу неизменности функций?

 
Magento Community Magento Community
Magento Community
Magento Community
 
lvmrgoogle
Jr. Member
 
Total Posts:  22
Joined:  2009-05-26
Riga, Latvia
 

Точно про туториал не скажу, но может это хоть как-то поможет.
Для магенто есть скрипт для создания модулей. Лично я начинал с него, он создаёт заготовку для модуля, по которой можно более-менее изучить структуру модуля и зачем вообще нужны эти модели, блоки и контроллеры. Затем советую посмотреть на устройство нормально написанных модулей, лично я для этого использовал Blog.
Ну и ещё хочется посоветовать модуль для дебага, который может сильно облегчить ваше знакомство с магенто.

 
Magento Community Magento Community
Magento Community
Magento Community
 
t_rodriguez
Sr. Member
 
Avatar
Total Posts:  229
Joined:  2009-01-14
 

UPD / Пример использования

<?php $quote Mage::getModel('checkout/session')->getQuote() ?>
<?php $checkout 
Mage::helper('checkout'?>
<?php $totals 
$quote->getTotals(); ?>

// ÐŸÑ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ельный Ð¸Ñ‚ог
<?php if (isset($totals['subtotal'])): ?>
    <?php 
echo 'subtotal '.$checkout->formatPrice($totals['subtotal']->getValue()).'<br />'?>
<?php 
endif ?>

// Ð¡ÑƒÐ¼Ð¼Ð° ÑÐºÐ¸Ð´ÐºÐ¸
<?php if (isset($totals['discount'])): ?>
    <?php 
echo 'discount '.$checkout->formatPrice($totals['discount']->getValue()).'<br />'?>
<?php 
endif ?>

// Ð¡ÑƒÐ¼Ð¼Ð° Ð·Ð° Ð´Ð¾ÑÑ‚авку
<?php if (isset($totals['shipping'])): ?>
    <?php 
echo 'shipping '.$checkout->formatPrice($totals['shipping']->getValue()).'<br />'?>
<?php 
endif ?>

// ÐÐ°Ð»Ð¾Ð³ (к Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ñƒ, ÐÐ”С)
<?php if (isset($totals['tax'])): ?>
    <?php 
echo 'tax '.$checkout->formatPrice($totals['tax']->getValue()).'<br />'?>
<?php 
endif ?>

// Ð˜Ñ‚ого
<?php if (isset($totals['grand_total'])): ?>
    <?php 
echo 'grand_total '.$checkout->formatPrice($totals['grand_total']->getValue()).'<br />'?>
<?php 
endif ?>

<?php 
if (isset($totals['discount'])): ?>
    
<h4><strong><?php echo $this->__('Итого Ñ ÑƒÑ‡ÐµÑ‚ом ÑÐºÐ¸Ð´ÐºÐ¸ (').$checkout->formatPrice($totals['discount']->getValue()).'):'?></strong></h4>
<?php else: ?>
    
<h4><strong><?php echo $this->__('Итого Ð±ÐµÐ· ÑƒÑ‡ÐµÑ‚а Ð´Ð¾ÑÑ‚авки:'?></strong></h4>
<?php endif ?>

<?php 
if (isset($totals['shipping'])): ?>
    
<h2><strong><?php echo $checkout->formatPrice($totals['grand_total']->getValue() - $totals['shipping']->getValue()); ?></strong></h2>
<?php else: ?>
    
<h2><strong><?php echo $checkout->formatPrice($totals['grand_total']->getValue()); ?></strong></h2>
<?php endif ?>
 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top