Модуль Модификация: Вывод товаров из категорий где угодно OkayCMS 4.х [Работает]

  • Автор темы Автор темы wisma
  • Дата начала Дата начала

wisma

Созидатель (II)
Сообщения
28
Реакции
4
Баллы
97
В общем писал я модуль, писал, и не так и не смог зарегистрировать DI-Контейнер. Мучал 5 ИИ которые туда сюда гоняли и тоже не помогло, изучал документаци.
При это комерческий модуль с полными логами действий админов прошел все проверки, но то такое.... будет в магазине ОКея.

И так. Что делаем эта модификация?
В любом шаблоне мы можем выводить Новинки, Хиты продаж....

PHP:
{* Featured products *}
{get_featured_products var=featured_products limit=9}
{if $featured_products}
    <div class="main-products main-products__featured container">
        <div class="block block--boxed block--border">
            <div class="block__header block__header--promo">
                <div class="block__title">
                    <span data-language="main_recommended_products">{$lang->main_recommended_products}</span>
                </div>
                <div class="block__header_button">
                    <a class="block__more d-flex align-items-center" href="{url_generator route='products' filtersUrl=['filter' => ['featured']]}">
                        <span data-language="main_look_all">{$lang->main_look_all}</span>{include file="svg.tpl" svgId="arrow_right2"}
                    </a>
                </div>
            </div>
            <div class="block__body">
                <div class="fn_products_slide products_list row no_gutters swiper-container-">
                    <div class="swiper-wrapper" style="display: block">
                        {foreach $featured_products as $product}
                            <div class="item product_item swiper-slide- no_hover col-xs-6 col-sm-4 col-md-4 col-lg-4 col-xl-3">{include "product_list.tpl"}</div>
                        {/foreach}
                    </div>
                    <div class="swiper-pagination-"></div>
                </div>
            </div>
        </div>
    </div>
{/if}

Я и подумал, а почему бы не взять и не написать просто такой же плагин прямо в ядрах okay?

и выводить как угодно наши товары с категорий таким кодом и все что нам нужно это посмотреть ID категорию через админку.:
PHP:
{* Category products *}
{get_category_products var=category_products category_id=1 limit=4}
{if $category_products}
    <div class="main-products main-products__category container">
        <div class="block block--boxed block--border">
            <div class="block__header">
                <div class="block__title">
                    <span>НАЗВаНИе КАТЕГОРИИ</span>
                </div>
            </div>
            <div class="block__body">
                <div class="products_list row no_gutters">
                    {foreach $category_products as $product}
                        <div class="item product_item col-xs-6 col-sm-4 col-md-3">{include "product_list.tpl"}</div>
                    {/foreach}
                </div>
            </div>
        </div>
    </div>
{else}
    No products found
{/if}
Для работы этого кода нам просто нужно создать 1 файл и 1 файл отредактировать.
Создаем файл по пути
Okay/Core/SmartyPlugins/Plugins/GetCategoryProducts.php
c таким содержимым:

Готово.

p.s. впадлу было настраивать ngix на локалке для теста. Поэтому скрин без миниатюр.
GetCategoryProducts.jpg
 
В общем писал я модуль, писал, и не так и не смог зарегистрировать DI-Контейнер. Мучал 5 ИИ которые туда сюда гоняли и тоже не помогло, изучал документаци.
При это комерческий модуль с полными логами действий админов прошел все проверки, но то такое.... будет в магазине ОКея.

И так. Что делаем эта модификация?
В любом шаблоне мы можем выводить Новинки, Хиты продаж....

PHP:
{* Featured products *}
{get_featured_products var=featured_products limit=9}
{if $featured_products}
    <div class="main-products main-products__featured container">
        <div class="block block--boxed block--border">
            <div class="block__header block__header--promo">
                <div class="block__title">
                    <span data-language="main_recommended_products">{$lang->main_recommended_products}</span>
                </div>
                <div class="block__header_button">
                    <a class="block__more d-flex align-items-center" href="{url_generator route='products' filtersUrl=['filter' => ['featured']]}">
                        <span data-language="main_look_all">{$lang->main_look_all}</span>{include file="svg.tpl" svgId="arrow_right2"}
                    </a>
                </div>
            </div>
            <div class="block__body">
                <div class="fn_products_slide products_list row no_gutters swiper-container-">
                    <div class="swiper-wrapper" style="display: block">
                        {foreach $featured_products as $product}
                            <div class="item product_item swiper-slide- no_hover col-xs-6 col-sm-4 col-md-4 col-lg-4 col-xl-3">{include "product_list.tpl"}</div>
                        {/foreach}
                    </div>
                    <div class="swiper-pagination-"></div>
                </div>
            </div>
        </div>
    </div>
{/if}

Я и подумал, а почему бы не взять и не написать просто такой же плагин прямо в ядрах okay?

