Добрый день.
Хочу отсортировать блок "Бренды" по количеству товаров, у которых указан этот бренд.
Код шаблона:
<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, где можно её изменить в ядре движка?
Спасибо.