CMS DataLife Engine - Система управления сайтами

Sign in to follow this  
Nektov

По-умолчанию поиск в названиях, а не текстах новостей?

Recommended Posts

Всем здрасте :)

С названия темы суть вопроса понятна, но, на всякий случай уточню

Как настроить, какие файлы править, чтобы поиск по сайту по-умолчанию искал в названиях новостей, а не в текстах?

 

Всем, кто поможет, заранее спасибо

сайт - ThePrayerBook.info

Share this post


Link to post
Share on other sites

/engine/modules/search.php найти

if( preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $searchuser ) ) $searchuser="";

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

$titleonly = 3;

 

  • Like 1

Share this post


Link to post
Share on other sites
13 минут назад, Gameer сказал:

/engine/modules/search.php найти


if( preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $searchuser ) ) $searchuser="";

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


$titleonly = 3;

 

Не совсем то, что нужно

Теперь ищет только в названиях :huh:

При расширенном поиске игнорирует выбор

Share this post


Link to post
Share on other sites
37 минут назад, Nektov сказал:

Не совсем то, что нужно

Теперь ищет только в названиях :huh:

При расширенном поиске игнорирует выбор

Вместо

$titleonly = 3;

Вставить

if ($titleonly == 0) {
    $titleonly = 3;
}

 

Share this post


Link to post
Share on other sites
В 19.05.2019 в 19:32, Gameer сказал:

Вместо


$titleonly = 3;

Вставить


if ($titleonly == 0) {
    $titleonly = 3;
}

Та же ситуация, ищет только в названиях. При расширенном поиске игнорирует выбор

Share this post


Link to post
Share on other sites

Привет, Nektov!

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

Правим файл /engine/ajax/search.php  (ориентировочно, строка 101)

У меня ищет только по title.

В оригинале ищет по short_story и далее (short_story, full_story, xfields, title), т.е. title в оригинале на последнем месте.


 

// Было:
// $db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id)  WHERE p.approve=1 AND e.disable_search=0".$this_date.$where_category." AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%') ORDER by date DESC LIMIT 5");


// Стало:
$db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id)  WHERE p.approve=1 AND e.disable_search=0".$this_date.$where_category." AND (title LIKE '%{$query}%') ORDER by title ASC LIMIT 10");

// LIMIT 10 - сколько выводить вариантов в быстром поиске.
// ORDER by title ASC - сортировать по названию статьи от А до Я - настройка сортировки, можно совсем удалить.

 

При проверке работы не забывайте чистить кэш в админке и кэш браузера (CTRL+F5).


Ну и конечно же, в новой версии DLE, эту правку удобнее оформить в виде плагина в админке.

 

Edited by Datagor
Правка кода

Share this post


Link to post
Share on other sites
13.06.2019 в 11:24, Datagor сказал:

(short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%')

Я так понял изначальное условие в этом куске кода?

И если поменять местами short_story и title, то вначале (по умолчанию) будет искать по названию, а потом уже, при выборе, по тексту короткой новости?

Edited by Nektov

Share this post


Link to post
Share on other sites
2 hours ago, Nektov said:

И если поменять местами short_story и title, то вначале (по умолчанию) будет искать по названию, а потом уж

Не уверен, попробуйте ваши варианты и сравните результаты. Не забывайте чистить кэш в админке.

 

Вот плагин, что работает у меня:

https://yadi.sk/d/xzga0OFB0unIgw

 

<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
	<name>PL19 Быстрый поиск только по заголовкам статей</name>
	<description>Меняя запрос можно изменить места поиска</description>
	<icon></icon>
	<version>1.1</version>
	<dleversion>13</dleversion>
	<versioncompare>greater</versioncompare>
	<upgradeurl></upgradeurl>
	<filedelete>0</filedelete>
	<needplugin></needplugin>
	<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>
	<file name="engine/ajax/search.php">
		<operation action="replace">
			<searchcode><![CDATA[$db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id)  WHERE p.approve=1 AND e.disable_search=0".$this_date.$where_category." AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%') ORDER by date DESC LIMIT 5");]]></searchcode>
			<replacecode><![CDATA[$db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id)  WHERE p.approve=1 AND e.disable_search=0".$this_date.$where_category." AND (title LIKE '%{$query}%') LIMIT 10");]]></replacecode>
		</operation>
	</file>
</dleplugin>

 

Edited by Datagor

Share this post


Link to post
Share on other sites
13.06.2019 в 11:24, Datagor сказал:

Правим файл /engine/ajax/search.php  (ориентировочно, строка 101)

У меня ищет только по title.

Увы но не работает 

Share this post


Link to post
Share on other sites
26 минут назад, Nektov сказал:

Увы но не работает 

/engine/modules/search.php найти

if( preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $searchuser ) ) $searchuser="";

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

if (!isset($_REQUEST['titleonly'])) {
   $titleonly = 3;
}

 

  • Thanks 1

Share this post


Link to post
Share on other sites
22 часа назад, Gameer сказал:

/engine/modules/search.php найти


if( preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $searchuser ) ) $searchuser="";

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


if (!isset($_REQUEST['titleonly'])) {
   $titleonly = 3;
}

 

Есть, получилось 😀

Спасибо большое 🍺

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this