Доработка модуля "Отображение подкатегорий сеткой"

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

Евгений M
Евгений M
Возраст: 37
Репутация: 4
Сообщения: 86
Зарегистрирован: 15.12.2018
С нами: 5 лет 2 месяца
Откуда: Киев

Сообщение #1 Евгений » 22.09.2023, 07:56

V4.4.0
Купили и установили модуль "Отображение подкатегорий сеткой". Работает довольно странным образом- в описании модуля в админке указано, что будут выводиться только сетка подкатегорий вместо товаров, но по факту выводит и то и другое. Но это все ок, так даже лучше. Минусом является то, что сетка категорий выводится на всех страницах родительской категории, а должен лишь на первой.
В v2.3.5 с подобным модулем вопрос решался добавлением условия в products.tpl:
if $current_page_num == 1
В новой версии Окая уже не работает. Подскажите пожалуйста как решить проблемку

Aleks
Aleks
Репутация: 56
Сообщения: 377
Зарегистрирован: 24.05.2021
С нами: 2 года 8 месяцев

Сообщение #2 Aleks » 22.09.2023, 12:57

Вам надо обращаться к разработчику. Продукт-то платный.
Поиск на форуме: вывод подкатегорий картинками. Узнаете, что подобный сервис можно сделать своими силами.
Всего лишь десяток строк в products.tpl.

Евгений M
Евгений M
Возраст: 37
Репутация: 4
Сообщения: 86
Зарегистрирован: 15.12.2018
С нами: 5 лет 2 месяца
Откуда: Киев

Сообщение #3 Евгений » 22.09.2023, 18:56

К разработчику обратился, но пока тишина. А то что сервис можно сделать своими силами я как бы в курсе, подробное описание мною же и было опубликовано для v2.3.5, но вот в 4.4.0 уже не работает.

Aleks
Aleks
Репутация: 56
Сообщения: 377
Зарегистрирован: 24.05.2021
С нами: 2 года 8 месяцев

Сообщение #4 Aleks » 22.09.2023, 21:41

Приведенный ниже код работает и в v4. Проверил в сети на 4.2.1 и 4.4.0
Читайте:
viewtopic.php?f=9&t=1632&p=12080#p12080
Master » 15.01.2020, 10:05 для v3.3.5
В файле design/okay_shop/html/products.tpl
После:
<h1 class="h1"{if $category} data-category="{$category->id}"{/if}>{$h1|escape}</h1>
Перед {if !empty($annotation)}
Вставляем:

Код: Выделить всё

{if $category->subcategories}
          <div class="main-products main-products__featured container">
             <div class="block block--boxed block--border">
                    <div class="f_row cat_grid">
                      {foreach $category->subcategories as $subc}
                     <div class="cat_grid__col d-flex f_col-6 f_col-sm-4 f_col-lg-3 f_col-xl-2">
                      <a class="cat_grid__item d-flex flex-column" href="{url_generator route='category' url=$subc->url}">
               <div class="cat_grid__image d-flex align-items-center justify-content-center">
                                        {if $subc->image}
               <img  src="{$subc->image|resize:100:100:false:$config->resized_categories_dir}" alt="{$subc->name}">
                                     {else}
                            {include file="svg.tpl" svgId="no_image"}
                                {/if}
                              </div>
                           <span class="cat_grid__name">{$subc->name|escape}</span>
                                </a>
                            </div>
                        {/foreach}
                    </div>
                </div>
            </div>
        {/if}


Евгений M
Евгений M
Возраст: 37
Репутация: 4
Сообщения: 86
Зарегистрирован: 15.12.2018
С нами: 5 лет 2 месяца
Откуда: Киев

Сообщение #5 Евгений » 23.09.2023, 07:29

Все верно, этот код работает и даже с условием if $current_page_num == 1, но все же нужно допилить скрипт.
Попробовал в products.tpl после

Код: Выделить всё

 <h1 class="h1"{if $category} data-category="{$category->id}"{/if}{if $brand} data-brand="{$brand->id}"{/if}>{$h1|escape}</h1>

вставить

Код: Выделить всё

{if $current_page_num == 1}
         <div class="grid-vstavka">
         </div>
         {/if}
, а в module.json

Код: Выделить всё

      {
        "file": "products.tpl",
        "changes": [
          {
            "find": "<h1 class=\"h1\"",
            "appendAfter": "subcategories_grid_block.tpl"
          }
        ]
      }

заменить на

Код: Выделить всё

{
  "file": "products.tpl",
  "changes": [
    {
      "find": "<div class='grid-vstavka'>",
      "replace": "<div class='grid-vstavka'>{include file='subcategories_grid_block.tpl'}"
    }
  ]
}
, но все равно безрезультатно.

