Файл category.tpl

Данный файл отвечает за отображение отдельной категории продуктов

В базовом шаблоне он имеет следующую структуру:

  1 {# Variables
  2 # @var model
  3 # @var jsCode
  4 # @var products
  5 # @var totalProducts
  6 # @var brandsInCategory
  7 # @var pagination
  8 #}
  9 
 10 {# Display sidebar.tpl #}
 11 {include_tpl ('sidebar')}
 12 {$jsCode}
 13 <div class="products_list">
 14 
 15     <div id="titleExt">
 16         <h5 class="left">
 17             {if $model->getH1()}
 18                 {echo ShopCore::encode($model->getH1())}
 19             {else:}
 20                 {echo ShopCore::encode($model->getName())}
 21             {/if}
 22         </h5>
 23         <div class="right">
 24             <!-- BEGIN FILTER BOX -->
 25                 <a href="#" onclick="$('#filterBox').toggle();return false;">Изменить параметры ↓</a>
 26                 <div id="filterBox">
 27                 <form method="get" action="">
 28 
 29                     <div class="fieldName">Сортировка:</div>
 30                     <div class="field">
 31                         <select name="order">
 32                             <option>-</option>
 33                             <option {if ShopCore::$_GET['order']=='price'}selected{/if} value="price">Возрастанию цены</option>
 34                             <option {if ShopCore::$_GET['order']=='price_desc'}selected{/if} value="price_desc">Убыванию цены</option>
 35                             <option {if ShopCore::$_GET['order']=='name'}selected{/if} value="name">Название  A-Z</option>
 36                             <option {if ShopCore::$_GET['order']=='name_desc'}selected{/if} value="name_desc">Название Z-A</option>
 37                             <option {if ShopCore::$_GET['order']=='hit'}selected{/if} value="hit">Сначала хиты</option>
 38                             <option {if ShopCore::$_GET['order']=='hot'}selected{/if} value="hot">Сначала новинки</option>
 39                             <option {if ShopCore::$_GET['order']=='action'}selected{/if} value="action">Сначала акции</option>
 40                         </select>
 41                     </div>
 42                     <div class="clear"></div>
 43 
 44                     <div class="fieldName">Товаров на страницу:</div>
 45                     <div class="field">
 46                         <select name="user_per_page" class="per_page">
 47                            <option {if ShopCore::$_GET['user_per_page']=='12'}selected{/if} value="12">12</option>
 48                            <option {if ShopCore::$_GET['user_per_page']=='24'}selected{/if} value="24">24</option>
 49                            <option {if ShopCore::$_GET['user_per_page']=='48'}selected{/if} value="48">48</option>
 50                            <option {if ShopCore::$_GET['user_per_page']=='all'}selected{/if} value="all">Все</option>
 51                         </select>
 52                     </div>
 53                     <div class="clear"></div>
 54 
 55                     <div class="fieldName">Цена:</div>
 56                     <div class="field">
 57                         от <input type="text" value="{encode(ShopCore::$_GET['lp'])}" name="lp" style="width:26px;" />
 58                         до <input type="text" value="{encode(ShopCore::$_GET['rp'])}" name="rp" style="width:26px;"/>
 59                     </div>
 60                     <div class="clear"></div>
 61 
 62                 {if $model->countProperties() > 0}
 63                     {foreach $model->getProperties() as $prop}
 64                         <div class="fieldName">{echo $prop->getName()}:</div>
 65                         <div class="field">
 66                             {foreach $prop->asArray() as $key=>$val}
 67                                 <label>
 68                                 <input type="checkbox" {if is_property_in_get($prop->getId(), $key)} checked="checked" {/if} name="f[{echo $prop->getId()}][]" {$checked} value="{$key}" /> {$val}
 69                                 </label><br>
 70                             {/foreach}
 71                         </div>
 72                         <div class="clear"></div>
 73                     {/foreach}
 74                 {/if}
 75                 <div class="fieldName">В наличии:</div>
 76                         <div class="field">
 77                                 <label>
 78                                 <input type="checkbox" {if isset(ShopCore::$_GET['stock'])} checked="checked" {/if} name="stock" {$checked} value="1" />
 79                                 </label><br>
 80                         </div>
 81                         <div class="clear"></div>
 82                 <div class="fieldName">Акции:</div>
 83                         <div class="field">
 84                                 <label>
 85                                 <input type="checkbox" {if isset(ShopCore::$_GET['action'])} checked="checked" {/if} name="action" {$checked} value="1" />
 86                                 </label><br>
 87                         </div>
 88                         <div class="clear"></div>
 89                 <div class="fieldName">Новинки:</div>
 90                         <div class="field">
 91                                 <label>
 92                                 <input type="checkbox" {if isset(ShopCore::$_GET['hot'])} checked="checked" {/if} name="hot" {$checked} value="1" />
 93                                 </label><br>
 94                         </div>
 95                         <div class="clear"></div>
 96 
 97                     <div class="fieldName"></div>
 98                     <div class="field">
 99                         <input type="submit" value="Применить" />
100                     </div>
101                     <div class="clear"></div>
102 
103                 </form>
104                 </div>
105             <!-- END FILTER BOX -->
106         </div>
107         <div class="sp"></div>
108 
109         <div id="categoryPath">
110             {renderCategoryPath($model)}
111         </div>
112       </div>
113 
114     <div id="brands_list">
115     <!-- Display brans list -->
116     {if sizeof($brandsInCategory) > 0}
117         {foreach $brandsInCategory as $brand}
118             {if $brand->getId() != ShopCore::$_GET['brand']}
119                 <a href="?brand={echo $brand->getId()}{if !empty(ShopCore::$_GET['order'])}&order={encode(ShopCore::$_GET['order'])}{/if}{if !empty(ShopCore::$_GET['user_per_page'])}&user_per_page={encode(ShopCore::$_GET['user_per_page'])}{/if}{if !empty(ShopCore::$_GET['lp'])}&lp={encode(ShopCore::$_GET['lp'])}{/if}{if !empty(ShopCore::$_GET['rp'])}&rp={encode(ShopCore::$_GET['rp'])}{/if}{if isset(ShopCore::$_GET['stock'])}&stock=1{/if}{if isset(ShopCore::$_GET['action'])}&action=1{/if}{if isset(ShopCore::$_GET['hot'])}&hot=1{/if}{if $model->countProperties() > 0}{foreach $model->getProperties() as $prop}{foreach $prop->asArray() as $key=>$val}{if is_property_in_get($prop->getId(), $key)}&f[{echo $prop->getId()}][]={$key}{/if}{/foreach}{/foreach}{/if}">{echo ShopCore::encode($brand->getName())}</a>
120             {else:}
121                 <a href="#" style="font-weight:bold;">{echo ShopCore::encode($brand->getName())}</a>
122             {/if}
123             |
124         {/foreach}
125     {/if}
126     </div>
127         <div class="products_block">
128             {include_tpl('products_block')}
129         </div>
130 
131         {if $_GET.per_page < 2}
132             {echo $model->getDescription()}
133         {/if}
134 
135     </div>
136 <div id="loadmoreajaxloader" style="display:none;"><center><img src="{$SHOP_THEME}style/images/ui-anim_basic_16x16.gif" /></center></div>

Главные участки файла category.tpl

Отображение заголовка категории

{echo ShopCore::encode($model->getName())} - данная переменная отвечает за отображение заголовка категории {echo ShopCore::encode($model->getH1())} - данная переменная отвечает за отображение поля H1

Отображение фильтрации внутри категории

 1 <!-- BEGIN FILTER BOX -->
 2                 <a href="#" onclick="$('#filterBox').toggle();return false;">Изменить параметры ↓</a>
 3                 <div id="filterBox">
 4                 <form method="get" action="">
 5 
 6                     <div class="fieldName">Сиртировка:</div>
 7                     <div class="field">
 8                         <select name="order">
 9                             <option>-</option>
10                             <option {if ShopCore::$_GET['order']=='price'}selected{/if} value="price">Возрастанию цены</option>
11                             <option {if ShopCore::$_GET['order']=='price_desc'}selected{/if} value="price_desc">Убыванию цены</option>
12                             <option {if ShopCore::$_GET['order']=='name'}selected{/if} value="name">Название  A-Z</option>
13                             <option {if ShopCore::$_GET['order']=='name_desc'}selected{/if} value="name_desc">Название Z-A</option>
14                             <option {if ShopCore::$_GET['order']=='hit'}selected{/if} value="hit">Сначала хиты</option>
15                             <option {if ShopCore::$_GET['order']=='hot'}selected{/if} value="hot">Сначала новинки</option>
16                             <option {if ShopCore::$_GET['order']=='action'}selected{/if} value="action">Сначала акции</option>
17                         </select>
18                     </div>
19                     <div class="clear"></div>
20 
21                     <div class="fieldName">Товаров на страницу:</div>
22                     <div class="field">
23                         <select name="user_per_page" class="per_page">
24                            <option {if ShopCore::$_GET['user_per_page']=='12'}selected{/if} value="12">12</option>
25                            <option {if ShopCore::$_GET['user_per_page']=='24'}selected{/if} value="24">24</option>
26                            <option {if ShopCore::$_GET['user_per_page']=='48'}selected{/if} value="48">48</option>
27                            <option {if ShopCore::$_GET['user_per_page']=='all'}selected{/if} value="all">Все</option>
28                         </select>
29                     </div>
30                     <div class="clear"></div>
31 
32                     <div class="fieldName">Цена:</div>
33                     <div class="field">
34                         от <input type="text" value="{encode(ShopCore::$_GET['lp'])}" name="lp" style="width:26px;" />
35                         до <input type="text" value="{encode(ShopCore::$_GET['rp'])}" name="rp" style="width:26px;"/>
36                     </div>
37                     <div class="clear"></div>
38 
39                 {if $model->countProperties() > 0}
40                     {foreach $model->getProperties() as $prop}
41                         <div class="fieldName">{echo $prop->getName()}:</div>
42                         <div class="field">
43                             {foreach $prop->asArray() as $key=>$val}
44                                 <label>
45                                 <input type="checkbox" {if is_property_in_get($prop->getId(), $key)} checked="checked" {/if} name="f[{echo $prop->getId()}][]" {$checked} value="{$key}" /> {$val}
46                                 </label><br>
47                             {/foreach}
48                         </div>
49                         <div class="clear"></div>
50                     {/foreach}
51                 {/if}
52                 <div class="fieldName">В наличии:</div>
53                         <div class="field">
54                                 <label>
55                                 <input type="checkbox" {if isset(ShopCore::$_GET['stock'])} checked="checked" {/if} name="stock" {$checked} value="1" />
56                                 </label><br>
57                         </div>
58                         <div class="clear"></div>
59                 <div class="fieldName">Акции:</div>
60                         <div class="field">
61                                 <label>
62                                 <input type="checkbox" {if isset(ShopCore::$_GET['action'])} checked="checked" {/if} name="action" {$checked} value="1" />
63                                 </label><br>
64                         </div>
65                         <div class="clear"></div>
66                 <div class="fieldName">Новинки:</div>
67                         <div class="field">
68                                 <label>
69                                 <input type="checkbox" {if isset(ShopCore::$_GET['hot'])} checked="checked" {/if} name="hot" {$checked} value="1" />
70                                 </label><br>
71                         </div>
72                         <div class="clear"></div>
73 
74                     <div class="fieldName"></div>
75                     <div class="field">
76                         <input type="submit" value="Применить" />
77                     </div>
78                     <div class="clear"></div>
79 
80                 </form>
81                 </div>
82             <!-- END FILTER BOX -->

Позволяет применить фильтры по цене, дополнительным параметрам, а также сортировку товаров в категории.

Здесь используются следующие переменные: {$model->countProperties()} - количество свойств категории {$model->getProperties()} - получение модели свойств категории {$prop->getName()} - получение названия свойства {$prop->asArray()} - получение массива значений данного свойства {is_property_in_get($prop->getId(), $key)} - возвращает TRUE, если категория фильтровалась по данному свойству {echo $prop->getId()} - получение ID свойства {isset(ShopCore::$_GET['stock'])} - возвращает TRUE если применялся фильтр по фильтру "В наличии", аналогично работает фильтр по Акциям и Новинки.

Отображение пути по сайту

1 <div id="categoryPath">
2             {renderCategoryPath($model)}
3         </div>

Отображение фильтра по доступных брендах категории

 1 <div id="brands_list">
 2     <!-- Display brans list -->
 3     {if sizeof($brandsInCategory) > 0}
 4         {foreach $brandsInCategory as $brand}
 5             {if $brand->getId() != ShopCore::$_GET['brand']}
 6                 <a href="?brand={echo $brand->getId()}{if !empty(ShopCore::$_GET['order'])}&order={encode(ShopCore::$_GET['order'])}{/if}{if !empty(ShopCore::$_GET['user_per_page'])}&user_per_page={encode(ShopCore::$_GET['user_per_page'])}{/if}{if !empty(ShopCore::$_GET['lp'])}&lp={encode(ShopCore::$_GET['lp'])}{/if}{if !empty(ShopCore::$_GET['rp'])}&rp={encode(ShopCore::$_GET['rp'])}{/if}{if isset(ShopCore::$_GET['stock'])}&stock=1{/if}{if isset(ShopCore::$_GET['action'])}&action=1{/if}{if isset(ShopCore::$_GET['hot'])}&hot=1{/if}{if $model->countProperties() > 0}{foreach $model->getProperties() as $prop}{foreach $prop->asArray() as $key=>$val}{if is_property_in_get($prop->getId(), $key)}&f[{echo $prop->getId()}][]={$key}{/if}{/foreach}{/foreach}{/if}">{echo ShopCore::encode($brand->getName())}</a>
 7             {else:}
 8                 <a href="#" style="font-weight:bold;">{echo ShopCore::encode($brand->getName())}</a>
 9             {/if}
10             |
11         {/foreach}
12     {/if}
13     </div>

Подключение списка продуктов категории из шаблона products_block

1 <div class="products_block">
2      {include_tpl('products_block')}
3 </div>

Содержит следующие переменные: {include_tpl('products_block')} - подключение содержимого шаблона Файл products_block.tpl

Вывод описания категории
Если в категории выводиться меньше двух товаров на страницу, то на странице выводиться еще описание категории

1 {if $_GET.per_page < 2}
2      {echo $model->getDescription()}
3 {/if}

Дополнительные возможности

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

В начало шаблона вставить блок:

 1 {literal}
 2 <script type="text/javascript">
 3 function ajaxAddToCartFromCategory(form_id)
 4 {
 5     $.ajax({
 6         type: "POST",
 7         data: $('#'+form_id).serialize(),
 8         url: "/shop/cart/add",
 9         success: function(){$("#mycart").load('/shop/ajax/getCartDataHtml')},
10      });
11 
12     $("#cartNotify").css('display', 'block');
13     setTimeout(function() {  $("#cartNotify").css('display', 'none') }, 2000); 
14 }
15 </script>
16 {/literal}
17  

и посде блока:

1 <div class="compare"><a href="{shop_url('compare/add/' . $p->getId())}">Сравнить</a></div>

вставить блок
 1 <form action="{shop_url('shop/cart/add')}" id="productForm_{echo $p->getId()}" method="post">
 2         <input type="hidden" name="variantId" value="{echo $p->firstVariant->getId()}">
 3         <input type="hidden" name="productId" value="{echo $p->getId()}">
 4                 Количество:
 5                 <input type="text" name="quantity" value="1" style="width: 30px;">
 6                 <a rel="nofollow" href="#" onClick="ajaxAddToCartFromCategory('productForm_{echo $p->getId()}'); return false;">{echo ShopCore::t('Добавить в корзину')}</a>
 7                 <div style="margin-left:45px;font-size:13px;display:none;background-color:#f5f5dc;" id="cartNotify"> 
 8                     Товар добавлен в корзину.
 9                 </div>
10 
11         {form_csrf()}
12 </form>

Отображение возле каждого товара при отображении категории стоимости в двух валютах - в основной и второстепенной

после блока

1 {if $p->hasDiscounts()}
2    <s>{echo $p->firstVariant->toCurrency('origPrice')} {$CS}</s>
3    <br/>
4    <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
5 {else:}
6    <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
7 {/if}

вставить блок

1 {$currencies = ShopCore::app()->SCurrencyHelper->getCurrencies()}
2 {if ShopCore::app()->SCurrencyHelper->current->getId() == $currencies[1]->getId()}
3    {echo ShopCore::app()->SCurrencyHelper->convert($p->firstVariant->getPrice(),$currencies[2]->getId())}
4    {echo $currencies[2]->getSymbol()}
5 {else:}
6    {echo ShopCore::app()->SCurrencyHelper->convert($p->firstVariant->getPrice(),$currencies[1]->getId())}
7    {echo $currencies[1]->getSymbol()}
8 {/if}

Отображение краткого описания возле каждого товара при отображении категории

после блока

1 <h3 class="name"><a href="{shop_url('product/' . $p->getUrl())}">{echo ShopCore::encode($p->getName())}</a></h3>

добавить

1 {echo $p->getShortDescription()}

Возможность при отображении категории выбрать по сколько товаров показывать на странице

в начале шаблона написать

1 {$jsCode}

и перед тегом

1 {$pagination}

добавить

1  Товаров на страницу:
2 <select name="perpage" onchange="change_product_per_page(this.value)">
3    <option {if ShopCore::$_GET['user_per_page']=='5'}selected{/if} value="5">5</option>
4    <option {if ShopCore::$_GET['user_per_page']=='10'}selected{/if} value="10">10</option>
5    <option {if ShopCore::$_GET['user_per_page']=='15'}selected{/if} value="15">15</option>
6    <option {if ShopCore::$_GET['user_per_page']=='20'}selected{/if} value="20">20</option>
7 </select> 

Возможность в фильтре при отображении категории выбрать: показывать только в наличии, показывать только акции, показывать только новинки.

  • после блока
 1 {if $model->countProperties() > 0}
 2                     {foreach $model->getProperties() as $prop}
 3                         <div class="fieldName">{echo $prop->getName()}:</div>
 4                         <div class="field">
 5                             {foreach $prop->asArray() as $key=>$val}
 6                                 <label>
 7                                 <input type="checkbox" {if is_property_in_get($prop->getId(), $key)} checked="checked" {/if} name="f[{echo $prop->getId()}][]" {$checked} value="{$key}" /> {$val}
 8                                 </label><br>
 9                             {/foreach}
10                         </div>
11                         <div class="clear"></div>
12                     {/foreach}
13                 {/if}
  • Для фильтрования по наличии в стоке добавляем в шаблон:
1 <div class="fieldName">в наличии:</div>
2                         <div class="field">
3                                 <label>
4                                 <input type="checkbox" {if isset(ShopCore::$_GET['stock'])} checked="checked" {/if} name="stock" {$checked} value="1" />
5                                 </label><br>
6                         </div>
7                         <div class="clear"></div>
  • Для фильтрования только акционных продуктов:
1 <div class="fieldName">Только акции:</div>
2                         <div class="field">
3                                 <label>
4                                 <input type="checkbox" {if isset(ShopCore::$_GET['action'])} checked="checked" {/if} name="action" {$checked} value="1" />
5                                 </label><br>
6                         </div>
7                         <div class="clear"></div>
  • Для показа только новинок:
1 <div class="fieldName">Новинки:</div>
2                         <div class="field">
3                                 <label>
4                                 <input type="checkbox" {if isset(ShopCore::$_GET['hot'])} checked="checked" {/if} name="hot" {$checked} value="1" />
5                                 </label><br>
6                         </div>
7                         <div class="clear"></div>

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

  • после блока
1 <option {if ShopCore::$_GET['order']=='price'}selected{/if} value="price">Возрастанию цены</option>
2 <option {if ShopCore::$_GET['order']=='price_desc'}selected{/if} value="price_desc">Убыванию цены</option>
3 <option {if ShopCore::$_GET['order']=='name'}selected{/if} value="name">Название  A-Z</option>
4 <option {if ShopCore::$_GET['order']=='name_desc'}selected{/if} value="name_desc">Название Z-A</option>
  • добавить блок
1 <option {if ShopCore::$_GET['order']=='hit'}selected{/if} value="hit">Сначала хиты</option>
2 <option {if ShopCore::$_GET['order']=='hot'}selected{/if} value="hot">Сначало новинки</option>

Возможность возле товара при отображении категории указывать сразу стоимость вариантов товара

  • В начало файла написать
1 {$jsCode}
  • Потом поправить
1 <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
2                     {else:}
3                         <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
  • на
1 <span style="font-size:14px;" id="{echo $p->getId()}_price">{echo $p->firstVariant->toCurrency()} {$CS}</span>
2                     {else:}
3                         <span style="font-size:14px;" id="{echo $p->getId()}_price">{echo $p->firstVariant->toCurrency()} {$CS}</span>
  • и после блока
1 <div class="compare"><a href="{shop_url('compare/add/' . $p->getId())}">Сравнить</a></div> 
  • добавить
 1                 {if $p->countProductVariants() > 1}
 2                 <div align="left" style="padding-top:20px;">
 3                 Варианты товара:
 4                     <select name="variantId" onChange="display_variant_price({echo $p->getId()}, this.value)">
 5                     {foreach $p->getProductVariants() as $variant}
 6                         <option value="{echo $variant->getId()}">{echo ShopCore::encode($variant->getName())}</option>
 7                     {/foreach}
 8                     </select>
 9                 </div>
10                 {else:}
11                     <input type="hidden" name="variantId" value="{echo $p->firstVariant->getId()}" />
12                 {/if}

Возможность увеличить картинку каждого товара при отображении категории

  • В начало шаблона вставить
 1 <!-- BEGIN LIGHTBOX -->
 2 <script type="text/javascript" src="{$SHOP_THEME}js/lightbox/scripts/jquery.color.min.js"></script>
 3 <script type="text/javascript" src="{$SHOP_THEME}js/lightbox/scripts/jquery.lightbox.min.js"></script>
 4 <link type="text/css" rel="stylesheet" media="screen" href="{$SHOP_THEME}js/lightbox/styles/jquery.lightbox.min.css" />
 5 <!-- END LIGHTBOX -->
 6 
 7 {literal}
 8 <script type="text/javascript">$(function(){
 9     // Init light box
10     $('.lightbox').lightbox();
11 
12     // Init star rating
13     $('.hover-star').rating({
14         callback: function(value, link) {
15             $.ajax({
16                 type: "POST",
17                 data: "pid={/literal}{echo $model->getId()}{literal}&val=" + value,
18                 url:'/shop/ajax/rate',
19              });
20 
21             $('.hover-star').rating('readOnly', true);
22         }
23     });
24 });
25 
26 </script>
27 {/literal}
  • Заменить блок:
1 <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
2                     <a href="{shop_url('product/' . $p->getUrl())}">
3                         <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0"  alt="image" />
4                     </a>
5                 </div>
  • блоком
1 <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
2                     <a href="{productImageUrl($p->getId() . '_main.jpg')}" class="lightbox lightbox-enabled" title="{echo ShopCore::encode($p->getName())}">
3                         <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0"  alt="image" />
4                     </a>
5                 </div>

Возможность возле каждого товара при отображении категории показывать количество комментариев

В блоке

 1 <li class="{counter('', '', 'last')}">
 2                 <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
 3                     <a href="{shop_url('product/' . $p->getUrl())}">
 4                         <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0"  alt="image" />
 5                     </a>
 6                 </div>
 7                 <h3 class="name"><a href="{shop_url('product/' . $p->getUrl())}">{echo ShopCore::encode($p->getName())}</a></h3>
 8                 <div class="price priceLight"> 
 9                     {$p->firstVariant}
10                     {if $p->hasDiscounts()}
11                         <s>{echo $p->firstVariant->toCurrency('origPrice')} {$CS}</s>
12                         <br/>
13                         <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
14                     {else:}
15                         <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
16                     {/if}
17                 </div>
18                 <div class="compare"><a href="{shop_url('compare/add/' . $p->getId())}">Сравнить</a></div>
19                 {echo 'Комментариев('.$p->totalComments().')'}
20 </li>

перед

1 </li>

добавить

1 {echo 'Комментариев('.$p->totalComments().')'}

Возможность возле каждого товара при отображении категории вывести ярлык: новинка, хит

  • В блоке
1 <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
2                     <a href="{shop_url('product/' . $p->getUrl())}">
3                         <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0"  alt="image" />
4                     </a>
5 </div>
  • для отображения ярлыка "Хит" в правом верхнем углу изображения товара, вставляем после блока
1 <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
  • блок:
1 {if $p->getHit()}
2    <div style="text-align:right;" ><img src="{$SHOP_THEME}images/hit-product-tag.gif" border="0"  alt="image" /></div>
3 {/if}

где hit-product-tag.gif - картинка ярлыка "Хит"

  • Для отображения ярлыка "Новинка" в правом нижнем углу изображения товара после блока:
1 <a href="{shop_url('product/' . $p->getUrl())}">
2                         <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0"  alt="image" />
3 </a>
  • вставляем блок:
1 {if $p->getHot()} 
2     <div style="text-align:right;" ><img src="{$SHOP_THEME}images/new-product-tag.gif" border="0"  alt="image" /></div>
3 {/if}

где new-product-tag.gif - картинка ярлыка "Новинка", а в блоке

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

  • перед блоком
1 <div class="sp"></div>
2         <div id="gopages">
3                 {$pagination}
4         </div>
  • для вывода новинок - вставить блок:
 1 <div class="sp"></div>
 2     {if $model->getSampleNewestModels(3)}
 3     <h5>Новинки</h5>
 4         {# Display list of new products #}
 5         <ul class="products">
 6             {$count = 1;}
 7             {foreach $model->getSampleNewestModels(3) as $pn}
 8                 <li {if $count == 3} class="last" {$count = 0}{/if}>
 9                     <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
10                         <a href="{shop_url('product/' . $pn->getUrl())}">
11                             <img src="{productImageUrl($pn->getId() . '_small.jpg')}" border="0"  alt="image" />
12                         </a>
13                     </div>
14                     <h3 class="name"><a href="{shop_url('product/' . $pn->getUrl())}">{echo ShopCore::encode($pn->getName())}</a></h3>
15                     <div class="price">
16                         {$pn->firstVariant}
17                         {if $pn->hasDiscounts()}
18                             <s>{echo $pn->firstVariant->toCurrency('origPrice')} {$CS}</s>
19                             <br/>
20                             <span style="font-size:14px;">{echo $pn->firstVariant->toCurrency()} {$CS}</span>
21                         {else:}
22                             <span style="font-size:14px;">{echo $pn->firstVariant->toCurrency()} {$CS}</span>
23                         {/if}                    
24                     </div>
25                     <div class="compare"><a href="{shop_url('compare/add/' . $pn->getId())}">Сравнить</a></div>
26                 </li>
27                 {if $count == 3}<li class="separator"></li> {$count=0}{/if}
28                 {$count++}
29             {/foreach}
30         </ul>
31     {/if}
32 <div class="sp"></div>
  • для вывода хитов - вставить блок:
 1 <div class="sp"></div>
 2  {if $model->getSampleHitsModels()}
 3     <h5>Хиты</h5>
 4         {# Display list of hits #}
 5         <ul class="products">
 6             {$count = 1;}
 7             {foreach $model->getSampleHitsModels() as $ph}
 8                 <li {if $count == 3} class="last" {$count = 0}{/if}>
 9                     <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
10                         <a href="{shop_url('product/' . $ph->getUrl())}">
11                             <img src="{productImageUrl($ph->getId() . '_small.jpg')}" border="0"  alt="image" />
12                         </a>
13                     </div>
14                     <h3 class="name"><a href="{shop_url('product/' . $ph->getUrl())}">{echo ShopCore::encode($ph->getName())}</a></h3>
15                     <div class="price">
16                         {$ph->firstVariant}
17                         {if $ph->hasDiscounts()}
18                             <s>{echo $ph->firstVariant->toCurrency('origPrice')} {$CS}</s>
19                             <br/>
20                             <span style="font-size:14px;">{echo $ph->firstVariant->toCurrency()} {$CS}</span>
21                         {else:}
22                             <span style="font-size:14px;">{echo $ph->firstVariant->toCurrency()} {$CS}</span>
23                         {/if}                    
24                     </div>
25                     <div class="compare"><a href="{shop_url('compare/add/' . $ph->getId())}">Сравнить</a></div>
26                 </li>
27                 {if $count == 3}<li class="separator"></li> {$count=0}{/if}
28                 {$count++}
29             {/foreach}
30         </ul>
31     {/if}
32     <div class="sp"></div>
  • для вывода популярных товаров - вставить блок:
 1 <div class="sp"></div> 
 2 {if $model->getSamplePopularModels(3)}
 3     <h5>Популярные товары</h5> {# Display list of new products #}
 4     <ul class="products"> 
 5         {$count = 1;} {
 6         foreach $model->getSamplePopularModels(3) as $pn}        
 7             <li {if $count == 3} class="last" {$count = 0}{/if}>
 8                 <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
 9                     <a href="{shop_url('product/' . $pn->getUrl())}">
10                         <img src="{productImageUrl($pn->getId() . '_small.jpg')}" border="0" alt="image" />
11                     </a>
12                 </div>
13                 <h3 class="name"><a href="{shop_url('product/' . $pn->getUrl())}">{echo ShopCore::encode($pn->getName())}</a></h3>
14                 <div class="price"> {$pn->firstVariant} {if $pn->hasDiscounts()}
15                     <s>{echo $pn->firstVariant->toCurrency('origPrice')} {$CS}</s>
16                     <br/>
17                     <span style="font-size:14px;">{echo $pn->firstVariant->toCurrency()} {$CS}</span> {else:}
18                     <span style="font-size:14px;">{echo $pn->firstVariant->toCurrency()} {$CS}</span> {/if} 
19                 </div>
20                 <div class="compare"><a href="{shop_url('compare/add/' . $pn->getId())}">Сравнить</a></div>
21             </li> 
22             {if $count == 3}
23             <li class="separator"></li> 
24         {$count=0}{/if} {$count++} 
25         {/foreach}
26     </ul> 
27 {/if}
28 <div class="sp"></div>

Отображение стар рейтинга возле каждого товара при отображении категории

  • В начало файла добавить:
 1 <!-- BEGIN STAR RATING -->
 2 <link rel="stylesheet" type="text/css" href="{$SHOP_THEME}js/rating/jquery.rating-min.css" />
 3 <script src="{$SHOP_THEME}js/rating/jquery.rating-min.js"></script>
 4 <script src="{$SHOP_THEME}js/rating/jquery.MetaData-min.js"></script>
 5 <!-- END STAR RATING -->
 6 
 7 {literal}
 8 <script type="text/javascript">$(function(){
 9 
10     // Init star rating
11     $('.hover-star').rating({
12         callback: function(value) {
13             $.ajax({
14                 type: "POST",
15                 data: "pid=" + $(this).attr('pid') + "&val=" + value,
16                 url:'/shop/ajax/rate'
17              });
18 
19             $(this).rating('readOnly', true);
20         }
21     });
22 });
23 
24 </script>
25 {/literal}
  • Потом после блока:
1         {foreach $products as $p}
2             <li class="{counter('', '', 'last')}">
3                 <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
  • прописать:
1 <div class="right">
2    {$rating = $p->getRating()}
3    <input class="hover-star" type="radio" name="rating-{echo $p->getId()}" value="1" pid="{echo $p->getId()}" {if $rating==1}checked="checked"{/if}/>
4     <input class="hover-star" type="radio" name="rating-{echo $p->getId()}" value="2" pid="{echo $p->getId()}" {if $rating==2}checked="checked"{/if}/>
5     <input class="hover-star" type="radio" name="rating-{echo $p->getId()}" value="3" pid="{echo $p->getId()}" {if $rating==3}checked="checked"{/if}/>
6     <input class="hover-star" type="radio" name="rating-{echo $p->getId()}" value="4" pid="{echo $p->getId()}" {if $rating==4}checked="checked"{/if}/>
7     <input class="hover-star" type="radio" name="rating-{echo $p->getId()}" value="5" pid="{echo $p->getId()}" {if $rating==5}checked="checked"{/if}/>
8 </div>

Вывод списка подкатегорий категории

  • перед блоком:
1 <div id="brands_list">
  • добавить блок:
1 <div>
2         {foreach ShopCore::app()->SCategoryTree->getSubcategories($model->getId()) as $category}
3             <a href="{$category['link']}">{$category['name']}</a>
4             |
5         {/foreach}
6     </div>

Отображение кнопки заказать возле каждого товара при отображении категории

  • В начало шаблона вставить блок:
 1 {$jsCode}
 2 
 3 {literal}
 4 <script type="text/javascript">
 5 function ajaxAddToCart(pid)
 6 {
 7     $.ajax({
 8         type: "POST",
 9         data: $("#productForm_"+pid).serialize(),
10         url: "/shop/cart/add",
11         success: function(){$("#mycart").load('/shop/ajax/getCartDataHtml')}
12      });
13 
14     $("#cartNotify_"+pid).css('display', 'block');
15     setTimeout(function() {  $("#cartNotify_"+pid).css('display', 'none') }, 2000); 
16 }
17 
18 </script>
19 {/literal}

потом заменить блок:

 1 <li class="{counter('', '', 'last')}">
 2                 <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
 3                     <a href="{shop_url('product/' . $p->getUrl())}">
 4                         <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0"  alt="image" />
 5                     </a>
 6                 </div>
 7                 <h3 class="name"><a href="{shop_url('product/' . $p->getUrl())}">{echo ShopCore::encode($p->getName())}</a></h3>
 8                 <div class="price priceLight"> 
 9                     {$p->firstVariant}
10                     {if $p->hasDiscounts()}
11                         <s>{echo $p->firstVariant->toCurrency('origPrice')} {$CS}</s>
12                         <br/>
13                         <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
14                     {else:}
15                         <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
16                     {/if}
17                 </div>
18                 <div class="compare"><a href="{shop_url('compare/add/' . $p->getId())}">Сравнить</a></div>
19             </li>
  • блоком
 1         <form name="productForm_{echo $p->getId()}" id="productForm_{echo $p->getId()}" method="post">
 2             <li class="{counter('', '', 'last')}">
 3                 <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
 4                     <a href="{shop_url('product/' . $p->getUrl())}">
 5                         <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0"  alt="image" />
 6                     </a>
 7                 </div>
 8                 <h3 class="name"><a href="{shop_url('product/' . $p->getUrl())}">{echo ShopCore::encode($p->getName())}</a></h3>
 9                 <div class="price priceLight"> 
10                     {$p->firstVariant}
11                     {if $p->hasDiscounts()}
12                         <s>{echo $p->firstVariant->toCurrency('origPrice')} {$CS}</s>
13                         <br/>
14                         <span style="font-size:14px;" id="{echo $p->getId()}_price">{echo $p->firstVariant->toCurrency()} {$CS}</span>
15                     {else:}
16                         <span style="font-size:14px;" id="{echo $p->getId()}_price">{echo $p->firstVariant->toCurrency()} {$CS}</span>
17                     {/if}
18                 </div>
19                 <div class="compare"><a href="{shop_url('compare/add/' . $p->getId())}">Сравнить</a></div>
20                 {if $p->countProductVariants() > 1}
21                 <div align="left" style="padding-top:20px;">
22                 Варианты товара:
23                     <select name="variantId" onChange="display_variant_price({echo $p->getId()}, this.value)">
24                     {foreach $p->getProductVariants() as $variant}
25                         <option value="{echo $variant->getId()}">{echo ShopCore::encode($variant->getName())}</option>
26                     {/foreach}
27                     </select>
28                 </div>
29                 {else:}
30                     <input type="hidden" name="variantId" value="{echo $p->firstVariant->getId()}" />
31                 {/if}
32                 <input type="hidden" name="quantity" value="1" />
33                 <input type="hidden" name="productId" value="{echo $p->getId()}" />
34                 <a rel="nofollow" href="#" onClick="ajaxAddToCart({echo $p->getId()}); return false;" class="button1">{echo ShopCore::t('ДОБАВИТЬ В КОРЗИНУ')}</a>
35                 <div style="margin-left:45px;font-size:13px;display:none;background-color:#f5f5dc;" id="cartNotify_{echo $p->getId()}"> 
36                     Товар добавлен в корзину.
37                 </div> 
38             </li>
39             </form>

Блок, который отображает список категорий и возле каждой категории в скобках указывает, сколько товаров принадлежит этой категории.

  • В скрипте "application\modules\shop\classes\SCategoryTree.php" заменить функцию
 1     protected function _walkArray($array, $activeID=null)
 2     {
 3         foreach($array as $key)
 4         {
 5             if ($key->getId() == $activeID)
 6                 echo '<li>'.ShopCore::encode($key->getName()).'</a>';
 7             else
 8                 echo '<li><a href="'.$this->categoryUrlPrefix.$key->getFullPath().'">'.ShopCore::encode($key->getName()).'</a>';
 9 
10             if(sizeof($key->getSubtree()))
11             {
12                 echo '<ul>';
13                 $this->_walkArray($key->getSubtree(),$activeID);
14                 echo '</ul>';
15             }
16             echo '</li>';
17         } 
18     }
  • функцией
 1     protected function _walkArray($array, $activeID=null)
 2     {
 3         foreach($array as $key)
 4         {
 5             if ($key->getId() == $activeID)
 6                 echo '<li>'.ShopCore::encode($key->getName()).'</a>';
 7             else
 8                 echo '<li><a href="'.$this->categoryUrlPrefix.$key->getFullPath().'">'.ShopCore::encode($key->getName()).'('.$key->countProducts().')'.'</a>';
 9 
10             if(sizeof($key->getSubtree()))
11             {
12                 echo '<ul>';
13                 $this->_walkArray($key->getSubtree(),$activeID);
14                 echo '</ul>';
15             }
16             echo '</li>';
17         } 
18     }

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

  • Блок:
1            
2 {if $brand->getId() != ShopCore::$_GET['brand']}
3                 <a href="?brand={echo $brand->getId()}">{echo ShopCore::encode($brand->getName())}</a>
4             {else:}
5                 <a href="#" style="font-weight:bold;">{echo ShopCore::encode($brand->getName())}</a>
6             {/if}
  • заменить блоком
    1 
    2             {if $brand->getId() != ShopCore::$_GET['brand']}
    3                 <a href="?brand={echo $brand->getId()}">{echo ShopCore::encode($brand->getName())}{echo '('.$brand->totalProducts($model->getId()).')'}</a>
    4             {else:}
    5                 <a href="#" style="font-weight:bold;">{echo ShopCore::encode($brand->getName())}{echo '('.$brand->totalProducts($model->getId()).')'}</a>
    6             {/if}
    

Блок, который отображает товары, которые имели больше всего просмотров из определенной категории

  • Вставить после блока
    1 
    2      {else:}
    3         <p>
    4             {echo ShopCore::t('В категории нет продуктов')}.
    5         </p>
    6     {/if}
    
  • блок
     1 
     2 <div class="sp"></div>
     3     {if SProductsQuery::create()->mostViewed(6)->filterByCategoryId($model->getId())->find()}
     4     <h5>Наиболее просматриваемые товары</h5>
     5         {# Display list of related products #}
     6         <ul class="products">
     7             {$count = 1;}
     8             {foreach SProductsQuery::create()->mostViewed(6)->filterByCategoryId($model->getId())->find() as $p}
     9                 <li {if $count == 3} class="last" {$count = 0}{/if}>
    10                     <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
    11                         <a href="{shop_url('product/' . $p->getUrl())}">
    12                             <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0"  alt="image" />
    13                         </a>
    14                     </div>
    15                     <h3 class="name"><a href="{shop_url('product/' . $p->getUrl())}">{echo ShopCore::encode($p->getName())}</a></h3>
    16                     <div class="price">
    17                         {$p->firstVariant}
    18                         {if $p->hasDiscounts()}
    19                             <s>{echo $p->firstVariant->toCurrency('origPrice')} {$CS}</s>
    20                             <br/>
    21                             <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
    22                         {else:}
    23                             <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
    24                         {/if}                    
    25                     </div>
    26                     <div class="compare"><a href="{shop_url('compare/add/' . $p->getId())}">Сравнить</a></div>
    27                 </li>
    28                 {if $count == 3}<li class="separator"></li> {$count=0}{/if}
    29                 {$count++}
    30             {/foreach}
    31         </ul>
    32     {/if}
    33     <div class="sp"></div>
    

    где
    1 $model->getId()

    это идентификатор категории, по которой фильтруется.

Блок, который отображает товары, которые имели больше всего просмотров, а также имеют одинаковое свойство, к примеру: цвет для обуви

  • Для вывода блока - вставляем в конец шаблона блок
     1 
     2  <div class="sp"></div>
     3  {$ar[21] = array('47')}
     4     {if SProductsQuery::create()->combinator($ar)->filterByCategoryId($model->getId())->orderByViews(Criteria::DESC)->find()}
     5     <h5>Похожие товары</h5>
     6         {# Display list of related products #}
     7         <ul class="products">
     8             {$count = 1;}
     9             {foreach SProductsQuery::create()->combinator($ar)->filterByCategoryId($model->getId())->orderByViews(Criteria::DESC)->find() as $p}
    10                 <li {if $count == 3} class="last" {$count = 0}{/if}>
    11                     <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
    12                         <a href="{shop_url('product/' . $p->getUrl())}">
    13                             <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0"  alt="image" />
    14                         </a>
    15                     </div>
    16                     <h3 class="name"><a href="{shop_url('product/' . $p->getUrl())}">{echo ShopCore::encode($p->getName())}</a></h3>
    17                     <div class="price">
    18                         {$p->firstVariant}
    19                         {if $p->hasDiscounts()}
    20                             <s>{echo $p->firstVariant->toCurrency('origPrice')} {$CS}</s>
    21                             <br/>
    22                             <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
    23                         {else:}
    24                             <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
    25                         {/if}                    
    26                     </div>
    27                     <div class="compare"><a href="{shop_url('compare/add/' . $p->getId())}">Сравнить</a></div>
    28                 </li>
    29                 {if $count == 3}<li class="separator"></li> {$count=0}{/if}
    30                 {$count++}
    31             {/foreach}
    32         </ul>
    33     {/if}
    34     <div class="sp"></div>
    

    где $ar это массив свойств и их значений, по которым идет выборка, 21 - id свойства, 47 - значение свойства.

Блок, который отображает товары, которые имели больше всего просмотров со всех категорий

  • перед блоком
    1 {$comments}
  • вставить блок
     1 <div class="sp"></div>
     2     {if SProductsQuery::create()->mostViewed(6)->find()}
     3     <h5>Наиболее просматриваемые товары</h5>
     4         {# Display list of related products #}
     5         <ul class="products">
     6             {$count = 1;}
     7             {foreach SProductsQuery::create()->mostViewed(6)->find() as $p}
     8                 <li {if $count == 3} class="last" {$count = 0}{/if}>
     9                     <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
    10                         <a href="{shop_url('product/' . $p->getUrl())}">
    11                             <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0"  alt="image" />
    12                         </a>
    13                     </div>
    14                     <h3 class="name"><a href="{shop_url('product/' . $p->getUrl())}">{echo ShopCore::encode($p->getName())}</a></h3>
    15                     <div class="price">
    16                         {$p->firstVariant}
    17                         {if $p->hasDiscounts()}
    18                             <s>{echo $p->firstVariant->toCurrency('origPrice')} {$CS}</s>
    19                             <br/>
    20                             <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
    21                         {else:}
    22                             <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
    23                         {/if}                    
    24                     </div>
    25                     <div class="compare"><a href="{shop_url('compare/add/' . $p->getId())}">Сравнить</a></div>
    26                 </li>
    27                 {if $count == 3}<li class="separator"></li> {$count=0}{/if}
    28                 {$count++}
    29             {/foreach}
    30         </ul>
    31     {/if}
    32     <div class="sp"></div>