Перейти к публикации

Рекомендованные сообщения

Данный модуль работает на основе перекрёстных ссылок и при помощи шаблона выводит в нужном месте сгенерированный список.

Всё настраивается в шаблонах.

 

Модуль подключается в любом шаблоне при помощи инклуда:

[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('&#124;', $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(['&#039;', '&quot;', '&amp;', '&#123;', '&#91;', '&#58;'], ["'", '"', '&', '{', '[', ':'], $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&amp;xfname=".$xffield.'&amp;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>

 

Ссылка на сообщение
Поделиться на других сайтах
16 минут назад, Хоббит сказал:

Для чего такой плагин? 

для генерации списков. допустим, чтобы вывести всех доступных производителей запчастей в определённой части сайта. Я когда-то делал его для одного киносайта, для фильтрации.

Ссылка на сообщение
Поделиться на других сайтах

Обновил до 1.1.0, полностью переписал запрос, чтобы охватить все используемые доп. поля

https://devcraft.club/downloads/xf-list-generator.19/download

Версия 1.1.0
Добавлены новые теги для формирования вывода

  • cat - Перечень категорий через запятую (,) из которых должны формироваться списки
  • news_id - Перечень новостей через запятую (,) из которых должны формироваться списки


Добавлены новые теги для шаблонов

  • {count} - Выводит общее количество использования доп. поля (пока тестируется)

 

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...