В simple 2.1 нет функционала фильтров по вариантам товара,
установил фильтр , поверх свежей системы, все работает, но если у варианта товара стоит кол-во 0, и даже цена 0, то все равно он показывает в фильтре этот вариант, при этом в вариантах товара все работает.
Подскажите как убрать из фильтров лишние варианты. Весь код в файле выше. Но приведу код, в котором я думаю можно поменять, чтобы все получилось) Спасибо!
veiw/ProductsView.php
if(!empty($category) || !empty($brand)) {
$variant_products = array();
foreach($this->products->get_id_products($filter) as $p)
$variant_products[$p->id] = $p;
$variant_products_ids = array_keys($variant_products);
$features_variants = array();
$temp_variants = $this->variants->get_value_variants(array('product_id'=>$variant_products_ids, 'stock'=>true));
foreach($temp_variants as &$variant)
$features_variants[$variant->name] = $variant->name;
asort($features_variants);
$this->design->assign('features_variants', $features_variants);
veiw/ProductsView.php
if(!empty($category) || !empty($brand)) {
$variant_products = array();
foreach($this->products->get_id_products($filter) as $p)
$variant_products[$p->id] = $p;
$variant_products_ids = array_keys($variant_products);
$features_variants = array();
$temp_variants = $this->variants->get_value_variants(array('product_id'=>$variant_products_ids, 'stock'=>true));
foreach($temp_variants as &$variant)
$features_variants[$variant->name] = $variant->name;
asort($features_variants);
$this->design->assign('features_variants', $features_variants);
api/Variants.php
public function get_value_variants($filter = array())
{
$product_id_filter = '';
$instock_filter = '';
if(!empty($filter['product_id']))
$product_id_filter = $this->db->placehold('AND v.product_id in(?@)', (array)$filter['product_id']);
if(!empty($filter['in_stock']) && $filter['in_stock'])
$instock_filter = $this->db->placehold('AND (v.stock>0 OR v.stock IS NULL)');
if(!$product_id_filter)
return array();
$query = $this->db->placehold("SELECT v.name
FROM __variants AS v
WHERE
v.name <> ''
$product_id_filter
$instock_filter
GROUP BY v.name
");
$this->db->query($query);
return $this->db->results();
}
И вывод в шаблоне:
{if $features_variants|count > 1}
<tr>
<td class="feature_name">Варианты:</td>
<td class="feature_values">
{foreach $features_variants as $o}
<label><input type="checkbox" name="v[]" value="{$o}"{if $smarty.get.v && $o|in_array:$smarty.get.v} checked{/if}>
{$o|escape}{$o|count|escape}
{/foreach}
</label>
</td>
</tr>
{/if}
Те v.stock>0 OR v.stock IS NULL толи не срабатывает, но в $features_variants есть варианты у которых stock 0... PS please help me неммножко поправить баг за помощь 100р на телефон