Т.е. переместить блоки снизу влево:
Первое, что приходит в голову - в
checkout.xml переместить блоки из одного места другое. К сожалению, всё не так просто - эти два блока так же имеют немного кода в файле template/checkout/cart.phtml, и блоки, объявленные в xml вызываются как раз из этого файла:<!-- Discount Code block -->
<div class="shopping-cart-collaterals">
<div class="col2-set">
<?php echo $this->getChildHtml('crosssell') ?>
<div class="col-2">
<!-- Load block by name "coupon" -->
<?php echo $this->getChildHtml('coupon') ?>
<?php if (!$this->getIsVirtual()): echo $this->getChildHtml('shipping'); endif; ?>
</div>
</div>
</div>
<!-- Totals block -->
<div class="shopping-cart-totals">
<?php echo $this->getChildHtml('totals'); ?>
<?php if(!$this->hasError()): ?>
<ul class="checkout-types">
<?php echo $this->getChildHtml('methods') ?>
</ul>
<?php endif; ?>
</div>Пришлось выдёргивать этот код и переносить его в свой новый файл - пришлось создать новый шаблон, на основе
2columns-left.phtml. Почему не использовать уже готовый файл - во-первых, ширина левой колонки в стандартном файле маловата для размещения блока Totals. Во-вторых, в этот файл нужно поместить код для отображения блоков слева (перемещённый из файла cart.phtml).В общем, я сделал новый файл
2columns-left-checkout.phtml на основе 2columns-left.phtml, и назначил его странице Shopping Cart. Вот что там было изменено:<?php echo $this->getChildHtml('breadcrumbs') ?>
<!-- start left -->
<div class="col-left side-col" style="width: 250px;">
<!-- Show left column, take content from xml -->
<?php echo $this->getChildHtml('left') ?>
<!-- Make some html for Totals block -->
<div class="box">
<!-- Following code took from cart.phtml -->
<!-- Block should be non-float and have 0 margin -->
<div class="shopping-cart-totals" style="float: none; margin: 0;">
<?php echo $this->getChildHtml('totals'); ?>
<?php if(!$this->hasError()): ?>
<ul class="checkout-types">
<?php echo $this->getChildHtml('methods') ?>
</ul>
<?php endif; ?>
</div>
</div>
</div>
<!-- Set main block (content) width to 613px
(default is a little bit more, therefore layout problems) -->
<div id="main" class="col-main" style="width: 613px;">
<!-- start global messages -->
<?php echo $this->getChildHtml('global_messages') ?>
<!-- end global messages -->
<!-- start content -->
<?php echo $this->getChildHtml('content') ?>
<!-- end content -->
</div>Итак, мы добавили вывод блока Totals после вывода левой колонки. А так же немного модифицировали стили блоков (см. комментарии). Левая колонка выводит Discount Coupons, это задаётся полностью в
checkout.xml. Вот как блок Discount Coupons переносится в левую колонку:<checkout_cart_index>
...
<remove name="right"/>
<!-- We should not remove left column, comment that line -->
<!--<remove name="left"/>-->
<reference name="left">
<action method="unsetChildren"/>
<block type="checkout/cart_coupon" name="checkout.cart.coupon" as="coupon" template="checkout/cart/coupon.phtml"/>
</reference>
...Убираем удаление левой колонки, убираем всех лишних детей из левой колонки, добавляем блок с шаблоном блока Discount Coupon.
С перемещением блока получился небольшой затык. Хотя блоки, которые вызываются из шаблона (
totals, methods), я скопировал из reference name="content" в reference name="left", всё отображалось совсем не как надо. А потом я сообразил, что в шаболоне эти блоки вызываются не "изнутри" блока left/content, а из "корня". После того как я переместил эти блоки в reference name="root" всё наконец заработало. Вот этот кусочек:<reference name="root">
<block type="checkout/cart_totals" name="checkout.cart.totals" as="totals" template="checkout/cart/totals.phtml"/>
<block type="core/text_list" name="checkout.cart.methods" as="methods">
<block type="checkout/onepage_link" name="checkout.cart.methods.onepage" template="checkout/onepage/link.phtml"/>
<block type="checkout/multishipping_link" name="checkout.cart.methods.multishipping" template="checkout/multishipping/link.phtml"/>
</block>
</reference>В основном всё, блоки переместились снизу налево и отображают то, что и должны. Остались мелочи - удалить выводы блоков снизу (можно просто закомментировать вывод блоков прямо в
cart.phtml), и поправить css, т.к. текущие правила расчитаны на то, что эти блоки будут внутри блоков с определёнными классами. Вот добавленный в boxes.css код:/* Copy some styles from Discount Codes, it was in the middle of
page, now it's on the left side */
.col-left .discount-codes h4 {
background-image:url(../images/icon_asterick.gif); padding-left:23px;
min-height:16px;
color:#e26703;
background-repeat:no-repeat;
background-position:0 0;
padding:1px 0 1px 21px;
text-transform:uppercase;
}
.col-left .discount-codes.box {
margin-bottom:18px;
padding:12px 15px;
border:1px solid #D0CBC1;
background:url(../images/base_mini_head_bg.gif) repeat-x #fff;
}Ну и последнее - убираем вывод блока с классом
shopping-cart-collaterals. Этот блок содержит не только Discount Coupons, но и кое-что ещё. Но его можно убрать целиком, потому что в текущей конфигурации весь остальной вывод выключен (в админке) - выводится только Discount Coupons.Вот код, который убирает всё ненужное снизу страницы:
<?php /*
<div class="shopping-cart-collaterals">
<div class="col2-set">
<?php echo $this->getChildHtml('crosssell') ?>
<div class="col-2">
<?php echo $this->getChildHtml('coupon') ?>
<?php if (!$this->getIsVirtual()): echo $this->getChildHtml('shipping'); endif; ?>
</div>
</div>
</div>
<div class="shopping-cart-totals">
<?php echo $this->getChildHtml('totals'); ?>
<?php if(!$this->hasError()): ?>
<ul class="checkout-types">
<?php echo $this->getChildHtml('methods') ?>
</ul>
<?php endif; ?>
</div>
*/ ?>Просто комментируем это дело :)
Вот так за пару часов блоки переехали снизу в левую колонку.
Изменённые файлы:
- app/design/frontend/default/sunnyD/layout/checkout.xml
- app/design/frontend/default/sunnyD/template/checkout/cart.phtml
- app/design/frontend/default/sunnyD/template/page/2columns-left-cart.phtml
- skin/frontend/default/sunnyD/css/boxes.css
Thanks for post about magento ecommerce site. you are give clear code about shopping cart pages.Magento eCommerce
ОтветитьУдалитьYou are welcome :)
ОтветитьУдалить