[Plugin] Catlist
Главная / Форумы / Форумы сообщества / Расширения / [Plugin] CatlistКак работает функция sedby_catlist?
| Автор | Сообщение |
|---|---|
|
admin
Администратор |
[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 год назад)
|
| Благодарности отсутствуют |