Поиск не работает с первого запроса
20.01.2026 06:07:55 pm
На сайте есть система поиска, чьё предназначение находить нужные записи потребителя контента. Есть два варианта поиска:
С первым проблем нет. Со вторым же заметил проблему: Поиск не работает по первому запросу. После первой отправки формы для строки запроса визуально ни чего не происходи. В адресной строке появляется параметр
Покопавшись, понял, что виновник в файле: "include/library/phpfox/search/search.class.php", а именно метод:
Я временно (Скорее на постоянно) заменил:
На:
И после этого поиск работает с первого обращения. Но, подозреваю, что глюк ещё может проявить себя (Буду наблюдать).
Хочу обратить ваше внимание, что код в моих файлах уже переписан много раз и может отличаться от вашего. Например, в представленном мной коде присутствует:
Этого кода нет с пакета движка. Я его добавил сам, чтобы в заголовке отображалось, что отображены найденные записи.
- Общий поиск: Ищет по всему сайту, все записи, по всем модулям.
- "Внутримодульный" поиск: Ищет исключительно по записям, в котором находишься в данный момент. Например, Фото, Видео, Статьи и так далее.
С первым проблем нет. Со вторым же заметил проблему: Поиск не работает по первому запросу. После первой отправки формы для строки запроса визуально ни чего не происходи. В адресной строке появляется параметр
search-id с уникальным значением, но поиск нужных записей не запущен... Поиск активен после второго запроса.Покопавшись, понял, что виновник в файле: "include/library/phpfox/search/search.class.php", а именно метод:
isSearch(), почему то он возвращает true только со второго раза.Я временно (Скорее на постоянно) заменил:
ВыделитьPHP
if ($this->req->get('search-id') && isset($this->searchTool['search']) && $this->isSearch())
{
$this->searchTool['search']['actual_value'] = $this->get($this->searchTool['search']['name']);
if (!empty($this->searchTool['search']['actual_value']) && ($this->searchTool['search']['actual_value'] != $this->searchTool['search']['default_value']))
{
$this->setCondition('AND (' . phpfox::getLib('database')->searchKeywords($this->searchTool['search']['field'], $this->searchTool['search']['actual_value']) . ')');
phpfox::getLib('template')->setTitle(phpfox::getPhrase('search.search') . ': "' . $this->searchTool['search']['actual_value'] . '"');
}
}На:
ВыделитьPHP
// Поисковая система по отдельным записям
$actualValue = $this->get($this->searchTool['search']['name']);
$actualValue = is_string($actualValue) ? trim($actualValue) : '';
$hasValidQuery = ($actualValue !== '' && $actualValue !== $this->searchTool['search']['default_value']);
if ($this->req->get('search-id') && !$hasValidQuery)
{
phpfox_error::set(phpfox::getPhrase('search.provide_a_search_query'));
}
else if ($this->req->get('search-id') && $hasValidQuery)
{
$this->setCondition('AND (' . phpfox::getLib('database')->searchKeywords(
$this->searchTool['search']['field'],
$actualValue
) . ')');
phpfox::getLib('template')->setTitle(
phpfox::getPhrase('search.search') . ': "' . $actualValue . '"'
);
} // End: Поисковая система по отдельным записямИ после этого поиск работает с первого обращения. Но, подозреваю, что глюк ещё может проявить себя (Буду наблюдать).
Хочу обратить ваше внимание, что код в моих файлах уже переписан много раз и может отличаться от вашего. Например, в представленном мной коде присутствует:
ВыделитьPHP
phpfox::getLib('template')->setTitle(
phpfox::getPhrase('search.search') . ': "' . $actualValue . '"'
);Этого кода нет с пакета движка. Я его добавил сам, чтобы в заголовке отображалось, что отображены найденные записи.
- Жалоба
