Добро пожаловать на сайт SEDBY
Автор Сообщение
prostogorod
Аватар

Участник
Сообщения: 8

[Plugin] Catlist
  • #1
  • 22.08.2024 13:24

Подскажите, пожалуйста, как работает функция sedby_catlist? Вернее она работает и выводит категории, но не могу понять как ограничить вывод той или иной категории. Если можно с примерами. Спасибо!

Добавлено 10 минут спустя:

Да, еще увидел нет мультиязычности. Можно это добавить в функционал?

Отредактировано: prostogorod (22.08.2024 13:35, 3 недели назад)
Поблагодарили 1 раз
admin
Аватар

Администратор
Сообщения: 74

Re: [Plugin] Catlist

Если коротко, то функция sedby_catlist принимает следующие аргументы:

sedby_catlist
(
   $tpl,        // 01. имя шаблона (по умолчанию comlist)
   $items,      // 02. количество записей (0 – вывести все)
   $order,      // 03. сортировка в формате MySQL
   $extra,      // 04. дополнительные MySQL-запросы
   $offset,     // 05. сдвиг на указанное количество записей
   $pagination, // 06. код паджинации для URL'ов
   $ajax_block, // 07. ID блока для AJAX-паджинации
   $cache_name, // 08. имя записи в таблице кэша
   $cache_ttl   // 09. срок жизни кэша в секундах
)

Ограничить категории можно через аргумент 04 в SQL-формате, например:

{PHP|sedby_catlist('sections', '', 'structure_path ASC', structure_area = 'page')}

Так можно исключить форумные разделы. Или:

{PHP|sedby_catlist('sections', '', 'structure_path ASC', structure_code != 'system')}

для исключения раздела system.

Я часто использую и поле structure_tpl -- например, если надо вывести "магазинные" разделы, для которых применяется шаблон shop или catalog:

{PHP|sedby_catlist('sections', '', 'structure_path ASC', 'structure_tpl = "catalog"')}
Отредактировано: admin (25.08.2024 09:45, 3 недели назад)
Поблагодарили 128 раз Fornit Some Fornus
prostogorod
Аватар

Участник
Сообщения: 8

Re: [Plugin] Catlist
  • #3
  • 26.08.2024 02:06

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

{PHP|sedby_catlist('catlist', 36, 'structure_path ASC', 'structure_code = "3dprinting, vinnitsa"')}

 

Поблагодарили 1 раз
admin
Аватар

Администратор
Сообщения: 74

Re: [Plugin] Catlist
  • #4
  • 26.08.2024 09:28

Я в этом плагине (в отличие от Pagelist) не использовал функцию sedby_compilecats() – как-то не понадобилось. Со структурой возможны следующие варианты:

Глобальный плагин

В "проектном" плагине создаем (или используем уже созданную) часть с хуком global. В ней размещаем PHP-код, который формирует массивы и / или строковые переменные с необходимыми нам разделами. Плюс данные вносим в кэш. Примерно так:

<?php
/* ====================
[BEGIN_COT_EXT]
Hooks=global
[END_COT_EXT]
==================== */

defined('COT_CODE') or die('Wrong URL');

if ($cache && $cache->db->exists('tovary', 'shop')) {
	$tovary = $cache->db->get('tovary', 'shop');
	$tovary_str = $cache->db->get('tovary_str', 'shop');
	$tovary_str_cats = $cache->db->get('tovary_str_cats', 'shop');
	$net_tovarov = $cache->db->get('net_tovarov', 'shop');
	$net_tovarov_str = $cache->db->get('net_tovarov_str', 'shop');
} else {
	$res_phones = $db->query("SELECT structure_code FROM $db_structure 
          WHERE structure_path > '100' AND structure_path < '199' ORDER BY structure_path")->fetchAll(PDO::FETCH_COLUMN);
	$res_tablets = $db->query("SELECT structure_code FROM $db_structure 
          WHERE structure_path > '200' AND structure_path < '300' ORDER BY structure_path")->fetchAll(PDO::FETCH_COLUMN);

	$tovary = [
		"phones" => $res_phones,
		"tablets" => $res_tablets,
	];

	$tovary_str = [
		implode(';', $tovary['phones']),
		implode(';', $tovary['tablets']),
	];

	$tovary_str_cats = [
		'"'.implode('","', $tovary['phones']).'"',
		'"'.implode('","', $tovary['tablets']).'"',
	];

	$net_tovarov = $db->query("SELECT structure_code FROM $db_structure 
          WHERE structure_path > '700' ORDER BY structure_path")->fetchAll(PDO::FETCH_COLUMN);

	$net_tovarov_str = '"'.implode('","', $net_tovarov).'"';
	$net_tovarov_str_cats = '"'.implode('","', $net_tovarov).'"';

	$cache && $cache->db->store('tovary', $tovary, 'shop', 604800);
	$cache && $cache->db->store('tovary_str', $tovary_str, 'shop', 604800);
	$cache && $cache->db->store('tovary_str_cats', $tovary_str_cats, 'shop', 604800);
	$cache && $cache->db->store('net_tovarov', $net_tovarov, 'shop', 604800);
	$cache && $cache->db->store('net_tovarov_str', $net_tovarov_str, 'shop', 604800);
}

В результате у нас всегда под рукой кэшированные массивы и строки для необходимых разделов. Обычно я их использую не только с catlist. С ним же это работает так:

{PHP.tovary_str_cats|sedby_catlist('catlist', 36, 'structure_path ASC', 'structure_code IN $this')}

Обрати внимание на то, что в SQL-запросе строковые данные должны быть в кавычках.

Переменные в виде ресурсов в PHP-файле темы

Прмиерно то же самое, но попроще можно сделать во frontend-теме. В PHP-файле (например, nemesis.php) определим строковый ресурс:

$R['tovary_str_cats'] = '"phones", "tablets"';

А дальше уже просто:

{PHP.R.tovary_str_cats|sedby_catlist('catlist', 36, 'structure_path ASC', 'structure_code IN $this')}

Явное указание в TPL-шаблоне

Можно и просто:

{PHP|sedby_catlist('catlist', 36, 'structure_path ASC', 'structure_code IN ""phones", "tablets""')}

Кому как подходит.

P. S. Опять же, необязательно привязываться к коду или названию раздела если можно использовать путь. Например, если у тебя необходимые разделы имеют пути вида 100.1, 100.2, 100.3 и т. д., то можно просто использовать MySQL-условие LIKE:

{PHP|sedby_catlist('catlist', 36, 'structure_path ASC', 'structure_path LIKE "100.%"')}
Отредактировано: admin (26.08.2024 13:04, 3 недели назад)
Поблагодарили 128 раз Fornit Some Fornus
prostogorod
Аватар

Участник
Сообщения: 8

Re: [Plugin] Catlist
  • #5
  • 26.08.2024 14:29
{PHP|sedby_catlist('catlist', 36, 'structure_path ASC', 'structure_code IN ""phones", "tablets""')}

Это выдает ошибку Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '""belaya-tserkov", "berdyansk", "brovary", "vinnitsa", "dnepr", "donetsk"" ORDE' at line 1 in

Тут меня смущает, почему ORDE? Должно быть ORDER

Добавлено 1 минута спустя:

{PHP|sedby_catlist('catlist', 36, 'structure_path ASC', 'structure_path LIKE "100.%"')}

Это работает

Отредактировано: prostogorod (26.08.2024 14:44, 3 недели назад)
Поблагодарили 1 раз
admin
Аватар

Администратор
Сообщения: 74

Re: [Plugin] Catlist

Опечатка, конечно:

{PHP|sedby_catlist('catlist', '', 'structure_path ASC', 'structure_code IN ("phones", "tablets")')}

По поводу i18n -- обязательно сделаю. И для крошек надо не забыть)

Отредактировано: admin (28.08.2024 10:00, 2 недели назад)
Поблагодарили 128 раз Fornit Some Fornus
prostogorod
Аватар

Участник
Сообщения: 8

Re: [Plugin] Catlist
  • #7
  • 28.08.2024 13:01

Подскажите, пожалуйста, хотя бы теоретически, как добавить мультиязычность в плагин? 
Вернее даже перевести эту переменную 'PAGE_ROW_TITLE'=> $row['structure_title'].  Тег {PAGE_ROW_URL} корректно срабатывает при включенном плагине i18n.

Поблагодарили 1 раз
admin
Аватар

Администратор
Сообщения: 74

Re: [Plugin] Catlist
  • #8
  • 28.08.2024 17:19
#165 prostogorod:

Подскажите, пожалуйста, хотя бы теоретически, как добавить мультиязычность в плагин? 
Вернее даже перевести эту переменную 'PAGE_ROW_TITLE'=> $row['structure_title'].  Тег {PAGE_ROW_URL} корректно срабатывает при включенном плагине i18n.

Постараюсь сделать на этой неделе

Добавлено 1 день спустя:

Готово. Можно скачать и протестировать.

Отредактировано: admin (30.08.2024 12:25, 2 недели назад)
Поблагодарили 128 раз Fornit Some Fornus
prostogorod
Аватар

Участник
Сообщения: 8

Re: [Plugin] Catlist
#166 admin:

Постараюсь сделать на этой неделе

Добавлено 1 день спустя:

Готово. Можно скачать и протестировать.

Протестировал. Все отлично работает! Спасибо! Да, по поводу мультиязычное хлебных крошек не забудьте )) А еще мультиязычность в PageList - это must have плагины для Cotonti

Поблагодарили 1 раз
admin
Аватар

Администратор
Сообщения: 74

Re: [Plugin] Catlist

А Pagelist просто не работает или выдает ошибки? Последнюю версию из гитхаба я вчера исправил.

Добавлено 23 часа спустя:

Протестировал – Pagelist работает. А вот с крошками надо подумать.

Отредактировано: admin (01.09.2024 12:22, 2 недели назад)
Поблагодарили 128 раз Fornit Some Fornus
prostogorod
Аватар

Участник
Сообщения: 8

Re: [Plugin] Catlist
  • #11
  • 02.09.2024 15:42

Протестировал тоже Pagelist. Все отлично работает! Заметил в настройках плагинов, параметры: ключ шифрования и вектор исполнения. Подскажите, пожалуйста, для чего они нужны? Какое практическое применение?

Поблагодарили 1 раз
admin
Аватар

Администратор
Сообщения: 74

Re: [Plugin] Catlist
  • #12
  • 03.09.2024 08:01

При использовании AJAX-паджинации в URL залетают аргументы функции sedby_pagelist() (или соответствующей плагину). Это немного не красиво, поэтому при указании данных ключей URL будет шифроваться в хэш.

Поблагодарили 128 раз Fornit Some Fornus
Блок пользователя
Регистрация на нашем сайте позволит вам общаться на форумах и получить доступ к другому полезному функционалу
Вы вошли как Гость