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