Для интеграции с полнотекстовым поиском по сайту необходимо:

  1. В базе данных на нужных полях таблицы компонента создать FULLTEXT индекс
  2. В директории /components/линк_компонента/ создать php файл, назвав его psearch.php.
  3. В файле psearch.php объявить функцию search_линк_компонента, т.е. функция должна иметь название: префикс search_ + линк компонента, например search_photos - неизменяемый префикс search_ + линк компонента - photos.
  4. В функции search_линк_компонента должны быть два аргумента $query, $look - подготовленный запрос для поиска и тип поиска соответственно.
  5. После отработки функции, результаты должны быть в таблице cms_search.

Разберем пример:

function search_photos($query, $look){
 
        $inDB   = cmsDatabase::getInstance();         // Определяем объект класса БД
	$searchModel = cms_model_search::initModel(); // Определяем объект класса модели компонента "Поиск"
 
        // Сам поисковый запрос
	$sql = "SELECT f.*, a.title as cat, a.id as cat_id
			FROM cms_photo_files f
			INNER JOIN cms_photo_albums a ON a.id = f.album_id
			WHERE MATCH(f.title, f.description) AGAINST ('$query' IN BOOLEAN MODE) AND f.published = 1";
 
	$result = $inDB->query($sql);
	// При наличии результата запроса, обрабатываем его, добавляя результаты в таблицу cms_search
	if ($inDB->num_rows($result)){
 
		while($item = $inDB->fetch_assoc($result)){
 
			$result_array = array();
 
			$result_array['link']        = "/photos/photo".$item['id'].".html"; // основная ссылка на результат
			$result_array['place']       = $item['cat'];                        // заголовок места назначения
			$result_array['placelink']   = '/photos/'.$item['cat_id'];          // ссылка на место назначения
			$result_array['description'] = $searchModel->getProposalWithSearchWord($item['description']); // описание результата, прошедшее через метод, который ищет искомые слова в описании
			$result_array['title']       = $item['title'];                      // заголовок результата
			$result_array['pubdate']     = $item['pubdate'];                    // дата публикации найденного материала
			$result_array['session_id']  = session_id();                        // id текущей сессии пользователя
 
			$searchModel->addResult($result_array);                             // Заносим результат в таблицу cms_search (если такой результат уже есть, добавлен не будет)
		}
	}
 
	return;
}

Таким образом, задача данной функции непосредственно найти искомый результат и занести его в таблицу cms_search.

 
разработка/компоненты/интеграция_с_поиском_по_сайту.txt · Последние изменения: 2011/09/25 12:41 От fuze