@kycher

Simplacms как сделать чтобы не показывал в фильтре вариантов товара у которых кол-во 0?

В 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}>&nbsp;
			{$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р на телефон
  • Вопрос задан
  • 680 просмотров
Пригласить эксперта
Ответы на вопрос 1
$temp_variants = $this->variants->get_value_variants(array('product_id'=>$variant_products_ids, 'stock'=>true));

 if(!empty($filter['in_stock']) && $filter['in_stock'])

Проверяете in_stock, а передаете параметр stock.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы