Файл 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>