[Plugin] Catlist
Главная / Форумы / Форумы сообщества / Расширения / [Plugin] Catlist
Автор | Сообщение |
---|---|
prostogorod
Участник |
[Plugin] Catlist
Подскажите, пожалуйста, как работает функция sedby_catlist? Вернее она работает и выводит категории, но не могу понять как ограничить вывод той или иной категории. Если можно с примерами. Спасибо! Добавлено 10 минут спустя: Да, еще увидел нет мультиязычности. Можно это добавить в функционал? Отредактировано: prostogorod (22.08.2024 13:35, 3 недели назад)
|
Поблагодарили 1 раз | |
admin
Администратор |
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 недели назад)
|
Поблагодарили 127 раз | Fornit Some Fornus |
prostogorod
Участник |
Re: [Plugin] Catlist
А как сделать множественное перечисление параметров. Пробовал через запятую и точку с запятой - ничего не выходит. {PHP|sedby_catlist('catlist', 36, 'structure_path ASC', 'structure_code = "3dprinting, vinnitsa"')}
|
Поблагодарили 1 раз | |
admin
Администратор |
Re: [Plugin] Catlist
Я в этом плагине (в отличие от Pagelist) не использовал функцию Глобальный плагинВ "проектном" плагине создаем (или используем уже созданную) часть с хуком 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, 2 недели назад)
|
Поблагодарили 127 раз | Fornit Some Fornus |
prostogorod
Участник |
Re: [Plugin] Catlist
{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, 2 недели назад)
|
Поблагодарили 1 раз | |
admin
Администратор |
Re: [Plugin] Catlist
Опечатка, конечно: {PHP|sedby_catlist('catlist', '', 'structure_path ASC', 'structure_code IN ("phones", "tablets")')} По поводу i18n -- обязательно сделаю. И для крошек надо не забыть) Отредактировано: admin (28.08.2024 10:00, 2 недели назад)
|
Поблагодарили 127 раз | Fornit Some Fornus |
prostogorod
Участник |
Re: [Plugin] Catlist
Подскажите, пожалуйста, хотя бы теоретически, как добавить мультиязычность в плагин? |
Поблагодарили 1 раз | |
admin
Администратор |
Re: [Plugin] Catlist
#165 prostogorod: Постараюсь сделать на этой неделе Добавлено 1 день спустя: Готово. Можно скачать и протестировать. Отредактировано: admin (30.08.2024 12:25, 2 недели назад)
|
Поблагодарили 127 раз | Fornit Some Fornus |
prostogorod
Участник |
Re: [Plugin] Catlist |
Поблагодарили 1 раз | |
admin
Администратор |
Re: [Plugin] Catlist
А Pagelist просто не работает или выдает ошибки? Последнюю версию из гитхаба я вчера исправил. Добавлено 23 часа спустя: Протестировал – Pagelist работает. А вот с крошками надо подумать. Отредактировано: admin (01.09.2024 12:22, 2 недели назад)
|
Поблагодарили 127 раз | Fornit Some Fornus |
prostogorod
Участник |
Re: [Plugin] Catlist
Протестировал тоже Pagelist. Все отлично работает! Заметил в настройках плагинов, параметры: ключ шифрования и вектор исполнения. Подскажите, пожалуйста, для чего они нужны? Какое практическое применение? |
Поблагодарили 1 раз | |
admin
Администратор |
Re: [Plugin] Catlist
При использовании AJAX-паджинации в URL залетают аргументы функции sedby_pagelist() (или соответствующей плагину). Это немного не красиво, поэтому при указании данных ключей URL будет шифроваться в хэш. |
Поблагодарили 127 раз | Fornit Some Fornus |