и выводить как угодно наши товары с категорий таким кодом и все что нам нужно это посмотреть ID категорию через админку.:
PHP:
{* Category products *}
{get_category_products var=category_products category_id=1 limit=4}
{if $category_products}
    <div class="main-products main-products__category container">
        <div class="block block--boxed block--border">
            <div class="block__header">
                <div class="block__title">
                    <span>НАЗВаНИе КАТЕГОРИИ</span>
                </div>
            </div>
            <div class="block__body">
                <div class="products_list row no_gutters">
                    {foreach $category_products as $product}
                        <div class="item product_item col-xs-6 col-sm-4 col-md-3">{include "product_list.tpl"}</div>
                    {/foreach}
                </div>
            </div>
        </div>
    </div>
{else}
    No products found
{/if}
Для работы этого кода нам просто нужно создать 1 файл и 1 файл отредактировать.
Создаем файл по пути
Okay/Core/SmartyPlugins/Plugins/GetCategoryProducts.php
c таким содержимым:
-=Ограниченное содержимое=-
Готово.

p.s. впадлу было настраивать ngix на локалке для теста. Поэтому скрин без миниатюр.
Посмотреть вложение 8926
Я правильно понимаю что это модуль который выводит рандомные товары со всех категорий, или только с одной?
 
Я правильно понимаю что это модуль который выводит рандомные товары со всех категорий, или только с одной?
Это не модуль. Это модификация Ядра. Добавление функций для работы.

Не правильно вы понимаете.
Второй спойлер шаблон вывода.
PHP:
{get_category_products var=category_products category_id=1 limit=12}
{if $category_products}
и далее разметка бла бла бла посмотрите чтобы вы понимали! используйте тот код как пример!

далее разьясняю для тех кто не знаком вообще с окей.
не пропускайте {} иначе будет 500 ошибка.
get_category_products = название функции из ядра. Она 1 для этой модификации и вызывает параметр Достать товары из категории и вывести их. По простому.

var=category_products
и ниже
{if $category_products}
Означает название функции, можете назвать хоть var=pomoyka (название не важно, обычно все называют как называется категория.)
и в {if $category_products} должно быть по другому {if $pomoyka}
вернемся чуть ранее.

category_id=1
Сюда нужно вписать айди категории, которую мы смотрим в админке (наводим мышкой на название категории и скину браузера читаем ссылку, там будет id=число
limit=12
Количество выводимого товара в вашем блоке.

Если ничего не поняли, просто вставляем примеры и подставляем разные category_id=
Пример 2

PHP:
{* Category products *}
{get_category_products var=category_products2 category_id=2 limit=4}
{if $category_products2}
    <div class="main-products main-products__category container">
        <div class="block block--boxed block--border">
            <div class="block__header">
                <div class="block__title">
                    <span>НАЗВаНИе КАТЕГОРИИ</span>
                </div>
            </div>
            <div class="block__body">
                <div class="products_list row no_gutters">
                    {foreach $category_products as $product}
                        <div class="item product_item col-xs-6 col-sm-4 col-md-3">{include "product_list.tpl"}</div>
                    {/foreach}
                </div>
            </div>
        </div>
    </div>
{else}
    No products found
{/if}
пример 3
PHP:
{* Category products *}
{get_category_products var=category_products3 category_id=3 limit=4}
{if $category_products3}
    <div class="main-products main-products__category container">
        <div class="block block--boxed block--border">
            <div class="block__header">
                <div class="block__title">
                    <span>НАЗВаНИе КАТЕГОРИИ</span>
                </div>
            </div>
            <div class="block__body">
                <div class="products_list row no_gutters">
                    {foreach $category_products as $product}
                        <div class="item product_item col-xs-6 col-sm-4 col-md-3">{include "product_list.tpl"}</div>
                    {/foreach}
                </div>
            </div>
        </div>
    </div>
{else}
    No products found
{/if}
Пример 4
PHP:
{* Category products *}
{get_category_products var=category_hz5555 category_id=5 limit=4}
{if $category_hz5555}
    <div class="main-products main-products__category container">
        <div class="block block--boxed block--border">
            <div class="block__header">
                <div class="block__title">
                    <span>НАЗВаНИе КАТЕГОРИИ</span>
                </div>
            </div>
            <div class="block__body">
                <div class="products_list row no_gutters">
                    {foreach $category_products as $product}
                        <div class="item product_item col-xs-6 col-sm-4 col-md-3">{include "product_list.tpl"}</div>
                    {/foreach}
                </div>
            </div>
        </div>
    </div>
{else}
    No products found
{/if}
Если вы укажите не существующую категорию, просто выведется сообщение product not found.
Этими кодами вы сможете выводить этот блок где угодно. Хоть в корзине, хоть на странице товара, хоть в категориях, хоть в блоге... не важно, это универсальный способ


p.s. Я для себя дописал вывод названия категории и ссылку Показать все. Кому нужно = в лс.
 
Последнее редактирование:
Назад
Верх