Добрый день.
Хочу отсортировать блок "Бренды" по количеству товаров, у которых указан этот бренд.
Код шаблона:
<h2>Бренды</h2> <div> {foreach $all_brands as $br} {inputValue from='br->brand_id' assign=id} {$checked = (isset($smarty.request.filter_brand.$id)) ? 'checked' : ''} <div class="checkbox"> <label {(intval($br->products_count) == 0) ? 'class="text-muted"' : ""}> <input type="checkbox" name="filter_brand[{$id}]" value="{$checked}" {$checked} {(intval($br->products_count) > 0) ? "" : 'disabled="disabled"'}/> {$br->name} {if intval($br->products_count) > 0} <small>({$br->products_count})</small> {/if} </label> </div> {/foreach}
Таким образом в шаблоне будет выведен список брендов, и рядом с каждым брендом в скобках будет указано количество товаров этого бренда.
В шаблоне:
- массив брендов $all_brands;
- один очередной бренд $br;
- количество товаров этого бренда $br->products_count
Хочу отсортировать список foreach по количеству товаров бренда.
Что сделал: в файле objects\.def-models\ClientPage.php ориентировочно на 490 строку до строки
$this->smarty->assignByRef('brands_list', $this->brands);
добавил:
// сортировка брендов по убыванию товаров этого бренда
$sorted_brands_tree = $this->brands_tree;
foreach ($sorted_brands_tree as $key_id => $value_prop_list) {
foreach ($value_prop_list as $key_prop_id => $value) {
if ( $key_prop_id == 'products_count' ) {
$products_count[$key_id] = $value;
}
}
}
array_multisort($products_count, SORT_DESC, $sorted_brands_tree);
$this->smarty->assignByRef('all_brands_sorted', $sorted_brands_tree);
И в шаблоне указал
{foreach $all_brands_sorted as $br}
1. Вопрос: как сделать лучше? Например, в smarty есть модификатор sortby, но конструкция
{foreach from=$all_brands|@sortby:"#products_count" as $br}
не работает. Может быть нужно записать её под другому?
2. Вопрос: как аккуратно то же сделать и со свойствами товаров? Если нельзя средствами смарти, то в каком файле задаётся переменная $properties, которая выводится в шаблоне template/products.htm, где можно её изменить в ядре движка?
Спасибо.