Как правильно прописать условия для отображения фильтра на странице Все товары - products? Simpla CMS

А как правильно прописать для условия отображения фильтра на странице Все товары адрес домен.ру products сейчас условия так прописаны

Как прописать условия для отображения фильтра? Simpla

» » Сообщение:

А как правильно прописать для условия отображения фильтра на странице "Все товары" адрес домен.ру /products
сейчас условия так прописаны

Код: Выделить всё Развернуть
{if $category->brands || $features}

пробовал дописать {if $category->brands || $features || $products} ... не помогло))))
и как для юзера конкретного, например админа, правильно прописать блок? ... что то типа {if $users->admin}
а в этом блоке уже и делать запросы по получению списка доступных переменных и значений по ним
если конечно нет готового мануала

simpla, products, simpla cms, category, features, правильно, brands, прописать, получению, запросы, блоке, доступных, переменных, ним, admin, готового, значений, помогло, прописаны, домен, товары, пробовал

А как правильно прописать для условия отображения фильтра на стр

Admin » » Сообщение:

Гость,

Гость писал(а) › 18.04.2016, 16:18:А как правильно прописать для условия отображения [anchor=http://likbezz.ru/viewtopic.php?t=1755|Переменная для $FILTER1_MENU$. Определение состояния меню переменной при помощи операторов юкоз]фильтра[/anchor] на странице "Все товары" адрес домен.ру /products

Так, навскидку, не скажу - не помню.
На локале стоит, приду домой, посмотрю, отпишусь.


Re: Небольшой баг в коде

Admin » » Сообщение:

Гость писал(а) › 18.04.2016, 16:18:А как правильно прописать для условия отображения фильтра на странице "Все товары" адрес домен.ру /products
сейчас условия так прописаны
Код: Выделить всё
Развернуть
{if $category->brands || $features}
пробовал дописать {if $category->brands || $features || $products} ... не помогло))))

Открыть:

Код: Выделить всё Развернуть
/view/ProductsView.php

Найти:

Код: Выделить всё Развернуть
      // Свойства товаров
      if(!empty($category))
      {
         $features = array();
         foreach($this->features->get_features(array('category_id'=>$category->id, 'in_filter'=>1)) as $feature)
         {
            $features[$feature->id] = $feature;
            if(($val = strval($this->request->get($feature->id)))!='')
               $filter['features'][$feature->id] = $val;   
         }
         
         $options_filter['visible'] = 1;
         
         $features_ids = array_keys($features);
         if(!empty($features_ids))
            $options_filter['feature_id'] = $features_ids;
         $options_filter['category_id'] = $category->children;
         if(isset($filter['features']))
            $options_filter['features'] = $filter['features'];
         if(!empty($brand))
            $options_filter['brand_id'] = $brand->id;
         
         $options = $this->features->get_options($options_filter);

         foreach($options as $option)
         {
            if(isset($features[$option->feature_id]))
               $features[$option->feature_id]->options[] = $option;
         }
         
         foreach($features as $i=>&$feature)
         {
            if(empty($feature->options))
               unset($features[$i]);
         }

         $this->design->assign('features', $features);
       }

Заменить на:

Код: Выделить всё Развернуть
      // Свойства товаров
      if(!empty($category))
      {
         $features = array();
         foreach($this->features->get_features(array('category_id'=>$category->id, 'in_filter'=>1)) as $feature)
         {
            $features[$feature->id] = $feature;
            if(($val = $this->request->get($feature->id))!='')
               $filter['features'][$feature->id] = $val;   
         }
               
         $options_filter['visible'] = 1;
         
         $features_ids = array_keys($features);
         if(!empty($features_ids))
            $options_filter['feature_id'] = $features_ids;
         $options_filter['category_id'] = $category->children;
         if(isset($filter['features']))
            $options_filter['features'] = $filter['features'];
         if(!empty($brand))
            $options_filter['brand_id'] = $brand->id;
         
         $options = $this->features->get_options($options_filter);
         foreach($options as $option)
         {
            if(isset($features[$option->feature_id]))
            $features[$option->feature_id]->options[] = $option;
         }
               
         foreach($features as $i=>&$feature)
         {
            if(empty($feature->options))
            unset($features[$i]);
         }
      
         $this->design->assign('features', $features);
      }else{
         $features_all = array();
         foreach($this->features->get_features(array('in_filter'=>1)) as $feature)
         {
            $features_all[$feature->id] = $feature;
            if(($val = $this->request->get($feature->id))!='')
            $filter['features'][$feature->id] = $val;   
         }
               
         $options_filter['visible'] = 1;
            
         $features_ids = array_keys($features_all);
         if(!empty($features_ids))
            $options_filter['feature_id'] = $features_ids;
         if(isset($filter['features']))
            $options_filter['features'] = $filter['features'];
         if(!empty($brand))
            $options_filter['brand_id'] = $brand->id;
               
         $options = $this->features->get_options($options_filter);
         foreach($options as $option)
         {
            if(isset($features_all[$option->feature_id]))
            $features_all[$option->feature_id]->options[] = $option;
         }
               
         foreach($features_all as $i=>&$feature)
         {
            if(empty($feature->options))
            unset($features_all[$i]);
         }
      
         $this->design->assign('features_all', $features_all);
      }

---

Открыть:

Код: Выделить всё Развернуть
/design/default/html/products.tpl

Добавить в самое начало (или куда нужно):

Код: Выделить всё Развернуть
{* Фильтр по свойствам *}
{if $features_all}
<table id="features">
   {foreach $features_all as $fa}
   <tr>
   <td class="feature_name" data-feature="{$fa->id}">
      {$fa->name}:
   </td>
   <td class="feature_values">
      <a href="{url params=[$fa->id=>null, page=>null]}" {if !$smarty.get.$fa@key}class="selected"{/if}>Все</a>
      {foreach $fa->options as $ao}
      <a href="{url params=[$fa->id=>$ao->value, page=>null]}" {if $smarty.get.$fa@key == $ao->value}class="selected"{/if}>{$ao->value|escape}</a>
      {/foreach}
   </td>
   </tr>
   {/foreach}
</table>
{/if}

---



Re: Как прописать условия для отображения фильтра? Simpla

Andrio » » Сообщение:

Admin писал(а) › 18.04.2016, 23:07:Открыть:
КОД: ВЫДЕЛИТЬ ВСЁ РАЗВЕРНУТЬ
/view/ProductsView.php

Не думал что бы прописать блоки для фильтра на доп странице нужно лезть в систему, по идее думал что всё ограничится файлами дизайна шаблона, те что под конкретный дизайн используются /design/design_my/

Admin писал(а) › 18.04.2016, 23:08:{if $smarty.session.admin == 'admin'}
   тут то, что только для админа
{/if}

то что == 'admin' - вписывать реальный ник админа? ... например у меня не admin а monster прописано.


Re: Как прописать условия для отображения фильтра? Simpla

Admin » » Сообщение:

Andrio писал(а) › 20.04.2016, 10:51:Не думал что бы прописать блоки для [anchor=http://likbezz.ru/viewtopic.php?t=1755|Переменная для $FILTER1_MENU$. Определение состояния меню переменной при помощи операторов юкоз]фильтра[/anchor] на доп странице нужно лезть в систему

В любой cms, то, что не учтено в системе, нужно писать самому.

Andrio писал(а) › 20.04.2016, 10:51:то что == 'admin' - вписывать реальный ник админа?

Нет, это ключевое слово.


Re: Как прописать условия для отображения фильтра? Simpla

Andrio » » Сообщение:

Admin писал(а) › 20.04.2016, 12:27:В любой cms, то, что не учтено в системе, нужно писать самому.

не подозревал что такое незначительное условие, дополнительная страница одна, заставит лезть в код системы, просто удивлён что за рамки шаблонов дизайна нужно идти.
Просто пока не хочу лезть в систему, возможно другой шаблон поставлю, если получится купить не дорого)))