Aleks
Aleks
Репутация: 56
Сообщения: 377
Зарегистрирован: 24.05.2021
С нами: 2 года 8 месяцев

Сообщение #6 Aleks » 23.09.2023, 16:50

Евгений писал(а):Все верно, этот код работает и даже с условием if $current_page_num == 1
У меня if $current_page_num == 1 не работает. Можете подсказать как его правильно вставить?
По Вашему модулю.
1.Был у меня подобный случай с установкой модуля Дополнительное поле к товару.
Из админки не установился. Я его скопировал в OkayModules\OkayCMS. Заработал правильно.
2.И для проверки модуля, если есть локальный сервер или тестовый сайт в сети.
В установочный архив добавить в нужное место этот модуль и установить сайт по новому.
И здесь станет ясно: плохой модуль или ошибка при установке модуля на сайт.

Евгений M
Евгений M
Возраст: 37
Репутация: 4
Сообщения: 86
Зарегистрирован: 15.12.2018
С нами: 5 лет 2 месяца
Откуда: Киев

Сообщение #7 Евгений » 23.09.2023, 17:52

В v4.4.0 если в products.tpl если сразу после </h1> вставить

Код: Выделить всё

{if $current_page_num == 1}
{if $category->subcategories}
          <div class="main-products main-products__featured container">
             <div class="block block--boxed block--border">
                    <div class="f_row cat_grid">
                      {foreach $category->subcategories as $subc}
                     <div class="cat_grid__col d-flex f_col-6 f_col-sm-4 f_col-lg-3 f_col-xl-2">
                      <a class="cat_grid__item d-flex flex-column" href="{url_generator route='category' url=$subc->url}">
               <div class="cat_grid__image d-flex align-items-center justify-content-center">
                                        {if $subc->image}
               <img  src="{$subc->image|resize:100:100:false:$config->resized_categories_dir}" alt="{$subc->name}">
                                     {else}
                            {include file="svg.tpl" svgId="no_image"}
                                {/if}
                              </div>
                           <span class="cat_grid__name">{$subc->name|escape}</span>
                                </a>
                            </div>
                        {/foreach}
                    </div>
                </div>
            </div>
        {/if}
      {/if}

то работает как надо.
Для v.2.3.5 описал тут - https://forum.okay-cms.com/viewtopic.php?f=10&t=1963&p=8674#p8674

А вот в покупном модуле на 4.4.0 условие if $current_page_num == 1 для категорически отказывается работать.
Так как на 4,4,0 только переезжаем, то до конца разобратся еще не успел.
Есть мысль, что код из модуля /Backend/design/html/subcategories_grid_switch.tpl не понимает какая страница перед ним и поэтому игнорит.
Можно попробовать указать номер страницы, например $smarty->assign('current_page_num', $current_page_num); ,но пока не нашел где.

Aleks
Aleks
Репутация: 56
Сообщения: 377
Зарегистрирован: 24.05.2021
С нами: 2 года 8 месяцев

Сообщение #8 Aleks » 23.09.2023, 20:31

Спасибо за {if $current_page_num == 1}.
Работает правильно.

Евгений M
Евгений M
Возраст: 37
Репутация: 4
Сообщения: 86
Зарегистрирован: 15.12.2018
С нами: 5 лет 2 месяца
Откуда: Киев

Сообщение #9 Евгений » 25.09.2023, 15:09

Решил также для покупного модуля v4.4.0
Оригинальный код subcategories_grid_block.tpl меняем на

Код: Выделить всё

{if $current_page_num == 1}
{if $category->subcategories_grid__subcategories_grid}
    <div>
        <div class="subcategories_wrapper row">
            {foreach $category->subcategories as $sCategory}
                {if $sCategory->visible == 1}
                    <a class="col-md-2 subcategories_grid_card"
                       href="{url_generator route='category' url=$sCategory->url}">
                        {if $sCategory->image}
                            <img src="{$sCategory->image|resize:112:112:false:$config->resized_categories_dir}">
                        {/if}
                        <div class="subcategories_name_grid_card"><span>{$sCategory->name}</span></div>
                    </a>
                {/if}
            {/foreach}
        </div>
    </div>
{/if}
{/if}

после чего в админке отключаем и подключаем заново модуль и все работает как надо. Сетка подкатегорий показывается только на первой странице родительской категории.

Aleks
Aleks
Репутация: 56
Сообщения: 377
Зарегистрирован: 24.05.2021
С нами: 2 года 8 месяцев

Сообщение #10 Aleks » 26.09.2023, 15:19

