Guest User

ESeoLinks

a guest
May 17th, 2012
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.37 KB | None | 0 0
  1. <?
  2. /*
  3.         ESeoLinks представляет собой удобный инструмент SEO оптимизатора для внутренней перелинковки сайта.
  4.         Он позволяет составить набор слов или словосочетаний и назначить им ссылки.
  5.         Фильтр будет заменять в тексте сайта найденные слова и заменять их на соответствующие ссылки.
  6.         Если одной ссылке вы хотите назначить несколько слов или словосочетаний, то их следует перечислить через запятую.
  7.         Из каждого набора слов плагин ищет и делает ссылкой в тексте только одно слово или фразу, которую первую найдет.
  8.  
  9.         Данный фильтр основан на плагине http://allforjoomla.ru/xplugins/plg-seolinks
  10.  
  11.         Адаптация для Yii - [email protected]
  12.  
  13.         Как использовать:
  14.  
  15.         include('ESeoLinks.php');
  16.         $eseolinks=new ESeoLinks();
  17.         $eseolinks->links=array(
  18.                             //это правило обработает слова:
  19.                             //1) тельфер, тельферы, тельферов и т.д.
  20.                             //2) таль, талей и т.д.
  21.                             //3) магазин, магазины, магазину и т.д.
  22.                            'тельфер*,тал*,магазин.'=>array(
  23.                                            'url'=>'http://telferkran.ru', // проставляемая ссылка
  24.                                            'maxNum'=>3, // кол-во ссылок на весь текст
  25.                                            'excludeUrls'=>array('/'), // какие url исключить из обработки
  26.                                            //'onlyUrls'=>array('/87-elektrotelfery_kanatnye.html',), // только на указанных url делать обработку
  27.                                           ),
  28.  
  29.                             //это правило обработает слова: тельфер, тельферы, тельферов и т.д.
  30.                            'тельфер*'=>array(
  31.                                            'url'=>'/', // проставляемая ссылка
  32.                                            'maxNum'=>2, // кол-во ссылок на весь текст
  33.                                            'excludeUrls'=>array('/'), // какие url исключить из обработки
  34.                                            //'onlyUrls'=>array('/87-elektrotelfery_kanatnye.html',), // только на указанных url делать обработку
  35.                                           ),
  36.  
  37.                            //это правило обработает слова: таль, талей и т.д.
  38.                            'тал*'=>array(
  39.                                            'url'=>'/',
  40.                                            'maxNum'=>2,// кол-во ссылок на весь текст
  41.                                            'excludeUrls'=>array('/'),
  42.                                            //'onlyUrls'=>array('/87-elektrotelfery_kanatnye.html',),
  43.                                           ),
  44.  
  45.                            //это правило обработает слова: склад, склады, складу и т.д.
  46.                            'склад.'=>array(
  47.                                            'url'=>'/',
  48.                                            'maxNum'=>2,// кол-во ссылок на весь текст
  49.                                            'excludeUrls'=>array('/'),
  50.                                            //'onlyUrls'=>array('/87-elektrotelfery_kanatnye.html',),
  51.                                           ),
  52.  
  53.                           );
  54.  
  55.         echo $eseolinks->processHtml($someText);
  56.  
  57. */
  58.  
  59. class ESeoLinks
  60. {
  61.         public $links=array();
  62.  
  63.         public function init()
  64.         {
  65.         }
  66.  
  67.     public static function maskContent($txt)
  68.         {
  69.         $txt = str_replace("\'","'",$txt);
  70.         $result = base64_encode($txt);
  71.         return $result;
  72.     }
  73.  
  74.     public static function unmaskContent($txt)
  75.         {
  76.         $result = base64_decode($txt);
  77.         return $result;
  78.     }
  79.  
  80.         public function processHtml($body)
  81.         {
  82.         if(count($this->links)==0) return $body;
  83.  
  84.         $uri=$_SERVER['REQUEST_URI'];
  85.  
  86.         $wordFormWildCards = array(
  87.             '\\\.'  =>  '#-#',
  88.             '\\\*'  =>  '#--#',
  89.             '.' =>  '[a-zа-яіїєґ]?',
  90.             '*' =>  '[a-zа-яіїєґ]*'
  91.         );
  92.         $clearRegs = array(
  93.             '#-#'   =>  '\\.',
  94.             '#--#'  =>  '\\*'
  95.         );
  96.  
  97.         $body = preg_replace("~(<\!\-\-seoLinks skip\-\->)(.*?)(<\!\-\-\/seoLinks skip\-\->)~sie",'"<:ZyX>".ESeoLinks::maskContent("\\2")."<:ZyX/>"',$body);
  98.         $body = preg_replace("~(<script)(.*?)(<\/script>)~sie",'"<:ZyX>".ESeoLinks::maskContent("$1$2$3")."<:ZyX/>"',$body);
  99.         $body = preg_replace("~(<\!\-\-)(.*?)(\-\-\>)~sie",'"<:ZyX>".ESeoLinks::maskContent("$1$2$3")."<:ZyX/>"',$body);
  100.         $body = preg_replace("~(<style)(.*?)(<\/style>)~sie",'"<:ZyX>".ESeoLinks::maskContent("$1$2$3")."<:ZyX/>"',$body);
  101.         $body = preg_replace("~(<h[1-6])(.*?)(<\/h[1-6]>)~sie",'"<:ZyX>".ESeoLinks::maskContent("$1$2$3")."<:ZyX/>"',$body);
  102.         $body = preg_replace("~(<a)(.*?)(<\/a>)~sie",'"<:ZyX>".ESeoLinks::maskContent("$1$2$3")."<:ZyX/>"',$body);
  103.         $body = preg_replace("~(<[a-z])(.*?)(>)~sie",'"<:ZyX>".ESeoLinks::maskContent("$1$2$3")."<:ZyX/>"',$body);
  104.         $body = $body.' ';
  105.         foreach($this->links as $word=>$link)
  106.                 {
  107.                         if(is_array($link['excludeUrls']) and in_array($uri,$link['excludeUrls'])) continue;
  108.  
  109.                         if( (is_array($link['onlyUrls']) and in_array($uri,$link['onlyUrls'])) or empty($link['onlyUrls']) )
  110.                         {
  111.                     $word = str_replace(', ',',',$word);
  112.                     $word = str_replace(' ,',',',$word);
  113.                     $word = str_replace(',','|',$word);
  114.                     $word = str_replace(array_keys($wordFormWildCards),array_values($wordFormWildCards),addslashes($word));
  115.                     $word = str_replace(array_keys($clearRegs),array_values($clearRegs),$word);
  116.  
  117.                     if($link['hasNum']>=$link['maxNum']) continue;
  118.  
  119.                                 $replace = '<a href="'.$link['url'].'">$2</a>';
  120.                     if(isset($link['template'])) $replace = strtr($link['template'],array('{url}'=>$replace));
  121.                     $replace = '$1'.$replace.'$3';
  122.                     $search = "~([\s\.\,\;\!\?\:\>\(\)\'\"\*\/В«])(".$word.")([\*\/\'\"\(\)\<\s\.\,\;\!\?\:В»])~siu";
  123.                     $body = preg_replace("~(<a)(.*?)(?=<\/a>)(<\/a>)~sie",'"<:ZyX>".ESeoLinks::maskContent("$1$2$3")."<:ZyX/>"',$body);
  124.                     $body = preg_replace($search, $replace, $body, $link['maxNum']);
  125.                     if(empty($body)) return $body;
  126.                     $link['hasNum']+= substr_count($body,'<a ');
  127.                         }
  128.         }
  129.         $body = preg_replace("~<\:ZyX>(.*?)(?=<\:ZyX\/>)<\:ZyX\/>~sie",'ESeoLinks::unmaskContent("$1")',$body);
  130.         $body = preg_replace("~<\:ZyX>(.*?)(?=<\:ZyX\/>)<\:ZyX\/>~sie",'ESeoLinks::unmaskContent("$1")',$body);
  131.  
  132.                 return $body;
  133.         }
  134.  
  135. }
Add Comment
Please, Sign In to add comment