MGHaze 2 Опубликовано: 26 мая 2018 Рассказать Опубликовано: 26 мая 2018 (изменено) Новость принадлежит нескольким категория и подкатегориям. Нужно вывести список только тех категорий, к которым принадлежит данная новость, но в тоже время либо исключить из списка ненужные, либо прописать нужные. Если быть конкретнее, то структура такая: Категория 1 Категория 2 Подкатегория 1 Подкатегория 2 Подкатегория 3 Подкатегория 4 Категория 3 Сама новость принадлежит Категории 1, Категории 2, Подкатегории 3, Подкатегории 4. Нужно вывести только ссылки на Подкатегорию 3, Подкатегорию 4. {link-category} выведет все категории {category} выведет все категории Есть какие-то варианты без правок движка? Изменено 26 мая 2018 пользователем MGHaze Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 081 Опубликовано: 26 мая 2018 Рассказать Опубликовано: 26 мая 2018 Нет, такой возможности в стандартном скрипте к сожалению нет. Нужно написание плагина для этого. Цитата Ссылка на сообщение Поделиться на других сайтах
MGHaze 2 Опубликовано: 26 мая 2018 Рассказать Опубликовано: 26 мая 2018 (изменено) Автор 13 минут назад, celsoft сказал: Нет, такой возможности в стандартном скрипте к сожалению нет. Нужно написание плагина для этого. Понял, спасибо. Подскажите попутно, если не сложно. У меня работает (вроде как) поиск новостей по конкретному значению конкретного допполя. Такой вид: {custom xfields="допполе|значение"} Либо я слепой, либо в документации описания данного функционала не нашел. Никаких подводных камней не будет? Это же официальный функционал? Но больше интересует, что он ищет? Именно строго заданное "значение" допполя, или будет находить новости и с допполями вроде "123 Значение 456", "Значение 123" и т.д.? Надеюсь, ясно выразился Изменено 26 мая 2018 пользователем MGHaze Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 081 Опубликовано: 26 мая 2018 Рассказать Опубликовано: 26 мая 2018 4 минуты назад, MGHaze сказал: вид: {custom xfields="допполе|значение"} Либо я слепой, либо в документации описания данного функционала не нашел. Никаких подводных камней не будет? Это же официальный функционал? В таком формате значения доп. полей хранится в БД, поэтому такая комбинация работает и будет работать. параметр xfields это поиск доп. полям, указав и название и значение поля, поиск будет только по этому полю. Если только значение то поиск по всем доп. полям у новости. 1 Цитата Ссылка на сообщение Поделиться на других сайтах
MGHaze 2 Опубликовано: 26 мая 2018 Рассказать Опубликовано: 26 мая 2018 Автор 3 минуты назад, celsoft сказал: В таком формате значения доп. полей хранится в БД, поэтому такая комбинация работает и будет работать. параметр xfields это поиск доп. полям, указав и название и значение поля, поиск будет только по этому полю. Если только значение то поиск по всем доп. полям у новости. Я там еще вопрос добавил. Гляньте, пожалуйста. Цитата Ссылка на сообщение Поделиться на других сайтах
Gameer 310 Опубликовано: 26 мая 2018 Рассказать Опубликовано: 26 мая 2018 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 1 Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 081 Опубликовано: 27 мая 2018 Рассказать Опубликовано: 27 мая 2018 11 часов назад, MGHaze сказал: Но больше интересует, что он ищет? Именно строго заданное "значение" допполя, или будет находить новости и с допполями вроде "123 Значение 456", "Значение 123" и т.д.? Надеюсь, ясно выразился Он ищет то, что указано в параметре xfields, в теге custom. При этом в БД значения храняться в формате имя поля|значение поля Цитата Ссылка на сообщение Поделиться на других сайтах
MGHaze 2 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 Автор В 27.05.2018 в 02:11, celsoft сказал: Он ищет то, что указано в параметре xfields, в теге custom. При этом в БД значения храняться в формате имя поля|значение поля Может подскажете, как тогда можно находить точные значения? К примеру есть допполе Цвет и 2 новости со значением Красный и Красный с синим. Мне нужно выводить через кастом только новость с полем "Красный". Как вариант, придумал такое выражение xfields="color|Красный| Но если это поле в базе последнее, то символа | не будет Придумал добавить допполе-костыль, которое будет пустым и в конце всех допполей. Более изящного способа нету? Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 081 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 3 часа назад, MGHaze сказал: Как вариант, придумал такое выражение xfields="color|Красный| Но если это поле в базе последнее, то символа | не будет Зачем вы вообще поставили | в конце? Это нелогично. Должно быть xfields="color|Красный". У вас же нет для поля с именем color другого значения например "КрасныйЗеленый" Цитата Ссылка на сообщение Поделиться на других сайтах
MGHaze 2 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 Автор 33 минуты назад, celsoft сказал: Зачем вы вообще поставили | в конце? Это нелогично. Должно быть xfields="color|Красный". У вас же нет для поля с именем color другого значения например "КрасныйЗеленый" Вот именно, что в перспективе может быть. Я же выше указал: 3 часа назад, MGHaze сказал: Красный с синим Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 081 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 1 минуту назад, MGHaze сказал: Вот именно, что в перспективе может быть. Я же выше указал В таком случае точного поиска именно в {custom ...} сделать не получиться. Цитата Ссылка на сообщение Поделиться на других сайтах
MGHaze 2 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 Автор 14 минут назад, celsoft сказал: В таком случае точного поиска именно в {custom ...} сделать не получиться. А почему такое выражение не подойдет? xfields="color|Красный| Символ | в допполе использоваться не будет точно Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 081 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 18 минут назад, MGHaze сказал: А почему такое выражение не подойдет? xfields="color|Красный| Потому что поле может одно в новости, или может быть последним. Цитата Ссылка на сообщение Поделиться на других сайтах
MGHaze 2 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 Автор 16 минут назад, celsoft сказал: Потому что поле может одно в новости, или может быть последним. Тоже про это писал выше: 4 часа назад, MGHaze сказал: Придумал добавить допполе-костыль, которое будет пустым и в конце всех допполей. Как понял, работать будет и других вариантов нет. Спасибо за ответы Цитата Ссылка на сообщение Поделиться на других сайтах
Gameer 310 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 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|Красный"} И никаких доп полей не надо в конце. 1 Цитата Ссылка на сообщение Поделиться на других сайтах
MGHaze 2 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 (изменено) Автор 2 часа назад, Gameer сказал: И никаких доп полей не надо в конце. Что-то не так. Первый кастом находит новости, второй - нет. Я несколько раз провожу поиск на странице через custom. Что-то вроде: {custom like_xfield="size|XL"} {custom like_xfield="color|Красный"} {custom like_xfield="type|С длинным рукавом"} Изменено 29 мая 2018 пользователем MGHaze Цитата Ссылка на сообщение Поделиться на других сайтах
MGHaze 2 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 Автор По-ходу что-то где-то сломал Разберусь - отпишусь) Цитата Ссылка на сообщение Поделиться на других сайтах
MGHaze 2 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 Автор Так и не разобрался, в чем было дело. Не искало в одной категории. И кеш чистил, и допполя в базе проверял, и все, что в голову пришло. Сейчас пересохранил новость, стала отображаться. Спасибо за модуль! Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.