Деревянность модуля search

Главные вкладки

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 23 марта 2008 в 1:52

Возникла задача - некоторые ноды в зависимости от определенного условия надо исключать из поисковой индексации...
Не из выдачи а именно из индексакии. Начинаю копать

Оказывается друпал не предусмтривает такого рода хуков.... вашу ноду он съест и заиндексит в любом случае.

Есть конешно модуль search_block котороый всего лишь заметает дерьмо из индексации.....

Сейчас оцениваю время разработки и ничего в голову не приходит как положить на принцип "не вмешиваться в ядро".

Причина - нужно туда вставлять свой хук, чтобы можно было не индексировать ноду, когда ее НЕ НАДО индексировать...
ура, товарищи.

и вставлять это дело в node_update_index в модуле node......
либо полностью переписывать поисковый механизм что приведет к полному выбиванию из канвы друпала.....

Комментарии

Аватар пользователя Stalker-g2 Stalker-g2 23 марта 2008 в 13:25

Для вашей деревянной задачи есть отличное деревянное решение. После индексации по крону исключайте из индекса то, что вам не нужно.

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 24 марта 2008 в 3:30

решилось именно через з....
<?php
/**
* searchcorrector.module
*/

/**
* Implementation of hook_nodeapi
*/
function searchcorrector_nodeapi(&$node, $op, $teaser, $page) {
switch($op) {
case 'validate':
break;
case 'load':
break;
case 'insert':
break;
case 'delete':
break;
case 'view':
break;
case 'update index':
if('event' == $node->type){
// we do check if it's associated with cultural events
$result = db_query('SELECT * FROM {cultureevents_events} WHERE enid=%d', $node->nid);
if($o = db_fetch_object($result) ){
// insert into candidates for deleting
db_query('INSERT INTO {searchcorrector}(nid) VALUES(%d)', $node->nid);
}
}
echo 'updateindex';
return array();
break;
}
}
/**
* Implementatino of hook_update_index
*
* We might have a race condition here with other instances
* of module's hook_update_index, but I'm not sure and it's
* been working so far.
*/
function searchcorrector_update_index() {
$query = 'SELECT nid FROM {searchcorrector}';
$result = db_query($query);
$row = 0;
$nids = array();
while($o = db_fetch_object($result) ) $nids[] = $o->nid;
if(count($nids) ) foreach($nids as $nid){
watchdog('searchcorrector', 'Dropping index for nid ' . $nid);
search_index($nid, 'node', '');
$query = 'DELETE FROM {searchcorrector} WHERE nid=%d';
db_query($query, $nid);
}
}

?>

Аватар пользователя lopata24 lopata24 20 ноября 2009 в 16:12

а не подскажете, куда этот код вставлять?

мне нужно, чтобы не индексировался и не выводился тип материала "pm"

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 20 ноября 2009 в 18:57

"lopata24" wrote:
а как и куда прописать, что мне нужно либо только мои типы материала, либо все кроме "pm"?

уже все сказано. не можете - наймите человека. тут кроме меня еще дофига народу который может - http://www.drupal.ru/profile/drupal_commerce_programming