Спасибо за еще один код для отображения субкатегорий картинками.
Удалил в Вашем коде во второй строке grid__subcategories_grid
Вставил вместо предыдущего, работает исправно без модуля. Картинки только на первой странице. И товар здесь же.
Ну, а модуль нужен для того, чтобы отключить показ на первой странице товар.

Код: Выделить всё

if $current_page_num == 1}
{if $category->subcategories}
    <div>
        <div class="subcategories_wrapper row">
            {foreach $category->subcategories as $sCategory}
                {if $sCategory->visible == 1}
                    <a class="col-md-2 subcategories_grid_card"
                       href="{url_generator route='category' url=$sCategory->url}">
                        {if $sCategory->image}
                            <img src="{$sCategory->image|resize:112:112:false:$config->resized_categories_dir}">
                        {/if}
                        <div class="subcategories_name_grid_card"><span>{$sCategory->name}</span></div>
                    </a>
                {/if}
            {/foreach}
        </div>
    </div>
{/if}
{/if}

Евгений M
Евгений M
Возраст: 37
Репутация: 4
Сообщения: 86
Зарегистрирован: 15.12.2018
С нами: 5 лет 2 месяца
Откуда: Киев

Сообщение #11 Евгений » 30.09.2023, 10:09

Немножко переделал, так как при вставке

Код: Выделить всё

{if $current_page_num == 1}
{if $category->subcategories_grid__subcategories_grid}
    <div>
        <div class="subcategories_wrapper row">
            {foreach $category->subcategories as $sCategory}
                {if $sCategory->visible == 1}
                    <a class="col-md-2 subcategories_grid_card"
                       href="{url_generator route='category' url=$sCategory->url}">
                        {if $sCategory->image}
                            <img src="{$sCategory->image|resize:112:112:false:$config->resized_categories_dir}">
                        {/if}
                        <div class="subcategories_name_grid_card"><span>{$sCategory->name}</span></div>
                    </a>
                {/if}
            {/foreach}
        </div>
    </div>
{/if}
{/if}

отключается работа Seo фильтров
Чтобы все работало как надо, лучше записать так

Код: Выделить всё

{if $category->subcategories_grid__subcategories_grid && $current_page_num == 1}
    <div>
        <div class="subcategories_wrapper row">
            {foreach $category->subcategories as $sCategory}
                {if $sCategory->visible == 1}
                    <a class="col-md-2 subcategories_grid_card"
                       href="{url_generator route='category' url=$sCategory->url}">
                        {if $sCategory->image}
                            <img src="{$sCategory->image|resize:112:112:false:$config->resized_categories_dir}">
                        {/if}
                        <div class="subcategories_name_grid_card"><span>{$sCategory->name}</span></div>
                    </a>
                {/if}
            {/foreach}
        </div>
    </div>
{/if}}

krinysan
krinysan
Репутация: 0
Сообщения: 12
Зарегистрирован: 11.12.2022
С нами: 1 год 2 месяца

Сообщение #12 krinysan » 03.10.2023, 19:42

Евгений писал(а):Немножко переделал, так как при вставке

Код: Выделить всё

{if $current_page_num == 1}
{if $category->subcategories_grid__subcategories_grid}
    <div>
        <div class="subcategories_wrapper row">
            {foreach $category->subcategories as $sCategory}
                {if $sCategory->visible == 1}
                    <a class="col-md-2 subcategories_grid_card"
                       href="{url_generator route='category' url=$sCategory->url}">
                        {if $sCategory->image}
                            <img src="{$sCategory->image|resize:112:112:false:$config->resized_categories_dir}">
                        {/if}
                        <div class="subcategories_name_grid_card"><span>{$sCategory->name}</span></div>
                    </a>
                {/if}
            {/foreach}
        </div>
    </div>
{/if}
{/if}

отключается работа Seo фильтров
Чтобы все работало как надо, лучше записать так

Код: Выделить всё

{if $category->subcategories_grid__subcategories_grid && $current_page_num == 1}
    <div>
        <div class="subcategories_wrapper row">
            {foreach $category->subcategories as $sCategory}
                {if $sCategory->visible == 1}
                    <a class="col-md-2 subcategories_grid_card"
                       href="{url_generator route='category' url=$sCategory->url}">
                        {if $sCategory->image}
                            <img src="{$sCategory->image|resize:112:112:false:$config->resized_categories_dir}">
                        {/if}
                        <div class="subcategories_name_grid_card"><span>{$sCategory->name}</span></div>
                    </a>
                {/if}
            {/foreach}
        </div>
    </div>
{/if}}

Большое спасибо. Всё работает, на следующих страницах уже нет плиток из категорий.


Название раздела: Полезные решения для OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Полезные решения для OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость