Файл search.tpl¶
Данный файл отвечает за отображение поиска по Интернет-магазину
В базовом шаблоне он имеет следующую структуру:
1 {# Variables
2 # @var products
3 # @var totalProducts
4 # @var brandsInSearchResult
5 # @var pagination
6 # @var tree
7 #}
8
9 {# Display sidebar.tpl #}
10 {include_tpl ('sidebar')}
11
12 <div class="products_list">
13
14 <div id="titleExt">
15 <h5 class="left">Поиск</h5>
16 <div class="right">
17 Найдено {$totalProducts} {echo SStringHelper::Pluralize($totalProducts, array('продукт','продукта','продуктов'))}
18 <!-- BEGIN FILTER BOX -->
19 <a href="#" onclick="$('#filterBox').toggle();return false;">Изменить параметры ↓</a>
20 <div id="filterBox">
21 <form method="get" action="">
22 {if !empty(ShopCore::$_GET['text'])}
23 <input type="hidden" value="{encode(ShopCore::$_GET['text'])}" name="text" />
24 {/if}
25
26 <div class="fieldName">Сортировка:</div>
27 <div class="field">
28 <select name="order">
29 <option>-</option>
30 <option {if ShopCore::$_GET['order']=='price'}selected{/if} value="price">Возрастанию цены</option>
31 <option {if ShopCore::$_GET['order']=='price_desc'}selected{/if} value="price_desc">Убыванию цены</option>
32 <option {if ShopCore::$_GET['order']=='name'}selected{/if} value="name">Название A-Z</option>
33 <option {if ShopCore::$_GET['order']=='name_desc'}selected{/if} value="name">Название Z-A</option>
34 <option {if ShopCore::$_GET['order']=='date'}selected{/if} value="date">Возрастанию даты</option>
35 <option {if ShopCore::$_GET['order']=='date_desc'}selected{/if} value="date_desc">Убыванию даты</option>
36 </select>
37 </div>
38
39 <div class="fieldName">Фильтр по категории:</div>
40 <div class="field">
41 <select name="category" onChange="getCategoryAttributes(this.options[this.selectedIndex].value)">
42 <option>-</option>
43 {foreach $tree as $c}
44 <option {if ShopCore::$_GET['category']==$c->getId()}selected{/if} value="{echo $c->getId()}">{str_repeat('-',$c->getLevel())}
45 {if $c->getLevel()==0}
46 <b>{echo ShopCore::encode($c->getName())}</b>
47 {else:}
48 {echo ShopCore::encode($c->getName())}
49 {/if}
50 </option>
51 {/foreach}
52 </select>
53 </div>
54
55 <div id="catVariants">
56 </div>
57
58 <div class="fieldName">Цена:</div>
59 <div class="field">
60 от <input type="text" value="{encode(ShopCore::$_GET['lp'])}" name="lp" style="width:26px;" />
61 до <input type="text" value="{encode(ShopCore::$_GET['rp'])}" name="rp" style="width:26px;"/>
62 </div>
63 <div class="clear"></div>
64
65 {if !empty(ShopCore::$_GET['brand'])}
66 <input type="hidden" value="{encode(ShopCore::$_GET['brand'])}" name="brand" />
67 {/if}
68 <div class="clear"></div>
69 <div class="fieldName"></div>
70 <div class="field">
71 <input type="submit" value="Применить" />
72 </div>
73 <div class="clear"></div>
74
75 </form>
76 </div>
77 <!-- END FILTER BOX -->
78 </div>
79 <div class="sp"></div>
80
81 <div id="categoryPath">
82 {if !empty(ShopCore::$_GET['text'])}
83 Вы искали: "<span class="highlight">{encode($_GET['text'])}</span>"
84 {/if}
85 </div>
86 </div>
87 <div id="brands_list">
88 <!-- Display brans list -->
89 {if sizeof($brandsInSearchResult) > 0}
90 {foreach $brandsInSearchResult as $brand}
91 {if $brand->getId() != ShopCore::$_GET['brand']}
92 <a href="?text={encode(ShopCore::$_GET['text'])}{if !empty(ShopCore::$_GET['order'])}&order={encode(ShopCore::$_GET['order'])}{/if}{if !empty(ShopCore::$_GET['category'])}&category={encode(ShopCore::$_GET['category'])}{/if}&brand={echo $brand->getId()}">{echo ShopCore::encode($brand->getName())}</a>
93 {else:}
94 <a href="#" style="font-weight:bold;">{echo ShopCore::encode($brand->getName())}</a>
95 {/if}
96 |
97 {/foreach}
98 {/if}
99 </div>
100 <br/>
101
102 {if $totalProducts > 0}
103 <ul class="products">
104 {$count = 1;}
105 {foreach $products as $p}
106 <li {if $count == 3} class="last" {$count = 0}{/if} {if $count == 1} style="clear:left;" {/if}>
107 <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
108 <a href="{shop_url('product/' . $p->getUrl())}">
109 <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0" alt="image" />
110 </a>
111 </div>
112 <h3 class="name"><a href="{shop_url('product/' . $p->getUrl())}">{echo ShopCore::encode($p->getName())}</a></h3>
113 <div class="price">{echo $p->firstVariant->toCurrency()} {$CS}</div>
114 <div class="compare"><a href="{shop_url('compare/add/' . $p->getId())}">Сравнить</a></div>
115 </li>
116 {if $count == 3}<li class="separator"></li> {$count=0}{/if}
117 {$count++}
118 {/foreach}
119 </ul>
120
121 <div class="sp"></div>
122 <div id="gopages">
123 {$pagination}
124 </div>
125 <div class="sp"></div>
126 {else:}
127 <p>
128 {echo ShopCore::t('По вашему запросу ничего не найдено')}.
129 </p>
130 {/if}
131 </div>
Главные участки файла search.tpl¶
Отображение заголовка, запроса, по которому искали, количества найденных результатов и формы фильтра для уточнения параметров поиска¶
1
2 <div id="titleExt">
3 <h5 class="left">Поиск</h5>
4 <div class="right">
5 Найдено {$totalProducts} {echo SStringHelper::Pluralize($totalProducts, array('продукт','продукта','продуктов'))}
6 <!-- BEGIN FILTER BOX -->
7 <a href="#" onclick="$('#filterBox').toggle();return false;">Изменить параметры ↓</a>
8 <div id="filterBox">
9 <form method="get" action="">
10 {if !empty(ShopCore::$_GET['text'])}
11 <input type="hidden" value="{encode(ShopCore::$_GET['text'])}" name="text" />
12 {/if}
13
14 <div class="fieldName">Сиртировка:</div>
15 <div class="field">
16 <select name="order">
17 <option>-</option>
18 <option {if ShopCore::$_GET['order']=='price'}selected{/if} value="price">Возрастанию цены</option>
19 <option {if ShopCore::$_GET['order']=='price_desc'}selected{/if} value="price_desc">Убыванию цены</option>
20 <option {if ShopCore::$_GET['order']=='name'}selected{/if} value="name">Название A-Z</option>
21 <option {if ShopCore::$_GET['order']=='name_desc'}selected{/if} value="name">Название Z-A</option>
22 <option {if ShopCore::$_GET['order']=='date'}selected{/if} value="date">Возрастанию даты</option>
23 <option {if ShopCore::$_GET['order']=='date_desc'}selected{/if} value="date_desc">Убыванию даты</option>
24 </select>
25 </div>
26
27 <div class="fieldName">Фильтр по категории:</div>
28 <div class="field">
29 <select name="category" onChange="getCategoryAttributes(this.options[this.selectedIndex].value)">
30 <option>-</option>
31 {foreach $tree as $c}
32 <option {if ShopCore::$_GET['category']==$c->getId()}selected{/if} value="{echo $c->getId()}">{str_repeat('-',$c->getLevel())}
33 {if $c->getLevel()==0}
34 <b>{echo ShopCore::encode($c->getName())}</b>
35 {else:}
36 {echo ShopCore::encode($c->getName())}
37 {/if}
38 </option>
39 {/foreach}
40 </select>
41 </div>
42
43 <div id="catVariants">
44 </div>
45
46 <div class="fieldName">Цена:</div>
47 <div class="field">
48 от <input type="text" value="{encode(ShopCore::$_GET['lp'])}" name="lp" style="width:26px;" />
49 до <input type="text" value="{encode(ShopCore::$_GET['rp'])}" name="rp" style="width:26px;"/>
50 </div>
51 <div class="clear"></div>
52
53 {if !empty(ShopCore::$_GET['brand'])}
54 <input type="hidden" value="{encode(ShopCore::$_GET['brand'])}" name="brand" />
55 {/if}
56 <div class="clear"></div>
57 <div class="fieldName"></div>
58 <div class="field">
59 <input type="submit" value="Применить" />
60 </div>
61 <div class="clear"></div>
62
63 </form>
64 </div>
65 <!-- END FILTER BOX -->
66 </div>
67 <div class="sp"></div>
68
69 <div id="categoryPath">
70 {if !empty(ShopCore::$_GET['text'])}
71 Вы искали: "<span class="highlight">{encode($_GET['text'])}</span>"
72 {/if}
73 </div>
74 </div>
Отображение найденных продуктов¶
1
2 {if $totalProducts > 0}
3 <ul class="products">
4 {$count = 1;}
5 {foreach $products as $p}
6 <li class="{counter('', '', 'last')}">
7 <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
8 <a href="{shop_url('product/' . $p->getUrl())}">
9 <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0" alt="image" />
10 </a>
11 </div>
12 <h3 class="name"><a href="{shop_url('product/' . $p->getUrl())}">{echo ShopCore::encode($p->getName())}</a></h3>
13 <div class="price">{echo $p->firstVariant->toCurrency()} {$CS}</div>
14 <div class="compare"><a href="#">Сравнить</a></div>
15 </li>
16 {if $count == 3}<li class="separator"></li> {$count=0}{/if}
17 {$count++}
18 {/foreach}
19 </ul>
20
21 <div class="sp"></div>
22 <div id="gopages">
23 {$pagination}
24 </div>
25 <div class="sp"></div>
26 {else:}
27 <p>
28 {echo ShopCore::t('По вашему запросу ничего не найдено')}.
29 </p>
30 {/if}
Полезные советы¶
- Для отображения результатов поиска в виде: категория продукции (количество результатов), а ниже - отображение всех найденных товаров, и так по каждой категории надо
В скрипте application\modules\shop\search.php:
заменить блок
1 $products = $products
2 ->offset((int) ShopCore::$_GET['per_page'])
3 ->limit((int) $this->perPage)
4 ->find();
5
блоком
1 //creating array of name and total products in category
2 $products_all = $products
3 ->find();
4 foreach ($products_all as $product) {
5 $products_in_category[$product->getCategoryId()]['total']++;
6 }
7 ksort($products_in_category);
8 $categories = SCategoryQuery::create()
9 ->where('SCategory.Id IN ?', array_keys($products_in_category))
10 ->find();
11 foreach ($categories as $category) {
12 $products_in_category[$category->getId()]['name'] = $category->getName();
13 $products_in_category[$category->getId()]['path'] = $category->getFullPath();
14 }
15
16 $products = $products
17 ->orderByCategoryId('ASC')
18 ->find();
Строку
1 'pagination'=>$this->pagination->create_links(),
заменить строкой
1 'productsCategoryTotal'=>$products_in_category,
В шаблоне templates\commerce\shop\default\search.tpl:
Заменить блок
1 {if $totalProducts > 0}
2 <ul class="products">
3 {$count = 1;}
4 {foreach $products as $p}
5 <li class="{counter('', '', 'last')}">
6 <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
7 <a href="{shop_url('product/' . $p->getUrl())}">
8 <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0" alt="image" />
9 </a>
10 </div>
11 <h3 class="name"><a href="{shop_url('product/' . $p->getUrl())}">{echo ShopCore::encode($p->getName())}</a></h3>
12 <div class="price">{echo $p->firstVariant->toCurrency()} {$CS}</div>
13 <div class="compare"><a href="#">Сравнить</a></div>
14 </li>
15 {if $count == 3}<li class="separator"></li> {$count=0}{/if}
16 {$count++}
17 {/foreach}
18 </ul>
19
20 <div class="sp"></div>
21 <div id="gopages">
22 {$pagination}
23 </div>
24 <div class="sp"></div>
25 {else:}
26 <p>
27 {echo ShopCore::t('По вашему запросу ничего не найдено')}.
28 </p>
29 {/if}
блоком
1 {if $totalProducts > 0}
2 {foreach $productsCategoryTotal as $key=>$value}
3 <a href="category/{$value['path']}">{echo $value['name'].'('.$value['total'].')'}</a>
4 <ul class="products">
5 {$count = 1;}
6 {foreach $products as $p}
7 {if $p->getCategoryId() == $key}
8 <li {if $count == 3} class="last"{/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">{echo $p->firstVariant->toCurrency()} {$CS}</div>
16 <div class="compare"><a href="#">Сравнить</a></div>
17 </li>
18 {if $count == 3}<li class="separator"></li> {$count=0}{/if}
19 {$count++}
20 {/if}
21 {/foreach}
22 </ul>
23 <div class="sp"></div>
24 {/foreach}
25 <div class="sp"></div>
26 {else:}
27 <p>
28 {echo ShopCore::t('По вашему запросу ничего не найдено')}.
29 </p>
30 {/if}
Пример: