Забыли пароль?
Запросите новый здесь.

Автор темы: spiker
ID темы: 34
Информация:
Тема содержит 12 сообщения, была просмотрена 2546 раз.
Просмотр темы
PHP-Fusion Russia » Поддержка 7 версии » Народное творчество
 Распечатать тему
Простое решение вопроса с description и keywords
spiker
На форумах поддержки PF часто приходится видеть вопрос - как "присобачить" мета-описания и ключевые слова к конкретным страницам.
Простое решение этой проблемы.

Открыть файл includes/output_handling_include.php


Найти:

Скачать исходники  Код
function add_to_title($addition=""){
   global $fusion_page_title;
   
   $fusion_page_title .= $addition;
}




Заменить на:

Скачать исходники  Код
/* add_to_description and keywords
+--------------------------------------------------------*/   
$fusion_page_description = ""; // Переменная description

function add_to_title($addition="", $description=""){
   global $fusion_page_title, $fusion_page_description;
   
   $fusion_page_title .= $addition;
   $fusion_page_description = $description;
}
/* add_to_description and keywords: end
+--------------------------------------------------------*/   





Найти:
Скачать исходники  Код
   if(!empty($fusion_page_meta)){
      foreach($fusion_page_meta as $name => $content){
         $output = preg_replace("#<meta (http-equiv|name)='$name' content='.*' />#i", "<meta \\1='".$name."' content='".$content."' />", $output, 1);
      }
   }




Ниже вставить:
Скачать исходники  Код
/* add_to_description and keywords
+--------------------------------------------------------*/   
    global $fusion_page_description;
   
   if(!empty($fusion_page_description)){
   
   // Вызываем класс "нарезки" ключевых слов   
      $word_counter = new Counter();
      
   // Удалить html-теги из текста      
      $fusion_page_description = strip_tags($fusion_page_description);
   
   // Извлечение ключевых слов
      $keywords = strlen($fusion_page_description)>50000 ? $word_counter->get_keywords(substr($fusion_page_description, 0, 50000)) : $keywords = $word_counter->get_keywords($fusion_page_description);   
      
   // Обрезка текста   
      $fusion_page_description = trimlink($fusion_page_description, 400);
      
   // Замена значений в meta-тегах      
      $output = preg_replace("#<meta name='description' content='(.*?)\' />#i", "<meta name='description' content='".$fusion_page_description."' />", $output, 1);
      $output = preg_replace("#<meta name='keywords' content='(.*?)\' />#i", "<meta name='keywords' content='".$keywords."' />", $output, 1);
      
   }
/* add_to_description and keywords: end
+--------------------------------------------------------*/   




Найти
Скачать исходники  Код
?>




Перед этим вставить:
Скачать исходники  Код
/* add_to_description and keywords
+--------------------------------------------------------*/   
class Counter {
    var $origin_arr;
    var $modif_arr;
    var $min_word_length = 3;

function explode_str_on_words($text) {

$search = array ("'ё'",
                 "'<script[^>]*?>.*?</script>'si",  // Вырезается javascript
                 "'<[\/\!]*?[^<>]*?>'si",           // Вырезаются html-тэги
                 "'([\r\n])[\s]+'",                 // Вырезается пустое пространство
                 "'&(quot|#34);'i",                 // Замещаются html-элементы
                 "'&(amp|#38);'i",
                 "'&(lt|#60);'i",
                 "'&(gt|#62);'i",
                 "'&(nbsp|#160);'i",
                 "'&(iexcl|#161);'i",
                 "'&(cent|#162);'i",
                 "'&(pound|#163);'i",
                 "'&(copy|#169);'i",
                 "'&#(\d+);'e");

$replace = array ("е",
                  " ",
                  " ",
                  "\\1 ",
                  "\" ",
                  " ",
                  " ",
                  " ",
                  " ",
                  chr(161),
                  chr(162),
                  chr(163),
                  chr(169),
                  "chr(\\1)");

$text = preg_replace ($search, $replace, $text);

    $del_symbols = array(",", ".", ";", ":", "\"", "#", "\$", "%", "^",
                         "!", "@", "`", "~", "*", "-", "=", "+", "\\",
                         "|", "/", ">", "<", "(", ")", "&", "?", "№", "\t",
                         "\r", "\n", "{","}","[","]", "'", "•",
                         " как ", " для ", " что ", " или ", " это ", " этих ",
                         " всех ", " вас ", " они ", " оно ", " еще ", " когда ",
                         " где ", " эта ", " лишь ", " уже ", " вам ", " нет ",
                         " если ", " надо ", " все ", " так ", " его ", " чем ",
                         " при ", " даже ", " мне ", " есть ", " раз ", " два ",
                         "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
                         );

    $text = str_replace($del_symbols, array(" "), $text);
    $text = ereg_replace("( +)", " ", $text);
    $this->origin_arr = explode(" ", trim($text));
    return $this->origin_arr;
}

function count_words() {
    $tmp_arr = array();
    foreach ($this->origin_arr as $val) {
        if (strlen($val)>=$this->min_word_length) {
            $val = strtolower($val);
        if (array_key_exists($val, $tmp_arr)) {
            $tmp_arr[$val]++;
        } else {
            $tmp_arr[$val] = 1;
            }
        }
    }
    arsort ($tmp_arr);
    $this->modif_arr = $tmp_arr;
}

function get_keywords($text) {
$this->explode_str_on_words($text);
$this->count_words();
$arr = array_slice($this->modif_arr, 0, 15);
$str = "";
foreach ($arr as $key=>$val) {
$str .= $key . ", ";
        }
   return trim(substr($str, 0, strlen($str)-2));
    }
}
/* add_to_description and keywords: end
+--------------------------------------------------------*/   





Далее, там где нужно выводить мета-описания и ключевые слова делаем следуещее (например в статьях)

Открываем articles.php

Находим:

Скачать исходники  Код
add_to_title($locale['global_201'].$article_subject);




Заменяем на:

Скачать исходники  Код
add_to_title($locale['global_201'].$article_subject, $article[$_GET['rowstart']]);





И всё. Ключевые слова конечно будут не ахти какие, но лучше так, чем совсем ничего.
 
jikaka
spiker, добротное решение!
спасибо!
еще бы примерчик какой-нибудь...
нет ссылки случайно?
 
Web
spiker
_http://www.otay.ru/readarticle.php?article_id=3

См. код страницы. Правда способ замены meta несколько отличается, но принцип тот же.
 
jikaka
очень интересно!
ay
 
Web
Razor
Отличная функция, если не сложно напишите как использовать в новостях, нехочется разбираться в коде.
Работаю в vsemayki.ru...
 
spiker
Ветка форума — "Народное творчество".
А у творческих людей нет в словарном запасе "нехочется разбираться".ab
Если уж "детский" процедурный код PHP вызывает столько трудностей, то что будем делать дальше? А идеи они есть и будут.

add_to_title — вот что нужно искать, конкретно в коде, выводящем статичную страницу.
Это подсказка, ибо модулей много, где можно применить, соответственно и вопросов подобных будет тыщи.
 
Razor
Ладно каюсь...ab
Совсем сглупил..
Ещё раз спасибо за функциюab
Работаю в vsemayki.ru...
 
yury
да, полезная штука. Прикрутил к новостям и статьям со своими небольшими изменениями)
Изменил(а) yury, 01.09.2010 23:25
 
yury
только если написано в содержании "Россия", то выводится в коде &quot;Россия&quot;
 
spiker
yury написал:
только если написано в содержании "Россия", то выводится в коде &quot;Россия&quot;


Другую какую-нибудь обрезку поставь:

Скачать исходники  Код
// Обрезка текста   
      $fusion_page_description = maxsite_str_word($fusion_page_description, 50, ' ');

.......................

function maxsite_str_word($text, $counttext = 10, $sep = ' ') {
     $words = split($sep, $text);
      if ( count($words) > $counttext )
       $text = join($sep, array_slice($words, 0, $counttext));
       return $text;
    }


 
yury
кстати сам способ удобен тем, что в заметки в соцсети теперь добавляется правильная информация
 
rusbody
Интересное иуниверсальное решение
 

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Похожие темы
Топ 5 пользователей форума
Alex Alex (1,179)   Zaxap Zaxap (1,078)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)