Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Стол заказов » Сделать хак xfsearch по категории

Сделать хак xfsearch по категории


 Сложный    06.08.2021    Стол заказов    1002    10 комментариев

Xfsearch по категории

Задача
Сделать поиск xfsearch по категории

/xfsearch/povyshenie-kvalifikacii/Повышение%20квалификации/
Он ищет во всех категориях

Нужно:

/КАТЕГОРИЯ/xfsearch/povyshenie-kvalifikacii/Повышение%20квалификации/
Что бы он искал в выбранных категориях

Как я это вижу
человек выбирает категорию, далее нажимает на Повышение квалификации
или Профессиональная переподготовка
и ему показывает список xfsearch из выбраной категории

10 комментариев

doom45
Юзер

doom45 - 6 августа 2021 19:28 -

А почему не использовать DLE Filter?

Сложный
Юзер

Сложный - 8 августа 2021 18:05 -

doom45,
Здравствуй, я не хочу набивать модами движок, по счету нужно только одно и за этого покупать модуль, устанавливать, тратить время, а если такую функцию мод не предоставляет это выбрасыванье средств
(так-то можно будет все скупить смотреть, а смысла не будет только деньги тратишь на ненужные модули)
По этому если кто знает как это сделать, напишут, а по сумме договоримся.
По итогу даже когда после того как сделают-заплачу, все равно выложу сюда скрипт.

dj-avtosh
PHP-developer

dj-avtosh - 8 августа 2021 19:43 -

в engine.php

найти:

if ( $xfname ) {


вставить выше:


			if (!$category_id) $category_id = 'not detected';
			
			if ($allow_list[0] != "all") {
				if (!$user_group[$member_id['user_group']]['allow_short'] AND !in_array( $category_id, $allow_list )) $category_id = 'not detected';
			}

			if ($not_allow_cats[0] != "") {
				if (!$user_group[$member_id['user_group']]['allow_short'] AND in_array( $category_id, $not_allow_cats )) $category_id = 'not detected';
			}

			if ( $cat_info[$category_id]['show_sub'] ) {

				if ( $cat_info[$category_id]['show_sub'] == 1 ) $get_cats = get_sub_cats ( $category_id );
				else { $get_cats = $category_id; $allow_sub_cats = false; }

			} else {

				if ( $config['show_sub_cats'] ) $get_cats = get_sub_cats ( $category_id );
				else { $get_cats = $category_id; $allow_sub_cats = false; }

			}

			if ($config['allow_multi_category']) {
		
				$get_cats = str_replace ( "|", "','", $get_cats );
				$join_category = "INNER JOIN (SELECT DISTINCT(" . PREFIX . "_post_extras_cats.news_id) FROM " . PREFIX . "_post_extras_cats WHERE cat_id IN ('" . $get_cats . "')) c ON (p.id=c.news_id) ";
				$where_category = "";
				
			} else {
				
				if ( $allow_sub_cats ) {
					
					$get_cats = str_replace ( "|", "','", $get_cats );
					$where_category = "category IN ('" . $get_cats . "') AND ";
				
				} else {
					
					$where_category = "category = '{$get_cats}' AND ";
				
				}
				
				$join_category = "";
			
			}


По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 8 августа 2021 19:50 -

в engine.php найти:

xf.tagvalue='{$xf}' AND p.approve=1

заменить на

xf.tagvalue='{$xf}' AND {$where_category}  p.approve=1


найти:

xfields LIKE '%{$xf}%' AND approve=1" . $where_date . "


заменить на:

xfields LIKE '%{$xf}%' AND {$where_category} approve=1" . $where_date . "


найти:

INNER JOIN " . PREFIX . "_xfsearch xf on


заменить на:

{$join_category} INNER JOIN " . PREFIX . "_xfsearch xf on


найти:

{$cat_join}LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}xfields


заменить на:

{$join_category} {$cat_join}LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}xfields


найти:

$sql_count  = "SELECT COUNT(*) as count FROM " . PREFIX . "_post p {$join_category} INNER JOIN " . PREFIX . "_xfsearch xf on (xf.news_id=p.id) {$cat_join}WHERE {$stop_list}xf.tagname = '{$xfname}' AND xf.tagvalue='{$xf}' AND approve=1" . $where_date;

заменить на

$sql_count  = "SELECT COUNT(*) as count FROM " . PREFIX . "_post p INNER JOIN " . PREFIX . "_xfsearch xf on (xf.news_id=p.id) {$join_category} {$cat_join}WHERE {$stop_list}xf.tagname = '{$xfname}' AND xf.tagvalue='{$xf}' AND approve=1" . $where_date;



найти:

{$cat_join_count}WHERE {$stop_list}xfields


заменить на:

p {$join_category} {$cat_join_count}WHERE {$stop_list}xfields


По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 8 августа 2021 19:52 -

в .htaccess

найти:

RewriteRule ^xfsearch/(.*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$2 [B,L]


ниже вставить:

RewriteRule ^(.*)/xfsearch/(.*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$2&cstart=$3&category=$1 [B,L]
RewriteRule ^(.*)/xfsearch/(.*)(/?)+$ index.php?do=xfsearch&xf=$2&category=$1 [L]


не тестировал!

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Сложный
Юзер

Сложный - 9 августа 2021 13:41 -

Вроде работает если что какие баги дам знать. Остальное в личке.

Сложный
Юзер

Сложный - 9 августа 2021 23:07 -


Нашел такой баг.
Если начинаю искать, на пример "Профессиональная переподготовка" находит 50штук (указано в настройках dle вывод количество новостей в поиске) то далее 50 ш начинается вечная загрузка.
как это устранить ?

Сложный
Юзер

Сложный - 10 августа 2021 00:14 -

Разобрался сам
в engine/engine.php
Найти:

$url_page = $config['http_home_url'] . "xfsearch/{$xfname}/" . rawurlencode ( str_replace(array("'", """, "&", "{", "[", ":"), array("'", '"', "&", "{", "[", ":"), $xf) );

Заменить на:

$url_page = $config['http_home_url'] . $cat_info[$category_id]['alt_name'] . "/xfsearch/{$xfname}/" . rawurlencode ( str_replace(array("'", """, "&", "{", "[", ":"), array("'", '"', "&", "{", "[", ":"), $xf) );

Kdimav
Юзер

Kdimav - 17 марта 2022 12:47 -

Может кто-то под 15.1 поправить? Готов заплатить.

Сложный
Юзер

Сложный - 20 июня 2022 00:47 -

А что там исправлять то ? у меня есть предположение
Имя файла: engine/classes/parse.class.php
Найти
class ParseFilter {

и добавить выше
include_once DLEPlugins::Check(ENGINE_DIR . '/classes/htmlpurifier/HTMLPurifier.standalone.php');

Чтобы комментировать - войдите или зарегистрируйтесь на сайте
наверх