Доработки магазина Simpla: облако производителей
Дата: 12 Апр ' 11 Автор: mart Рубрики: Программирование
Пришла в голову мысль сделать и списка производителей облако тегов, чтобы отображать «важность» брендов представленных в магазине. Правка небольшая и не самая важная, но может найти своего ценителя.
Открываем файл Site.class.php в корне сайта и находим выборку брендов из базы (примерно 71 строка)
71 72 73 74 75 | // Бренды $query = sql_placeholder("SELECT * FROM brands ORDER BY name"); $this->db->query($query); $allbrands = $this->db->results(); $this->smarty->assign('all_brands', $allbrands); |
Заменяем блок между комментариями «Бренды» и «Состояние корзины» на новый, приведенный ниже.
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | // Бренды $query = sql_placeholder("SELECT brands.*, COUNT(products.product_id) AS `count` FROM brands LEFT JOIN products ON products.brand_id = brands.brand_id WHERE products.enabled = 1 GROUP BY brands.brand_id ORDER BY brands.name"); $this->db->query($query); $allbrands = $this->db->results(); $min = 100; $max = 0; foreach($allbrands AS $k=>$v) { if($min > $v->count) $min = $v->count; if($max < $v->count) $max = $v->count; } $this->smarty->assign('min_brands', $min); $this->smarty->assign('max_brands', $max); $this->smarty->assign('all_brands', $allbrands); |
С этим файлов все закончили, теперь будем править вывод данных в шаблоне.
Откроем файл шаблона (например, design/default) html/index.tpl и найдем в нем код вывода списка брендов.
150 151 152 153 154 155 156 157 158 159 160 | <!-- Меню каталога #End /--> {if $all_brands} <!-- Список брендов /--> <div id="brands_menu"> {foreach name=brands from=$all_brands item=b} <a href='brands/{$b->url}'>{$b->name|escape}</a> {/foreach} </div> <!-- Список брендов #End /--> {/if} |
И заменим ее на новый блок, приведенный ниже.
150 151 152 153 154 155 156 157 158 159 160 161 | <!-- Меню каталога #End /--> {if $all_brands} <!-- Список брендов /--> {math equation="(y - x) / z" x=$min_brands y=$max_brands z=5 assign='step_brands'} <div id="brands_menu"> {foreach name=brands from=$all_brands item=b} <a href='brands/{$b->url}' style='font-size:{math equation="round(12 + x/y*4)" x=$b->count y=$step_brands}px'>{$b->name|escape}</a> {/foreach} </div> <!-- Список брендов #End /--> {/if} |
Сделаю краткое пояснение. z=5 — это количество шагов для размеров, т.е. изменяя это количество — можно варьировать разницу размеров. round(12 + x/y*4) — поскольку я использовал для тегов изменение размеров от 12px (кто-то хочет использовать для этой задачи теги от H1 до H6).
Вот и все премудрости. Развивая эту тему можно прикрутить и популярный сегодня флешевое облако Cumulus — может быть на досуге как-нибудь отпишу. Или использовать логику для построения облака категорий — фантазия безгранична.
Всем удачи!
P.S. Я не занимаюсь поддержкой движка — все статьи пишу в свободное время. Суппорта не делаю. Все другие доработки должны оплачиваться, т.к. это моя работа.
3 комментария
-
Александр
19|Мар|2012 1Огромное спасибо за доработку, все получилось, выглядит круто =)
-
Федор
22|Ноя|2012 2А где находится это файл Site.class.php??? симпла 2.1.3
-
pikasso
28|Ноя|2013 3Здравствуйте а подскажите для версии 2.1.5 я нахожу что то похожее в файлах но не рискнул менять… Где именно нужно копать?