РЕШЕНО rss по ключевому слову

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

Аватар пользователя Bios Bios 14 июля 2009 в 12:49

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

Мне данный функционал не совсем подходил... Поэтому я переделал данный модуль в сниппет - блок с ссылками по одному ключевому слову и категории...

Для того чтобы все работало нужно:

1. admin/content/aggregator тут добавляете необходимые вам ленты, и назначаете их одной категории...
2. Создаете блок и вставляете в него код:


<?php 
$keywords 
"земля, +марс, -венера"//Фильтр при наличии нескольких слов работает так - слова которые не должны присутствовать должны находится в конце...
$cid=2//номер назначенной категории

$arguments = array($cid);

if (!empty(

$keywords)) {
    
$words explode(","$keywords);
    print 
$word;
    foreach (
$words as $word) {  

      

$word trim($word); 

      if (

preg_match("/^-/"$word)) { 

          

$word preg_replace('/^-/',''$word);
          
$not_title_filter[] = "lower(i.title) NOT LIKE '%%%s%%'";
            
$arguments[] = $word;
           
$not_content_filter[] = "lower(i.description) NOT LIKE '%%%s%%'";
            
$arguments[] = $word;
           
$not_filter_query implode(" AND "$not_title_filter) . ' AND ' implode(" AND "$not_content_filter); 

      } elseif (

preg_match("/^\+/"$word)) { 

           

$word preg_replace('/^\+/',''$word);
           
$and_title_filter[] = "lower(i.title) LIKE '%%%s%%'";
            
$arguments[] = $word
           
$and_content_filter[] = "lower(i.description) LIKE '%%%s%%'";
            
$arguments[] = $word
           
$and_filter_query implode(" AND "$and_title_filter) . ' OR ' implode(" AND "$and_content_filter);

      } else { 

           

$title_filter[] = "lower(i.title) LIKE '%%%s%%'";
            
$arguments[] = $word
           
$content_filter[] = "lower(i.description) LIKE '%%%s%%'";
            
$arguments[] = $word
           
$filter_query implode(" OR "$title_filter) . ' OR ' implode(" OR "$content_filter); 
      }
    }

    

$news_queries = array($filter_query$and_filter_query$not_filter_query);
    
$i 0;

    foreach (

$news_queries as $query) {
      if (
$i && drupal_strlen($query) > 0) {
        
$news_query .= "AND " ;
      }
    
      if (
drupal_strlen($query)) {
          
$news_query .= "("$query .")"
          
$i++;
      }
    }
}

$search->sql 'SELECT i.*, f.link AS flink, f.title AS ftitle
                    FROM {aggregator_item} i
                    LEFT JOIN {aggregator_feed} f ON i.fid = f.fid
                    LEFT JOIN {aggregator_category_feed} c ON c.fid = f.fid
                    WHERE c.cid = %d'

if (!empty(

$news_query)) $search->sql .= " AND ($news_query)";

$search->sql .= ' ORDER BY timestamp DESC';
$search->arguments $arguments;

$result db_query_range($search->sql$search->arguments0/*$node->max_items*/);
$output .= '<div class="out-links_cont">';
while (
$item db_fetch_object($result)){
    
$output .= '<div class="out-link"><a href="' check_url($item->link) . '"><b>&mdash;</b> ' .filter_xss($item->title, array()) . '</a></div>';
}
$output .= '</div>';

return 

$output;
?>

Как результат получите 4 самых свежих ссылки на новости...