Ещё вопрос относительно условий в шаблонах дизайна:

проблема такова - когда смотришь с декстопа всё хорошо, но если смотреть со смартфона, то, к примеру в категории товара, в силу разметки хтмл на бутсрапе, сначала идёт сайдбар (в нём фильтр по параметрам и блок с хитами и бестселлерами, на шаблоне в декстопе он слева) и потом только товар категории - получается не очень правильно.
Переставил в шаблоне, смарти с хтмл, местами блоки сайдбара и контента, на смартфоне стало норм, сначала контент анонсы товарные, потом фильтр, но на декстопе сайд бар стал справа.

Сам вопрос :
Можно как то прописать в шаблонах симплы условия по экрану (ширине экрана) по типу медиа запросов в КСС?
@media (min-width: 768px) { ... }
например
{if min-width: 768px} ... {/if}

simpla

Re: Как прописать условия для отображения фильтра? Simpla

Admin » » Сообщение:

Andrio писал(а) › 20.04.2016, 21:01:не подозревал что такое незначительное условие

Это не “незначительное условие”, а непредусмотренный системой функционал.

Andrio писал(а) › 20.04.2016, 21:01:если получится купить не дорого)

Какой смысл покупать другой шаблон, если все равно придется писать свой? Или ты для себя хочешь?

Andrio писал(а) › 20.04.2016, 21:01:Можно как то прописать в шаблонах симплы условия по экрану (ширине экрана)

По ширине экрана - нет.
Но можно определить браузер, и исходя из этого делать какие-то движения.

Andrio писал(а) › 20.04.2016, 21:01:Можно как то прописать в шаблонах симплы условия по экрану

А стилями сделать не судьба? Или скриптом..как вариант.


Re: Как прописать условия для отображения фильтра? Simpla

Andrio » » Сообщение:

Admin писал(а) › 20.04.2016, 21:26:Или ты для себя хочешь?

Да, можно и так сказать))) ... один шаблончик адаптивный подарили на одном форуме, но он так, скромен весьма и пару моментов нужно добавлять. Есть более интерсные, платные конечно, но вроде есть варианты купить недорого( в пределах 500-2000) может кого в складчину найду))) ... а там видно будет, может какую солянку соберу )))

Admin писал(а) › 20.04.2016, 21:26:А стилями сделать не судьба?

так получится что контент какой-то с сайдбара будет два раза прописан по коду, только display: будет меняться в зависимости от медиа в ксс ... так получается?
PS: Скриптом не судьба, слаб я в них(((



Re: Как прописать условия для отображения фильтра? Simpla

Andrio » » Сообщение:

Немного дополнил код условием {* if !$b->id == 12 *}, комментом отключил временно, а вообще-то хотел что бы бренд по 12 айди не выводился в списке, может как-то по другому идентифицировать бренд можно?

html Код: Выделить всё Развернуть
           
            {foreach name=brands item=b from=$category->brands}
            {* if !$b->id == 12 *}
                <li>
                    <!-- <input {if $b->id == $brand->id}checked="checked"{/if} class="le-checkbox" type="checkbox"> -->
                    <a data-brand="{$b->id}" href="catalog/{$category->url}/{$b->url}" {if $b->id == $brand->id}class="selected"{/if}>{$b->name|escape}</a>
                <li>
            {* /if *}
            {/foreach}

код не работает ))))))))))))))))))) ... что не так ? ... цикл внутри условия надо? ... или что не так?
и вот ещё проблемка с того же болота
если в фильтре или "брендах", в какой-то категории, один вариант значения остался , то как его скрыть? ... всмысле бренд или название фильтра с вариантами значений? ... какой переменной и как по количеству прописать условие?, например, выводить если вариантов >1, или прописывать дисплэй:нон если равно 1


Re: Как прописать условия для отображения фильтра? Simpla

Admin » » Сообщение:

Andrio писал(а) › 29.04.2016, 14:38:а вообще-то хотел что бы бренд по 12 айди не выводился в списке, может как-то по другому идентифицировать бренд можно?

