Соня, и все, кто в теме.. буду очень признателен, если разъясните..
########### Вопрос номер Раз:
$content = $field1. ' '. $field2;
не понмаю что должнобыть $field1 и $field2 ?
Инструкция:
1. Immediately after an entry relevant for search is added to the database (or updated in database!) in the custom module, do add search words for this entry to the standard Search module
т.е. вот как я перевёл это для себя:
1. Сразу после того, как запись, относящаяся к поиску, добавлена в базу данных (или обновлена в базе данных!) в вашем собственном модуле, вызовите функцию AddWords стандартного модуля Поиска для этой записи.
Правильно?.. Но всё равно полного понимания где именно в своём модуле я должен вызвать AddWords - нет. Я вызываю её после того, как отобразил контент, а именно, у меня выглядит так:
Code: Select all
DisplayStarsTable($identity, $query1); //Вызываю функцию, отображающую контент
//Update search index
$module =& $this->GetModuleInstance('Search');
if ($module != FALSE)
{
$content = $field1. ' '. $field2;
$module->AddWords($this->GetName(), $id, 'starsshop', $content, NULL);
}
Идём дальше.
1a. Immediately after entry is deleted from custom module, delete it from Search module as well
Перевожу:
Немедленно сразу после того, как запись удалена из вашего модуля, удалите её из модуля Поиска.
Хм. т.е. код я должен разместить в своём модуле там, где присутствует удаление контента (если присутствует). Так я понял?
Если да - то пока пропускаю и не использую эту штуку.
2. Add API function to Mymodule.module.php that is called from standatd Search module to display search results
Добавьте API функцию в ваш модуль (вашеимяфайла.module.php). Эта АПИ функция вызывается модулем Поиска для того, чтобы показать результаты поиска.
Таким образом, я ввёл у себя следующее:
Code: Select all
function SearchResult($returnid, $entryid, $attr = '') {
if( $attr == 'starsshop' )
{
$db =& $this->GetDb();
$q = 'SELECT * FROM '.cms_db_prefix().'module_starsshop_products
WHERE id = ?';
$row = $db->GetRow($q,array($entryid));
if( $row )
{
$result[0] = $this->GetFriendlyName(); // the prefix displayed in the list results
$result[1] = $row['field1']; // the title in the search results
// this should create a link from search result to the found entry
$result[2] = $this->CreateLink('cntnt01','default',$returnid,
$row['field1']);
}
}
return $result;
}
далее вы пишите:
This function should return $result as Array as shown above.
Т.е. Эта функция должна вернуть array $result (как показано выше).
Хм. Не совсем понятно кто и что должен делать потом с этим $result - Search сам делает с ним что-то?
В файле Search.module.php я не нашёл вызова функции SearchResult, в файле action.dosearch.php нашёл вот это:
Code: Select all
$searchresult = $moduleobj->SearchResult( $returnid,
$result->fields['content_id'],
$result->fields['extra_attr']);
Но это тоже не очень прояснило ситуацию мне...
Ладно, закрыл пока на это непонимание глаза, иду дальше:
3. Add function SearchReindex that is called from standard Search module when search index is reindexed
Добавьте функцию SearchReindex, которая вызывается из стандартного модуля Поиска, когда поисковый индекс реиндексируется.
Хорошо, добавляю эту функцию:
function SearchReindex(&$module) {
$db =& $this->GetDb();
$query = 'SELECT * FROM '.cms_db_prefix().'module_starsshop_products';
$result =& $db->Execute($query);
while( $result && !$result->EOF )
{
$row =& $result->fields;
$module->AddWords($this->GetName(),$row['field1'],'starsshop',
$row['content']);
$result->MoveNext();
}
$result->Close();
}
в связи с ней
########### Вопрос номер Два:
в Search.module.php вижу следующее:
Code: Select all
if (method_exists($gCms->modules[$key]['object'], 'SearchReindex'))
{
$gCms->modules[$key]['object']->SearchReindex($this);
}
Это наводит на мысль, что надо использовать параметр modules, при вызове модуля Search. Делаю так:
{search lang='ru_RU' searchtext='Введите текст' modules='starsshop, search'}
Правильно, или нет?..
Словом, непонмание ещё осталось, а в связи с этим, результат поиска по моему контенту, конечно, нулевой.
Если можете направить мысль в нужную сторону - буду премного благодарен.
Спасибо всем, кто хотя бы дочитал до сюда.
