MaHarder 20 Опубликовано: 18 марта 2021 Рассказать Опубликовано: 18 марта 2021 Данный модуль работает на основе перекрёстных ссылок и при помощи шаблона выводит в нужном месте сгенерированный список. Всё настраивается в шаблонах. Модуль подключается в любом шаблоне при помощи инклуда: [CODE=html]{include file="engine/modules/xf_list_gen.php?xffield=X&template=X&&limit=X&skip=X&sort=X"}[/CODE] Обязательные теги: xffield - Название доп. поля template - Название шаблона с окончанием Дополнительные теги: limit - Ограничивает вывод записей в списке, принимает только числа. По умолчанию: пусто skip - Пропускает заданное число записей, принимает только числа. По умолчанию: пусто sort - Сортировка списка, по умолчанию или по убыванию. Принимает только ASC и DESC. По умолчанию: ASC Возможные теги в вашем шаблоне: {link} - Выводит ссылку на доп. поле, если имеется (хотя да...) {name} - Название доп. поля {value} - Значение доп. поля {max_value} - Максимально возможное значение, сделано для вывода чисел {min_value} - Минимально возможное значение, сделано для вывода чисел Скачать: https://devcraft.club/downloads/xf-list-generator.19/ Или файл плагина <?xml version="1.0" encoding="utf-8"?> <dleplugin> <name>Xfield List Generator</name> <description>Создаёт списки доп. полей на основе шаблона.</description> <icon></icon> <version>1</version> <dleversion>13</dleversion> <versioncompare>greater</versioncompare> <upgradeurl></upgradeurl> <filedelete>0</filedelete> <needplugin></needplugin> <mnotice>0</mnotice> <mysqlinstall><![CDATA[]]></mysqlinstall> <mysqlupgrade><![CDATA[]]></mysqlupgrade> <mysqlenable><![CDATA[]]></mysqlenable> <mysqldisable><![CDATA[]]></mysqldisable> <mysqldelete><![CDATA[]]></mysqldelete> <phpinstall><![CDATA[]]></phpinstall> <phpupgrade><![CDATA[]]></phpupgrade> <phpenable><![CDATA[]]></phpenable> <phpdisable><![CDATA[]]></phpdisable> <phpdelete><![CDATA[]]></phpdelete> <notice><![CDATA[]]></notice> <file name="engine/modules/xf_list_gen.php"> <operation action="create"> <replacecode><![CDATA[<?php /** * @author: Maxim Harder * @link: https://devcraft.club * @description: Автоматический генератор списков для вывода доп. полей * */ if (!defined('DATALIFEENGINE')) { die('see ya.'); } if( empty($template) && empty($xffield)) return false; $limit = (isset($limit) && (int)$limit) ? " LIMIT {$limit}" : ''; $skip = (isset($skip) && (int)$skip) ? " OFFSET {$skip}" : ''; $steps = $limit + $skip; $cprefix = "xf_gen_".$xffield; $db_prefix = PREFIX; $sort = (isset($sort) && in_array($sort, ['asc', 'desc', 'ASC', 'DESC'])) ? $sort : 'ASC'; $sql_field = "SELECT tagvalue FROM {$db_prefix}_xfsearch WHERE tagname = '{$xffield}' ORDER BY tagvalue {$sort}{$limit}{$skip}"; $cache_name = "{$sql_field}_{$template}_{$limit}_{$skip}"; $gen = dle_cache ( $cprefix, $cache_name ); if( $gen ) { echo $gen; } else { if (!function_exists('get_min_max')) { function get_min_max(array $values, string $type) { if ('min' == $type) { return min(array_diff(array_map('intval', $values), [0])); } return max(array_diff(array_map('intval', $values), [0])); } } if (!function_exists('gen_xfields')) { function gen_xfields() { global $config; $xf_list = []; $handle = @fopen(ENGINE_DIR.'/data/xfields.txt', 'r'); if ($handle) { while (($buffer = fgets($handle, 4096)) !== false) { $buf_split = explode('|', $buffer); $xf_list[$buf_split[0]] = [ 'name' => $buf_split[0], 'value' => $buf_split[1], 'type' => $buf_split[3], 'splitter' => empty($buf_split[21]) ? ', ' : $buf_split[21], 'search' => (1 === $buf_split[6]) ? true : false, 'default' => [], ]; if ('select' == $buf_split[3]) { $default_values = explode('__NEWL__', $buf_split[4]); foreach ($default_values as $val) { $vals = explode('|', $val); $xf_list[$buf_split[0]]['default'][$vals[0]] = $vals[1]; } } } fclose($handle); } return $xf_list; } } $db->query( $sql_field ); $gen_tpl = new dle_template(); $gen_tpl->dir = TEMPLATE_DIR; $gen_tpl->load_template( $template ); $xffields = gen_xfields(); $xf_chosen = $xffields[$xffield]; $all_xfs = array(); $min_max_value = []; $l = 0; while($gen = $db->get_row()) { $l++; if (!in_array($gen['tagvalue'], $all_xfs)) { if ('select' == $xf_chosen['type']) { $value = $xffields[$xffield]['default'][$gen['tagvalue']]; } else { $value = $gen['tagvalue']; } $link = ''; if ($xffields[$xffield]['search']) { $url_val = str_replace([''', '"', '&', '{', '[', ':'], ["'", '"', '&', '{', '[', ':'], $value); if ($config['allow_alt_url']) { $link = '<a href="'.$config['http_home_url'].'xfsearch/'.$xffield.'/'.rawurlencode($url_val).'/">'.$value.'</a>'; } else { $link = "<a href=\"{$PHP_SELF}?do=xfsearch&xfname=".$xffield.'&xf='.rawurlencode($url_val).'">'.$value.'</a>'; } } if ((int) $gen['tagvalue']) $min_max_value[] = (int) $gen['tagvalue']; $gen_tpl->set('{link}', $link); $gen_tpl->set('{name}', $value); $gen_tpl->set('{value}', $gen['tagvalue']); $gen_tpl->set('{max_value}', get_min_max($min_max_value, 'max')); $gen_tpl->set('{min_value}', get_min_max($min_max_value, 'min')); $gen_tpl->set('{count}', (int) $l); $gen_tpl->compile('gen_item'); $all_xfs[] = $gen['tagvalue']; } } echo $gen_tpl->result['gen_item']; create_cache ( $cprefix, $gen_tpl->result['gen_item'], $cache_name ); $gen_tpl->clear(); unset($gen_tpl); $db->free(); } ]]></replacecode> </operation> </file> </dleplugin> 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Хоббит 35 Опубликовано: 18 марта 2021 Рассказать Опубликовано: 18 марта 2021 Для чего такой плагин? Цитата Ссылка на сообщение Поделиться на других сайтах
MaHarder 20 Опубликовано: 18 марта 2021 Рассказать Опубликовано: 18 марта 2021 Автор 16 минут назад, Хоббит сказал: Для чего такой плагин? для генерации списков. допустим, чтобы вывести всех доступных производителей запчастей в определённой части сайта. Я когда-то делал его для одного киносайта, для фильтрации. Цитата Ссылка на сообщение Поделиться на других сайтах
MaHarder 20 Опубликовано: 23 марта 2021 Рассказать Опубликовано: 23 марта 2021 Автор Обновил до 1.1.0, полностью переписал запрос, чтобы охватить все используемые доп. поля https://devcraft.club/downloads/xf-list-generator.19/download Версия 1.1.0 Добавлены новые теги для формирования вывода cat - Перечень категорий через запятую (,) из которых должны формироваться списки news_id - Перечень новостей через запятую (,) из которых должны формироваться списки Добавлены новые теги для шаблонов {count} - Выводит общее количество использования доп. поля (пока тестируется) Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.