Добавление родного поиска на сайте :)
18
UPD 4
Так как мой приветственный топик об открытии сайта заминусовали :) — пишу в своём блоге :)
Короче — сижу сегодня жду пока отмокнут джинсы, которые я наконец-то собрался постирать и вдруг решил добавить нативный поиск по сайту на базе LS :)
Что из этого получилось можно посмотреть на
А реализовано это функцией которая представляет собой небольшую модификацую функции поиска по тегам :)
Поиск осуществляется по теме и тексту топика банальным
Итак для установки потребуется:
самым важным шагом является загрузка картинки для поиска :)
1. в templates\skin\habra\img\ загружаем search.gif

2. в templates\skin\habra\header.tpl
найти закомментированное место формы поиска и туда вставить
3. далее в templates\skin\habra\js\main.js
добавить фукцию
наблюдательный глаз сразу заметит, что это модификация
далее я даже не стал переименовывать переменную sTag :)
идём далее:
4. добавляем новую регистрацию в config\config.route.php
для этого в
5. создаём в classes\actions\ файл ActionSearch.class.php
тут нужно ещё добавить какую-то фильтрацию?
6. в templates\skin\habra\actions\ создаём директорию ActionSearch а уже внутри неё файл index.tpl
7. модифицируем classes\modules\topic\Topic.class.php
добавляем функцию
8. и соответственно редактируем classes\modules\topic\mapper\Topic.mapper.class.php
Всё :)
Вроде ничего не забыл :)
PS если вас заинтересовала судьба джинсов — они постираны и сейчас сохнут на балконе :)))
UPD
вот архив с файлами
однако, я использовал дистрибутив не из svn-на, а скачивал с sf, так что лучше всё же просто добавить нужные функции в файлы вашего проекта.
из проблем с поиском — в настоящее время почему-то не формируются страницы найденного — всё найденное выводится на одной странице :(
UPD 2 проблема c постраничным выводом результатов поиска решается
так же при попытке перехода на следующую страницу выпадало предупреждение в отсутствии searchfor
убираем предупреждение так :))
как только эту проблему решу — сразу дам знать :)
UPD 3 адаптация поиска к 0.3
UPD 4
Так как мой приветственный топик об открытии сайта заминусовали :) — пишу в своём блоге :)
Короче — сижу сегодня жду пока отмокнут джинсы, которые я наконец-то собрался постирать и вдруг решил добавить нативный поиск по сайту на базе LS :)
Что из этого получилось можно посмотреть на
А реализовано это функцией которая представляет собой небольшую модификацую функции поиска по тегам :)
Поиск осуществляется по теме и тексту топика банальным
LOWER(topic_text) LIKE LOWER('%{$sTag}%')Итак для установки потребуется:
самым важным шагом является загрузка картинки для поиска :)
1. в templates\skin\habra\img\ загружаем search.gif