А чем тебе так не нравится?

Andrio писал(а) › 29.04.2016, 14:38:код не работает )

А так:

Код: Выделить всё Развернуть
{if $b->id != 12}
Andrio писал(а) › 29.04.2016, 14:38:какой переменной и как по количеству прописать условие?, например, выводить если вариантов >1, или прописывать дисплэй:нон если равно 1

Не очень понял, о чем ты, но совет прост - посмотри чем выводится на то и ставь условие.


Re: Как прописать условия для отображения фильтра? Simpla

Andrio » » Сообщение:

Admin писал(а) › 29.04.2016, 15:15:посмотри чем выводится на то и ставь условие.

выводится циклом, типа того как я привёл выше
как посчитать кол-во в результате цикла? и сравнить его с "1"

Добавлено спустя 5 минут 40 секунд:

Admin писал(а) › 29.04.2016, 15:15:А так:

заработало!!!!!!!!!!))))


Re: Как прописать условия для отображения фильтра? Simpla

Admin » » Сообщение:

Andrio писал(а) › 29.04.2016, 15:29:как посчитать кол-во в результате цикла?

Сравнить c:

Код: Выделить всё Развернуть
{$smarty.foreach.foo.iteration}

.iteration
iteration содержит значение текущей итерации цикла и всегда начинается с единицы, в отличие от index. Это значение увеличивается на единицу с каждой следующей итерацией.

или с:

Код: Выделить всё Развернуть
{$smarty.foreach.foo.index}

или поставить свой счетчик, типа:

Код: Выделить всё Развернуть
{counter start=0 print=false}
{foreach}
 {counter}
{/foreach}

или:

Код: Выделить всё Развернуть
{assign var=counter value=1}
{foreach}
 {assign var=counter value=$counter+1}
{/foreach}

или:

Код: Выделить всё Развернуть
{assign var=counter value=1}
{foreach}
 {capture assign=counter}{$counter+1}{/capture}
{/foreach}

Re: Как прописать условия для отображения фильтра? Simpla

Andrio » » Сообщение:

наткнулся на интересный вариант)))
{$smarty.foreach.brands.total} - считает количество брендов или чего ещё, в цикле
НО работает только после старта цикла или после ... оно и логично)))

Код: Выделить всё Развернуть
        <div class="category-filter">
            <p class="h2">Бренд </p>
            <hr>
            <ul>
                <li>
                    <!-- <input {if !$brand->id}checked="checked"{/if} class="le-checkbox" type="checkbox"> -->
                    <a href="catalog/{$category->url}" {if !$brand->id}class="selected"{/if}>Все</a>
                </li>
            {foreach name=brands item=b from=$category->brands}
             
        {$smarty.foreach.brands.total}
             
            {if $b->id != 12}
                <li>
                    <!-- <input {if $b->id == $brand->id}checked="checked"{/if} class="le-checkbox" type="checkbox"> -->
                    <a data-brand="{$b->id}" href="catalog/{$category->url}/{$b->url}" {if $b->id == $brand->id}class="selected"{/if}>{$b->name|escape}</a>
                <li>
            {/if}
            {/foreach}           

            </ul>
        </div><!-- /.category-filter -->

а хотелось бы

Код: Выделить всё Развернуть
        {$smarty.foreach.brands.total}
            {foreach name=brands item=b from=$category->brands}

со своим счётчиком можно будет посчитать кол-во циклов "снаружи"?
что бы сразу <div class="category-filter"> не выводить/прятать

что мне в голову приходит

Код: Выделить всё Развернуть
<div class="category-filter" {foreach name=brands item=b from=$category->brands}{if $smarty.foreach.brands.total<2}style="display:none;"{/if}{/foreach}>

можно как-то оптимизировать, что бы два раза цикл не прописывать и правильно ли так? ... точнее насколько это не правильно?))


След.



Похожие темыКомментарии ПросмотрыПоследнее сообщение
205321Re: Как обнулить Simpla CMS 2.х.х. ...
Сообщение от: Admin