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

Вывод списка определенных категорий


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

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

 

Если быть конкретнее, то структура такая:

  • Категория 1
  • Категория 2
    • Подкатегория 1
    • Подкатегория 2
    • Подкатегория 3
    • Подкатегория 4
  • Категория 3

Сама новость принадлежит Категории 1, Категории 2, Подкатегории 3, Подкатегории 4. Нужно вывести только ссылки на Подкатегорию 3, Подкатегорию 4.

 

{link-category} выведет все категории

{category} выведет все категории

 

Есть какие-то варианты без правок движка?

Изменено пользователем MGHaze
Ссылка на сообщение
Поделиться на других сайтах

Нет, такой возможности в стандартном скрипте к сожалению нет. Нужно написание плагина для этого.

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

Нет, такой возможности в стандартном скрипте к сожалению нет. Нужно написание плагина для этого.

Понял, спасибо. Подскажите попутно, если не сложно. У меня работает (вроде как) поиск новостей по конкретному значению конкретного допполя. Такой вид: {custom xfields="допполе|значение"}

Либо я слепой, либо в документации описания данного функционала не нашел. Никаких подводных камней не будет? Это же официальный функционал?

 

Но больше интересует, что он ищет? Именно строго заданное "значение" допполя, или будет находить новости и с допполями вроде "123 Значение 456", "Значение 123" и т.д.? Надеюсь, ясно выразился :D

Изменено пользователем MGHaze
Ссылка на сообщение
Поделиться на других сайтах
4 минуты назад, MGHaze сказал:

вид: {custom xfields="допполе|значение"}

Либо я слепой, либо в документации описания данного функционала не нашел. Никаких подводных камней не будет? Это же официальный функционал?

В таком формате значения доп. полей хранится в БД, поэтому такая комбинация работает и будет работать. параметр xfields это поиск доп. полям, указав и название и значение поля, поиск будет только по этому полю. Если только значение то поиск по всем доп. полям у новости.

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

В таком формате значения доп. полей хранится в БД, поэтому такая комбинация работает и будет работать. параметр xfields это поиск доп. полям, указав и название и значение поля, поиск будет только по этому полю. Если только значение то поиск по всем доп. полям у новости.

Я там еще вопрос добавил. Гляньте, пожалуйста.

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

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

 

Если быть конкретнее, то структура такая:

  • Категория 1
  • Категория 2
    • Подкатегория 1
    • Подкатегория 2
    • Подкатегория 3
    • Подкатегория 4
  • Категория 3

Сама новость принадлежит Категории 1, Категории 2, Подкатегории 3, Подкатегории 4. Нужно вывести только ссылки на Подкатегорию 3, Подкатегорию 4.

 

{link-category} выведет все категории

{category} выведет все категории

 

Есть какие-то варианты без правок движка?

Посмотрите в сторону этого хака https://punpun.name/blog/17-cat.html

Ссылка на сообщение
Поделиться на других сайтах
11 часов назад, MGHaze сказал:

Но больше интересует, что он ищет? Именно строго заданное "значение" допполя, или будет находить новости и с допполями вроде "123 Значение 456", "Значение 123" и т.д.? Надеюсь, ясно выразился

Он ищет то, что указано в параметре xfields, в теге custom. При этом в БД значения храняться в формате имя поля|значение поля

Ссылка на сообщение
Поделиться на других сайтах
В 27.05.2018 в 02:11, celsoft сказал:

Он ищет то, что указано в параметре xfields, в теге custom. При этом в БД значения храняться в формате имя поля|значение поля

Может подскажете, как тогда можно находить точные значения? К примеру есть допполе Цвет и 2 новости со значением Красный и Красный с синим. Мне нужно выводить через кастом только новость с полем "Красный".

Как вариант, придумал такое выражение xfields="color|Красный| Но если это поле в базе последнее, то символа | не будет

Придумал добавить допполе-костыль, которое будет пустым и в конце всех допполей. Более изящного способа нету?

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

Как вариант, придумал такое выражение xfields="color|Красный| Но если это поле в базе последнее, то символа | не будет

Зачем вы вообще поставили | в конце? Это нелогично. Должно быть xfields="color|Красный". У вас же нет для поля с именем color другого значения например "КрасныйЗеленый"

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

Зачем вы вообще поставили | в конце? Это нелогично. Должно быть xfields="color|Красный". У вас же нет для поля с именем color другого значения например "КрасныйЗеленый"

Вот именно, что в перспективе может быть. Я же выше указал:

3 часа назад, MGHaze сказал:

Красный с синим

 

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

Вот именно, что в перспективе может быть. Я же выше указал

В таком случае точного поиска именно в {custom ...} сделать не получиться.

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

В таком случае точного поиска именно в {custom ...} сделать не получиться.

А почему такое выражение не подойдет?  xfields="color|Красный|

Символ | в допполе использоваться не будет точно

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

А почему такое выражение не подойдет?  xfields="color|Красный|

Потому что поле может одно в новости, или может быть последним.

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

Потому что поле может одно в новости, или может быть последним.

Тоже про это писал выше:

4 часа назад, MGHaze сказал:

Придумал добавить допполе-костыль, которое будет пустым и в конце всех допполей.

Как понял, работать будет и других вариантов нет. Спасибо за ответы

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

Тоже про это писал выше:

Как понял, работать будет и других вариантов нет. Спасибо за ответы

Если у вас DLE 13.0 используйте этот плагин

<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
	<name>Xfield Custom Search</name>
	<description></description>
	<icon></icon>
	<version></version>
	<dleversion>13</dleversion>
	<versioncompare>greater</versioncompare>
	<mysqlinstall><![CDATA[]]></mysqlinstall>
	<mysqlupgrade><![CDATA[]]></mysqlupgrade>
	<mysqlenable><![CDATA[]]></mysqlenable>
	<mysqldisable><![CDATA[]]></mysqldisable>
	<mysqldelete><![CDATA[]]></mysqldelete>
	<file name="engine/modules/functions.php">
		<operation action="before">
			<searchcode><![CDATA[if( preg_match( "#navigation=['\"](.+?)['\"]#i", $param_str, $match ) ) {]]></searchcode>
			<replacecode><![CDATA[if (preg_match("#like_xfield=['\"](.+?)['\"]#i", $param_str, $match)) {
    if (substr_count('||', $match[1]) > 1) {
		$temp_array = [];
        $field = explode ('||', $match[1]);
        $xf_where = [];
        for ($i = 0; $i < count($field); $i++) {
            $temp_array = explode('|', $field[$i]);
			if ($temp_array[0] && $temp_array[1]) {
				$key = $db->safesql(trim(strip_tags($temp_array[0])));
				$value = $db->safesql(trim(strip_tags($temp_array[1])));
				$xf_where[] = "SUBSTRING_INDEX(SUBSTRING_INDEX(xfields, '{$key}|', -1), '||', 1) LIKE '{$value}'";
			}
        }
		if ($xf_where) {
			$xf_where = implode (' AND ', $xf_where);
		}
    } else {   
        $temp_array = explode('|', $match[1]);
		$key = $db->safesql(trim(strip_tags($temp_array[0])));
		$value = $db->safesql(trim(strip_tags($temp_array[1])));
        $xf_where = "SUBSTRING_INDEX(SUBSTRING_INDEX(xfields, '{$key}|', -1), '||', 1) LIKE '{$value}'";
    }
	if ($xf_where) {
		$where[] = $xf_where;
	}
}]]></replacecode>
		</operation>
	</file>
</dleplugin>

В custom пишете так

{custom like_xfield="color|Красный"}

И никаких доп полей не надо в конце.

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

И никаких доп полей не надо в конце.

Что-то не так. Первый кастом находит новости, второй - нет. Я несколько раз провожу поиск на странице через custom. Что-то вроде:

{custom like_xfield="size|XL"}

{custom like_xfield="color|Красный"}

{custom like_xfield="type|С длинным рукавом"}

Изменено пользователем MGHaze
Ссылка на сообщение
Поделиться на других сайтах

Так и не разобрался, в чем было дело. Не искало в одной категории. И кеш чистил, и допполя в базе проверял, и все, что в голову пришло. Сейчас пересохранил новость, стала отображаться. Спасибо за модуль!

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

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

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

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

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

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

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

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

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

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