2. в templates\skin\habra\header.tpl
найти закомментированное место формы поиска и туда вставить
<!-- -->
<DIV class=search_form>
<form method="get" action="{$DIR_WEB_ROOT}/search/">
<input type="search" id="srch" maxlength="32" name="searchfor" value="Поиск" onkeyup="fast_search();" onblur="close_fast_search();" onfocus="this.select();" autocomplete="off" />
<input type="submit" name="submit_search" value="Найти" size="15" />
</form>
</DIV>
<!-- -->
3. далее в templates\skin\habra\js\main.js
добавить фукцию
function submitSearch(sText) {
window.location=DIR_WEB_ROOT+'/search/?searchfor='+sText;
return false;
}
наблюдательный глаз сразу заметит, что это модификация
submitTags(sTag)далее я даже не стал переименовывать переменную sTag :)
идём далее:
4. добавляем новую регистрацию в config\config.route.php
для этого в
return array( добавляем строчку'search' => 'ActionSearch',5. создаём в classes\actions\ файл ActionSearch.class.php
<?
/*-------------------------------------------------------
*
* LiveStreet Engine Social Networking
* Copyright © 2008 Mzhelskiy Maxim
*
*--------------------------------------------------------
*
* Official site: www.livestreet.ru
* Contact e-mail: rus.engine@gmail.com
*
* GNU General Public License, version 2:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
---------------------------------------------------------
*/
/**
* Обрабатывает поиск по тегам
*
*/
class ActionSearch extends Action {
/**
* Инициализация
*
*/
public function Init() {
/**
* Определяем какие блоки выводить
*/
}
protected function RegisterEvent() {
}
/**********************************************************************************
************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
**********************************************************************************
*/
/**
* Отображение топиков
*
*/
protected function EventNotFound() {
/**
* Получаем тег из УРЛа
*/
$sTag=urldecode($this->sCurrentEvent);
//$sTag = str_replace ('?searchfor=', '', $sTag);
$sTag = $_GET['searchfor'];
//$sTag0 = htmlspecialchars($sTag, ENT_QUOTES);
//$sTag = $sTag0;
$bad = array ("`","~","@","#","$","%","^","&","*","-","=","+","{","}",">","<",",","?","/","|");
$repl = array ("","","","","","","","","","","","","","","","","","","","");
$sTag = str_replace ($bad, $repl, $sTag);
/**
* Передан ли номер страницы
*/
if (preg_match("/^page(\d+)$/i",$this->getParam(0),$aMatch)) {
$iPage=$aMatch[1];
} else {
$iPage=1;
}
/**
* Получаем список топиков
*/
$iCount=0;
//$aResult=$this->Topic_GetTopicsByTag($sTag,$iCount,$iPage,BLOG_TOPIC_PER_PAGE);
$aResult=$this->Topic_GetTopicsBySearch($sTag,$iCount,$iPage,BLOG_TOPIC_PER_PAGE);
$aTopics=$aResult['collection'];
/**
* Формируем постраничность
*/
$aPaging=$this->Viewer_MakePaging($aResult['count'],$iPage,BLOG_TOPIC_PER_PAGE,4,DIR_WEB_ROOT.'/search/'.htmlspecialchars($sTag));
/**
* Загружаем переменные в шаблон
*/
$this->Viewer_Assign('aPaging',$aPaging);
$this->Viewer_Assign('aTopics',$aTopics);
$this->Viewer_Assign('sTag',$sTag);
$this->Viewer_AddHtmlTitle('Поиск');
$this->Viewer_AddHtmlTitle($sTag);
/**
* Устанавливаем шаблон вывода
*/
$this->SetTemplateAction('index');
}
}
?>
тут нужно ещё добавить какую-то фильтрацию?
6. в templates\skin\habra\actions\ создаём директорию ActionSearch а уже внутри неё файл index.tpl
{include file='header.tpl'}
{include file='menu.blog.tpl'}
<table width="100%" border="0" cellspacing="4" cellpadding="4" class="beach_party_ireland">
<tr>
<td nowrap align="left"><span class="headline_tags">
<img src="{$DIR_STATIC_SKIN}/img/search.gif" border="0" width="19" height="17" title="поиск" alt="" > →</span></td>
<form action="" method="GET" style="margin: 0px;" onsubmit="return submitSearch(this.searchfor.value);">
<input type="hidden" name="mode" value="blog">
<td width="100%"><input type="text" name="searchfor" value="{$sTag|escape:'html'}" style="width: 100%; padding-left: 4px; padding-right: 4px;" class="tag_form"></td>
</form>
</tr>
</table>
{include file='topic_list.tpl'}
{include file='footer.tpl'}
7. модифицируем classes\modules\topic\Topic.class.php
добавляем функцию
/**
* Получает список топиков по тексту (поиск)
*
* @param unknown_type $sTag
* @param unknown_type $iCount
* @param unknown_type $iPage
* @param unknown_type $iPerPage
* @return unknown
*/
public function GetTopicsBySearch($sTag,$iCount,$iPage,$iPerPage) {
if (false === ($data = $this->Cache_Get("topic_mysearch_{$sTag}_{$iPage}_{$iPerPage}"))) {
$data = array('collection'=>$this->oMapperTopic->GetTopicsBySearch($sTag,$iCount,$iPage,$iPerPage),'count'=>$iCount);
$this->Cache_Set($data, "topic_mysearch_{$sTag}_{$iPage}_{$iPerPage}", array('topic_update','topic_new'), 60*15);
}
return $data;
}
8. и соответственно редактируем classes\modules\topic\mapper\Topic.mapper.class.php
//
// поиск текста по топикам
//
public function GetTopicsBySearch($sTag,&$iCount,$iCurrPage,$iPerPage)
{
$iCurrentUserId=-1;
if (is_object($this->oUserCurrent)) {
$iCurrentUserId=$this->oUserCurrent->getId();
}
$sql = " SELECT
t.*,
tc.*,
u.user_login as user_login,
b.blog_title as blog_title,
b.blog_type as blog_type,
b.blog_url as blog_url,
IF(tv.topic_id IS NULL,0,1) as user_is_vote,
tv.vote_delta as user_vote_delta,
IF(tqv.topic_id IS NULL,0,1) as user_question_is_vote
FROM (
SELECT DISTINCT
topic_id
FROM
".DB_TABLE_TOPIC_CONTENT."
WHERE
LOWER(topic_text) LIKE LOWER('%{$sTag}%')
UNION
SELECT DISTINCT
topic_id
FROM ".DB_TABLE_TOPIC."
WHERE
LOWER(topic_title) LIKE LOWER('%{$sTag}%')
ORDER BY topic_id DESC
) as tt
JOIN ".DB_TABLE_TOPIC." AS t ON tt.topic_id=t.topic_id
JOIN ".DB_TABLE_USER." AS u ON t.user_id=u.user_id
JOIN ".DB_TABLE_BLOG." AS b ON t.blog_id=b.blog_id
LEFT JOIN (
SELECT
topic_id,
vote_delta
FROM ".DB_TABLE_TOPIC_VOTE."
WHERE user_voter_id = ?d
) AS tv ON tt.topic_id=tv.topic_id
LEFT JOIN (
SELECT
topic_id
FROM ".DB_TABLE_TOPIC_QUESTION_VOTE."
WHERE user_voter_id = ?d
) AS tqv ON tt.topic_id=tqv.topic_id
LEFT JOIN ".DB_TABLE_TOPIC_CONTENT." AS tc ON tt.topic_id=tc.topic_id
;
";
$aTopics=array();
$iCount=0;
if ($aRows=$this->oDb->select($sql,$sTag,($iCurrPage-1)*$iPerPage, $iPerPage,$iCurrentUserId,$iCurrentUserId)) {
foreach ($aRows as $aTopic) {
$aTopics[]=new TopicEntity_Topic($aTopic);
$iCount++;
}
//$iCount=$this->GetCountTopicsBySearch($sTag);
}
return $aTopics;
}
Всё :)
Вроде ничего не забыл :)
PS если вас заинтересовала судьба джинсов — они постираны и сейчас сохнут на балконе :)))
UPD
вот архив с файлами
однако, я использовал дистрибутив не из svn-на, а скачивал с sf, так что лучше всё же просто добавить нужные функции в файлы вашего проекта.
из проблем с поиском — в настоящее время почему-то не формируются страницы найденного — всё найденное выводится на одной странице :(
UPD 2 проблема c постраничным выводом результатов поиска решается
так же при попытке перехода на следующую страницу выпадало предупреждение в отсутствии searchfor
убираем предупреждение так :))
if (preg_match("/searchfor/i",$sTag))
{
$sTag = $_GET['searchfor'];
}как только эту проблему решу — сразу дам знать :)
UPD 3 адаптация поиска к 0.3
UPD 4
- +7
- 22 февраля 2009, 14:32
- noonv
комментарий был удален
комментарий был удален
комментарий был удален
комментарий был удален
комментарий был удален
комментарий был удален
комментарий был удален
комментарий был удален
Если я правильно понял то это реализация поиска без использования sphinx. Тем кто на обычном хостинге может очень пригодиться. Пока не проверял, а вообще респект, молодец. Я только не понял почему столько комментариев удаленных?
вот архив с файлами
однако, я использовал дистрибутив не из svn-на, а скачивал с sf, так что лучше всё же просто добавить нужные функции в файлы вашего проекта.
из проблем с поиском — в настоящее время почему-то не формируются страницы найденного — всё найденное выводится на одной странице :(
так же при попытке перехода на следующую страницу выпадало предупреждение в отсутствии searchfor
убираем предупреждение так :))
if (preg_match("/searchfor/i",$sTag))
{
$sTag = $_GET['searchfor'];
}
как только эту проблему решу — сразу дам знать :)
Офигеть круто!
А вы бы не могли нормаль статью написать, и все оформить?
Просто Сфинкс — я не могу поставить, у меня простой хостинг.
Поиск от ГУГЛА тоже не особо рулит, а может ваш лучше индексирует? Как вы думаете?
Можно пример посмотреть вашего поиска?
Он к ЛС 0,3 подходит?
А вы бы не могли нормаль статью написать, и все оформить?
Просто Сфинкс — я не могу поставить, у меня простой хостинг.
Поиск от ГУГЛА тоже не особо рулит, а может ваш лучше индексирует? Как вы думаете?
Можно пример посмотреть вашего поиска?
Он к ЛС 0,3 подходит?
хм… а что не понятно из этой заметки? — там есть ответы на все ваши вопросы ;)
относительно LS 0.3 пока сказать не могу — ещё не обновился :)
относительно LS 0.3 пока сказать не могу — ещё не обновился :)
Здравствуйте Уважаемый noonv!
Проблема с постраничным выводом результатов поиска была в следующем:
В файле Topic.mapper.class.php в функции GetTopicsBySearch необходимо было посчитать вначале общее количество строк в таблице удовлетворяющих поисковому запросу, а уже во втором запросе вытаскивать данные относящиеся к конкретной странице результатов. Осталось только оптимизировать первый запрос, что бы он выдавал только количество строк. Я бы и рад это сделать, но в SQL я увы не силён — для меня это тёмный лес.
С уважением ALF.
Проблема с постраничным выводом результатов поиска была в следующем:
В файле Topic.mapper.class.php в функции GetTopicsBySearch необходимо было посчитать вначале общее количество строк в таблице удовлетворяющих поисковому запросу, а уже во втором запросе вытаскивать данные относящиеся к конкретной странице результатов. Осталось только оптимизировать первый запрос, что бы он выдавал только количество строк. Я бы и рад это сделать, но в SQL я увы не силён — для меня это тёмный лес.
<code>//
// поиск текста по топикам
//
public function GetTopicsBySearch($sTag,&$iCount,$iCurrPage,$iPerPage)
{
$iCurrentUserId=-1;
if (is_object($this->oUserCurrent)) {
$iCurrentUserId=$this->oUserCurrent->getId();
}
$sql = " SELECT
t.*,
tc.*,
u.user_login as user_login,
b.blog_title as blog_title,
b.blog_type as blog_type,
b.blog_url as blog_url,
IF(tv.topic_id IS NULL,0,1) as user_is_vote,
tv.vote_delta as user_vote_delta,
IF(tqv.topic_id IS NULL,0,1) as user_question_is_vote
FROM (
SELECT DISTINCT
topic_id
FROM
".DB_TABLE_TOPIC_CONTENT."
WHERE
LOWER(topic_text_source) LIKE LOWER('%{$sTag}%')
UNION
SELECT DISTINCT
topic_id
FROM ".DB_TABLE_TOPIC."
WHERE
LOWER(topic_title) LIKE LOWER('%{$sTag}%')
ORDER BY topic_id DESC
) as tt
JOIN ".DB_TABLE_TOPIC." AS t ON tt.topic_id=t.topic_id
JOIN ".DB_TABLE_USER." AS u ON t.user_id=u.user_id
JOIN ".DB_TABLE_BLOG." AS b ON t.blog_id=b.blog_id
LEFT JOIN (
SELECT
topic_id,
vote_delta
FROM ".DB_TABLE_TOPIC_VOTE."
WHERE user_voter_id = ?d
) AS tv ON tt.topic_id=tv.topic_id
LEFT JOIN (
SELECT
topic_id
FROM ".DB_TABLE_TOPIC_QUESTION_VOTE."
WHERE user_voter_id = ?d
) AS tqv ON tt.topic_id=tqv.topic_id
LEFT JOIN ".DB_TABLE_TOPIC_CONTENT." AS tc ON tt.topic_id=tc.topic_id
;
";
$iCount=0;
if ($aRows=$this->oDb->select($sql,$sTag,($iCurrPage-1)*$iPerPage, $iPerPage,$iCurrentUserId,$iCurrentUserId)) {
foreach ($aRows as &$value) {
$iCount++;
}
}
$Start=($iCurrPage*$iPerPage)-$iPerPage;
$sql = " SELECT
t.*,
tc.*,
u.user_login as user_login,
b.blog_title as blog_title,
b.blog_type as blog_type,
b.blog_url as blog_url,
IF(tv.topic_id IS NULL,0,1) as user_is_vote,
tv.vote_delta as user_vote_delta,
IF(tqv.topic_id IS NULL,0,1) as user_question_is_vote
FROM (
SELECT DISTINCT
topic_id
FROM
".DB_TABLE_TOPIC_CONTENT."
WHERE
LOWER(topic_text_source) LIKE LOWER('%{$sTag}%')
UNION
SELECT DISTINCT
topic_id
FROM ".DB_TABLE_TOPIC."
WHERE
LOWER(topic_title) LIKE LOWER('%{$sTag}%')
ORDER BY topic_id DESC
LIMIT ".$Start.", ".$iPerPage."
) as tt
JOIN ".DB_TABLE_TOPIC." AS t ON tt.topic_id=t.topic_id
JOIN ".DB_TABLE_USER." AS u ON t.user_id=u.user_id
JOIN ".DB_TABLE_BLOG." AS b ON t.blog_id=b.blog_id
LEFT JOIN (
SELECT
topic_id,
vote_delta
FROM ".DB_TABLE_TOPIC_VOTE."
WHERE user_voter_id = ?d
) AS tv ON tt.topic_id=tv.topic_id
LEFT JOIN (
SELECT
topic_id
FROM ".DB_TABLE_TOPIC_QUESTION_VOTE."
WHERE user_voter_id = ?d
) AS tqv ON tt.topic_id=tqv.topic_id
LEFT JOIN ".DB_TABLE_TOPIC_CONTENT." AS tc ON tt.topic_id=tc.topic_id
;
";
$aTopics=array();
if ($aRows=$this->oDb->select($sql,$sTag,($iCurrPage-1)*$iPerPage, $iPerPage,$iCurrentUserId,$iCurrentUserId)) {
foreach ($aRows as $aTopic) {
$aTopics[]=new TopicEntity_Topic($aTopic);
}
}
return $aTopics;
}</code>С уважением ALF.
<DIV class=search>
<form method="get" action="{$DIR_WEB_ROOT}/search/">
<input class="text" type="search" id="srch" maxlength="32" name="searchfor" value="Поиск" onkeyup="fast_search();" onblur="close_fast_search();" onfocus="this.select();" autocomplete="off" />
<input class="button" type="submit" value="" />
</form>
</DIV>код в header_nav.tpl оставит дизайн поля поиска и кнопки
не знаю (не смог пока что разобраться) с чем это связано, но по тегам-меткам поиск не совсем корректно происходит.
Проверял по определенному запрос, который находился только в метках публикации. И в результате по поиску я на данную публикацию (которую брал как пример) я не вышел. В чем может быть проблема, кто-нибудь сталкивался?
Проверял по определенному запрос, который находился только в метках публикации. И в результате по поиску я на данную публикацию (которую брал как пример) я не вышел. В чем может быть проблема, кто-нибудь сталкивался?
Пробовал к новой сборке прикрутить, не получается, ругается
Fatal error: Uncaught exception 'Exception' with message 'Не найден класс модуля - GetTopicsBySearch' in classes/engine/Engine.class.php:95 Stack trace: #0 /classes/engine/Engine.class.php(141): Engine->LoadModule('GetTopicsBySear...', true) #1 /classes/engine/Module.class.php(37): Engine->_CallModule('GetTopicsBySear...', Array) #2 [internal function]: Module->__call('GetTopicsBySear...', Array) #3 /classes/engine/Engine.class.php(145) : eval()'d code(1): LsTopic->GetTopicsBySearch('???????????????', 0, 1, 10) #4 /classes/engine/Engine.class.php(145): eval() #5 /classes/engine/Action.class.php(268): Engine->_CallModule('Topic_GetTopics...', Array) #6 [internal function]: Action->__call('Topic_GetTopics...', Array) #7 /classes/actions/ActionSearch.class.php(71): ActionSearch->Topic_ in /classes/engine/Engine.class.php on line 95
так я вроде бы поставил его на SVN(кажется 263)
все работает, как бы…
но вот интересно вбиваю в поиск, выгоняет список тем по искомому, нажимаю на название топика, и в момент до загрузки страницы с топиком, на доли секунды всплывает окно с «добавлением изображения»… странно. что я не так сделал, придется искать…
И еще вопрос, почему вот здесь:
, (выделение поиска),
нельзя применить теги меняющие цвет и размер текста? только(<.b><./b>)?
все работает, как бы…
но вот интересно вбиваю в поиск, выгоняет список тем по искомому, нажимаю на название топика, и в момент до загрузки страницы с топиком, на доли секунды всплывает окно с «добавлением изображения»… странно. что я не так сделал, придется искать…
И еще вопрос, почему вот здесь:
, (выделение поиска),
$aTopic['topic_text_short']=str_replace($sTag,"<b>$sTag</b>",$aTopic['topic_text_short']);//подсветка поисковой фразынельзя применить теги меняющие цвет и размер текста? только(<.b><./b>)?
Убираю
в файле /templates/skin/new/actions/ActionBlog/comment.tpl строку
становится все нормально.
В какой файл можно перенести этот код:
чтобы осталась работать функция вставки картинок в комментариях..?
в файле /templates/skin/new/actions/ActionBlog/comment.tpl строку
{include file='window_load_img.tpl' sToLoad='form_comment_text'}становится все нормально.
В какой файл можно перенести этот код:
{include file='window_load_img.tpl' sToLoad='form_comment_text'}чтобы осталась работать функция вставки картинок в комментариях..?
Прикручиваем поиск noov-a к 0.3 — поехали:
\classes\actions\ActionSearch.class.php
Берём функцию из этого сообщения:
и вставляем её в Topic.mapper.class.php
Создаём папку:
\templates\skin\new\actions\ActionSearch
В этой папке создаём файлик index.tpl к следующего содержания:
Никакого java скрипта специально добавлять не нужно.
Вроде ничего не забыл, если что поправьте меня.
Извиняюсь за портянку.
\classes\actions\ActionSearch.class.php
<?
/*-------------------------------------------------------
*
* LiveStreet Engine Social Networking
* Copyright © 2008 Mzhelskiy Maxim
*
*--------------------------------------------------------
*
* Official site: www.livestreet.ru
* Contact e-mail: rus.engine@gmail.com
*
* GNU General Public License, version 2:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
---------------------------------------------------------
*/
/**
* Обрабатывает поиск по тегам
*
*/
class ActionSearch extends Action {
/**
* Инициализация
*
*/
public function Init() {
/**
* Определяем какие блоки выводить
*/
}
protected function RegisterEvent() {
}
/**********************************************************************************
************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
**********************************************************************************
*/
/**
* Отображение топиков
*
*/
protected function EventNotFound() {
/**
* Получаем тег из УРЛа
*/
$sTag=urldecode($this->sCurrentEvent);
//$sTag = str_replace ('?searchfor=', '', $sTag);
$sTag = $_POST['q'];
if (strlen($sTag)<=6)
{
$sTag = '!!Слишком!!короткий!!поисковый!!запрос!!';
}
//$sTag0 = htmlspecialchars($sTag, ENT_QUOTES);
//$sTag = $sTag0;
$bad = array ("`","~","@","#","$","%","^","&","*","-","=","+","{","}",">","<",",","?","/","|");
$repl = array ("","","","","","","","","","","","","","","","","","","","");
$sTag = str_replace ($bad, $repl, $sTag);
/**
* Передан ли номер страницы
*/
if (preg_match("/^page(\d+)$/i",$this->getParam(0),$aMatch)) {
$iPage=$aMatch[1];
} else {
$iPage=1;
}
/**
* Получаем список топиков
*/
$iCount=0;
//$aResult=$this->Topic_GetTopicsByTag($sTag,$iCount,$iPage,BLOG_TOPIC_PER_PAGE);
$aResult=$this->Topic_GetTopicsBySearch($sTag,$iCount,$iPage,BLOG_TOPIC_PER_PAGE);
$aTopics=$aResult['collection'];
/**
* Формируем постраничность
*/
$aPaging=$this->Viewer_MakePaging($aResult['count'],$iPage,BLOG_TOPIC_PER_PAGE,4,DIR_WEB_ROOT.'/search/topics/'.htmlspecialchars($sTag));
/**
* Загружаем переменные в шаблон
*/
$this->Viewer_Assign('aTopics',$aTopics);
$this->Viewer_Assign('aPaging',$aPaging);
$this->Viewer_Assign('sTag',$sTag);
$this->Viewer_AddHtmlTitle('Поиск');
$this->Viewer_AddHtmlTitle($sTag);
/**
* Устанавливаем шаблон вывода
*/
$this->SetTemplateAction('index');
}
}
?>Берём функцию из этого сообщения:
и вставляем её в Topic.mapper.class.php
Создаём папку:
\templates\skin\new\actions\ActionSearch
В этой папке создаём файлик index.tpl к следующего содержания:
{include file='header.tpl' showWhiteBack=true}
<h1>Поиск</h1>
<form action="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_SEARCH}/topics/" method="POST">
<p>
<input type="text" value="" name="q" class="w300">
<input type="submit" value="Найти">
</p>
</form>
{include file='topic_list.tpl'}
{include file='footer.tpl'}Никакого java скрипта специально добавлять не нужно.
Вроде ничего не забыл, если что поправьте меня.
Извиняюсь за портянку.
Вопрос по поиску.
Как можно найти человека, если помнишь только город. В тегах на LS значатся не все города. К примеру нет Твери и Рыбинска, а зарегистрированные пользователи есть. Ввожу в поиске «Тверь» или «Рыбинск» и получаю: «Удивительно, но поиск не дал результатов».
Как можно найти человека, если помнишь только город. В тегах на LS значатся не все города. К примеру нет Твери и Рыбинска, а зарегистрированные пользователи есть. Ввожу в поиске «Тверь» или «Рыбинск» и получаю: «Удивительно, но поиск не дал результатов».
Привет из Твери) Ты немного путаешь. Этот поиск не сканирует поля профилей, идет поиск только по топикам и комментариям.
Не все города в тегах peoples, потому, что выводится какое то определенное количество городов с максимальным числом указавших этот город, если например ты забьешь, что ты из Твери, то в /peoples/ наш город появится.
Не все города в тегах peoples, потому, что выводится какое то определенное количество городов с максимальным числом указавших этот город, если например ты забьешь, что ты из Твери, то в /peoples/ наш город появится.
заставлять пользователя вбивать урлы выглядит примерно также, как заставлять писать посты запросами :)
Хотя поиск по городам я думаю некритичен :)
Хотя поиск по городам я думаю некритичен :)
Странно. Разархивировал все. Раскидал папки, внес строку в header.tpl. Но когда выдает результаты поиска, в поисковой строке всегда topics и, как следствие, «Сюда еще никто не успел написать»
сорри — забыл упомянуть — нужно сделать редакцию header_nav.tpl
— заменить стандартную форму поиска на:
— заменить стандартную форму поиска на:
<form method="get" action="{$DIR_WEB_ROOT}/search/">
<input class="text" type="search" id="srch" maxlength="32" name="searchfor" value="Поиск" onkeyup="fast_search();" onblur="close_fast_search();" onfocus="this.select();" autocomplete="off" />
<input class="button" type="submit" value="" />
</form>
Комментарии (84)
RSS свернуть / развернуть