Wordtolink

Тема в разделе "Программирование", создана пользователем goTravel, 09.09.2008.

  1. Offline

    goTravel Недавно здесь

    Регистрация:
    10.08.2008
    Сообщения:
    15
    Симпатии:
    2
    Пол:
    Мужской
    Друзья, помогитеее...особенно ДедКролик
    в продолжение темы http://forum.joom.ru/index.php?topic=4394.30, а то вещь полезная, но тема заглохла.
    давайте уже как-нибудь доделаем сие чудо (чудо в эттаче)

    Мне вот например интересннее всего вот что: можно ли приделать чтоб этот маботъ не выставлял ссылки на той странице, куда ссылается. Т.е. напр. слово Москва с урлом www.qwe.ru/q находится на этом же урле www.qwe.ru/q и в этом случае сцылку не проставляет.
     

    Вложения:

    • wordtolink.zip
      Размер файла:
      1.6 КБ
      Просмотров:
      11
  2.  
  3. Offline

    _voland_ специалист

    Регистрация:
    12.04.2008
    Сообщения:
    2 173
    Симпатии:
    102
    Пол:
    Мужской
    Есть плагин с такой функциональностью для 1.5 - только не доделан, установщика точнее нет
     
  4. Offline

    goTravel Недавно здесь

    Регистрация:
    10.08.2008
    Сообщения:
    15
    Симпатии:
    2
    Пол:
    Мужской
    у меня 1.012 :'(
    Блин, а мне казалось это не сложно сделать, там пару строчек типа if Link=url, link-must die и все... хотя я не шарю

    Добавлено через 8 минут
    а еще бы сделать чтоб слова целиком выделялись... но это потом, это не так важно
     
    Последнее редактирование: 09.09.2008
  5. Offline

    kokus Недавно здесь

    Регистрация:
    01.06.2008
    Сообщения:
    35
    Симпатии:
    0
    Пол:
    Мужской
    Ух ты, какой замечательный мамбот! Ух ты какая старая тема)
    ДедКролик, после большого перерыва присоединяюсь к просьбе goTravelа, очень полезный мамбот, но хотелось бы еще некоторые фишечки.
    А именно:
    1) чтобы страница не ссылалась сама на себя
    2) чтобы была возможность добавить к ссылкам title
    3) чтобы была возможность выбора количества замен как в ludo autolinkbot
    A - замена всех совпадений на странице
    F - замена первого совпадения
    L - замена последнего совпадения
    Очень не хватает этих функций. Может быть, за такую работу потребуется не только моральное вознаграждение? Я не против, да наверно и не только я был бы рад если б у тебя нашлось время для такой доработки.
     
  6. Dead Krolik
    Offline

    Dead Krolik специалист

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Помнится мне кто-то этот мамбот доделывал. А потом еще передо мной хвастался.
     
  7. Offline

    kokus Недавно здесь

    Регистрация:
    01.06.2008
    Сообщения:
    35
    Симпатии:
    0
    Пол:
    Мужской
    А как бы разыскать его? Или того кто хвастался, или сам мамбот :)
     
  8. Offline

    goTravel Недавно здесь

    Регистрация:
    10.08.2008
    Сообщения:
    15
    Симпатии:
    2
    Пол:
    Мужской
    Я тут его помучал не заморачиваясь, лишь бы работало как мне надо. Вот файлик wordtolink.php

    Изменения:
    - Выделяет только слова, а не части слов
    - Не ссылается на себя
    - Если часть текста страницы не нужно обрабатывать мамботом: в начало этой страницы написать <!--nowtl--> а текст, который не обрабатывать выделить так : <!--nowtl(-->Наш супертекст<!--)nowtl-->. Все эти новтл'ы писать через хтмл

    Изменить $yoururl = 'http://www.yoursite.ru/content/';

    А вообще надо все переделать не explode'ом, а регулярками сделать эти новтл...лень

    wordtolink.php
    Код (PHP):
    1. <?php
    2. //gotravel что-то переделал
    3. /**
    4. * @package Word replacer
    5. * @author  Dead Krolik [http://joom.ru]
    6. */
    7. defined( '_VALID_MOS' ) or die( 'Restricted access' );
    8. $_MAMBOTS->registerFunction( 'onPrepareContent', 'botWordToLink' );
    9.  
    10. /**
    11. * Main callback function. Here we parse text.
    12. */
    13. $yoururl = 'http://www.yoursite.ru/content/';
    14. function botWordToLink( $published, &$row, &$asdf, $page=1) {
    15.  
    16.     global $_MAMBOTS;
    17.     static $template='';
    18.  
    19.     if (!$published) {
    20.  
    21.         return true;
    22.     }
    23.  
    24.     if ($template=='') {
    25.  
    26.         global $database;
    27.  
    28.         $database->setQuery("SELECT params FROM #__mambots WHERE element = 'wordtolink' AND folder = 'content'");
    29.         $database->loadObject($mambot);
    30.  
    31.         $_MAMBOTS->_content_mambot_params['wordtolink'] = $mambot;
    32.  
    33.         $mambot = $_MAMBOTS->_content_mambot_params['wordtolink'];
    34.         $params = new mosParameters( $mambot->params );
    35.  
    36.         $template = $params->get('template');
    37.     }
    38.  
    39.     botWordToLink_replacer($row->text,$template);
    40.     botWordToLink_replacer($row->introtext,$template);
    41. }
    42.  
    43. /**
    44. * Function, that replaces words given in wordtolink.txt file in format
    45. * word1,word2,word3=http://site.com\n
    46. * another word=http://site2.com\n
    47. *
    48. * @param string Text, in which we replace our words
    49. * @param string Link template
    50. */
    51. function botWordToLink_replacer(& $text, $template) {
    52.  
    53.     static $replaces = '';
    54.     if ($replaces==='') {
    55.  
    56.         global $mosConfig_absolute_path;
    57.         $file = file($mosConfig_absolute_path.'/mambots/content/wordtolink.txt');
    58.  
    59.  
    60.  
    61.     //
    62. $artid = $_GET['id'];
    63. $itid = $_GET['Itemid'];
    64. $tasker = htmlentities($_GET['task']);
    65.  
    66.     if (!is_numeric($artid) || !is_numeric($itid)) {
    67.     $artid = '0';
    68.     $itid = '0';
    69.     }
    70. $thisurl = $yoururl .$tasker .'/' .$artid .'/' .$itid .'/';
    71. //
    72.  
    73.  
    74.         foreach ($file as $str) {
    75.  
    76.             $str = trim($str,2);
    77.             if (!$str) continue;
    78.  
    79.  
    80.  
    81.             list($w,$l) = explode("=",$str);
    82.             if (strtolower(strval(trim($l))) != strtolower(strval(trim($thisurl)))) {
    83.             $replaces[$w] = $l;
    84.             }
    85.         }
    86.     }
    87.  
    88.     if (!preg_match('<!--nowtl-->',$text)) {
    89.  
    90.     foreach($replaces as $replace => $link) {
    91.  
    92.         $mreplaces = explode(',',$replace);
    93.         foreach($mreplaces as $mreplace) {
    94.  
    95.             $text_link = $template;
    96.             $text_link = str_replace("{WORD}",$mreplace,$text_link);
    97.             $text_link = str_replace("{LINK}",$link,$text_link);
    98.  
    99.             $text = ereg_replace('([^A-Za-zА-Яа-я])'.$mreplace.'([^A-Za-zА-Яа-я])','\\1'.$text_link.'\\2',$text);
    100.  
    101.         }
    102.     }
    103.     }
    104.      else {
    105.  
    106.         $before = explode('<!--nowtl(-->',$text);
    107.         $firstlink[] = $before[0];
    108.         $nolink[] = '';
    109.         $afternolink[] = '';
    110.  
    111.         for($i=1;$i<count($before);$i++) {
    112.         $elem = $before[$i];
    113.         $after = explode("<!--)nowtl-->",$elem);
    114.         $nolink[]=$after[0];
    115.         $afternolink[]=$after[1];
    116.         $firstlink[]='';
    117.         }
    118.  
    119.       for($x=0;$x<$i;$x++) {
    120.       $fl=$fl.'<!--rzbitnaxxalles-->'.$firstlink[$x];
    121.       $nl=$nl.'<!--rzbitnaxxalles-->'.$nolink[$x];
    122.       $anl=$anl.'<!--rzbitnaxxalles-->'.$afternolink[$x];
    123.       }
    124.  
    125.  
    126.  
    127.  
    128.     foreach($replaces as $replace => $link) {
    129.  
    130.         $mreplaces = explode(',',$replace);
    131.         foreach($mreplaces as $mreplace) {
    132.  
    133.             $text_link = $template;
    134.             $text_link = str_replace("{WORD}",$mreplace,$text_link);
    135.             $text_link = str_replace("{LINK}",$link,$text_link);
    136.  
    137. $fl = ereg_replace('([^A-Za-zА-Яа-я])'.$mreplace.'([^A-Za-zА-Яа-я])','\\1'.$text_link.'\\2',$fl);
    138. $anl = ereg_replace('([^A-Za-zА-Яа-я])'.$mreplace.'([^A-Za-zА-Яа-я])','\\1'.$text_link.'\\2',$anl);
    139.  
    140.     }
    141.     }
    142.  
    143.     $one = explode('<!--rzbitnaxxalles-->',$fl);
    144.     $two = explode('<!--rzbitnaxxalles-->',$nl);
    145.     $three = explode('<!--rzbitnaxxalles-->',$anl);
    146.  
    147.     $x=count($two);
    148.     for($z=0;$z<$x;$z++) {
    149.     $c = $c.$one[$z];
    150.     $c = $c.$two[$z];
    151.     $c = $c.$three[$z];
    152.     }
    153.     $text = $c;
    154.  
    155.     }
    156.  
    157. }
    158. ?>
     
    Последнее редактирование: 18.06.2010
    kokus нравится это.
  9. Offline

    kokus Недавно здесь

    Регистрация:
    01.06.2008
    Сообщения:
    35
    Симпатии:
    0
    Пол:
    Мужской
    Классно! То что работает с целыми словами большой плюс. Правда страница у меня все равно сама на себя почему-то ссылается после замены кода на ваш.
     
  10. Offline

    goTravel Недавно здесь

    Регистрация:
    10.08.2008
    Сообщения:
    15
    Симпатии:
    2
    Пол:
    Мужской
    Вот тут надо исправить $yoururl = 'http://www.yoursite.ru/content/';

    Если все исправлено, очистить кеш и обновит стр., или вообще кеш временно отключить пока тестирование
    И SEF родной должен быть
     
    Последнее редактирование: 18.06.2010
  11. Offline

    kokus Недавно здесь

    Регистрация:
    01.06.2008
    Сообщения:
    35
    Симпатии:
    0
    Пол:
    Мужской
    Странно, но не помогает(
     
  12. Offline

    goTravel Недавно здесь

    Регистрация:
    10.08.2008
    Сообщения:
    15
    Симпатии:
    2
    Пол:
    Мужской
    а можешь привести пример адреса страницы на которой стоит ссылка на себя.
     
  13. Offline

    kokus Недавно здесь

    Регистрация:
    01.06.2008
    Сообщения:
    35
    Симпатии:
    0
    Пол:
    Мужской
    Ага, отправил в личку.
     
  14. Offline

    goTravel Недавно здесь

    Регистрация:
    10.08.2008
    Сообщения:
    15
    Симпатии:
    2
    Пол:
    Мужской
    Вот переделал, теперь для всех SEF'ов должно срабатывать

    Код (PHP):
    1. <?php
    2. //gotravel что-то переделал
    3. /**
    4. * @package Word replacer
    5. * @author  Dead Krolik [http://joom.ru]
    6. */
    7. defined( '_VALID_MOS' ) or die( 'Restricted access' );
    8. $_MAMBOTS->registerFunction( 'onPrepareContent', 'botWordToLink' );
    9.  
    10. /**
    11. * Main callback function. Here we parse text.
    12. */
    13. function botWordToLink( $published, &$row, &$asdf, $page=1) {
    14.  
    15.     global $_MAMBOTS;
    16.     static $template='';
    17.  
    18.     if (!$published) {
    19.  
    20.         return true;
    21.     }
    22.  
    23.     if ($template=='') {
    24.  
    25.         global $database;
    26.  
    27.         $database->setQuery("SELECT params FROM #__mambots WHERE element = 'wordtolink' AND folder = 'content'");
    28.         $database->loadObject($mambot);
    29.  
    30.         $_MAMBOTS->_content_mambot_params['wordtolink'] = $mambot;
    31.  
    32.         $mambot = $_MAMBOTS->_content_mambot_params['wordtolink'];
    33.         $params = new mosParameters( $mambot->params );
    34.  
    35.         $template = $params->get('template');
    36.     }
    37.  
    38.     botWordToLink_replacer($row->text,$template);
    39.     botWordToLink_replacer($row->introtext,$template);
    40. }
    41.  
    42. /**
    43. * Function, that replaces words given in wordtolink.txt file in format
    44. * word1,word2,word3=http://site.com\n
    45. * another word=http://site2.com\n
    46. *
    47. * @param string Text, in which we replace our words
    48. * @param string Link template
    49. */
    50. function botWordToLink_replacer(& $text, $template) {
    51.  
    52.     static $replaces = '';
    53.     if ($replaces==='') {
    54.  
    55.         global $mosConfig_absolute_path;
    56.         $file = file($mosConfig_absolute_path.'/mambots/content/wordtolink.txt');
    57.  
    58.  
    59.  
    60.     //
    61. $myseflink = 'index.php?'.$_SERVER['QUERY_STRING'];
    62. $thisurl = sefRelToAbs($myseflink);
    63. //
    64.  
    65.  
    66.         foreach ($file as $str) {
    67.  
    68.             $str = trim($str,2);
    69.             if (!$str) continue;
    70.  
    71.  
    72.  
    73.             list($w,$l) = explode("=",$str);
    74.             if (strtolower(strval(trim($l))) != strtolower(strval(trim($thisurl)))) {
    75.             $replaces[$w] = $l;
    76.             }
    77.         }
    78.     }
    79.  
    80.     if (!preg_match('<!--nowtl-->',$text)) {
    81.  
    82.     foreach($replaces as $replace => $link) {
    83.  
    84.         $mreplaces = explode(',',$replace);
    85.         foreach($mreplaces as $mreplace) {
    86.  
    87.             $text_link = $template;
    88.             $text_link = str_replace("{WORD}",$mreplace,$text_link);
    89.             $text_link = str_replace("{LINK}",$link,$text_link);
    90.  
    91.             $text = ereg_replace('([^A-Za-zА-Яа-я])'.$mreplace.'([^A-Za-zА-Яа-я])','\\1'.$text_link.'\\2',$text);
    92.  
    93.         }
    94.     }
    95.     }
    96.      else {
    97.  
    98.         $before = explode('<!--nowtl(-->',$text);
    99.         $firstlink[] = $before[0];
    100.         $nolink[] = '';
    101.         $afternolink[] = '';
    102.  
    103.         for($i=1;$i<count($before);$i++) {
    104.           $elem = $before[$i];
    105.         $after = explode("<!--)nowtl-->",$elem);
    106.         $nolink[]=$after[0];
    107.         $afternolink[]=$after[1];
    108.         $firstlink[]='';
    109.         }
    110.  
    111.       for($x=0;$x<$i;$x++) {
    112.       $fl=$fl.'<!--rzbitnaxxalles-->'.$firstlink[$x];
    113.       $nl=$nl.'<!--rzbitnaxxalles-->'.$nolink[$x];
    114.       $anl=$anl.'<!--rzbitnaxxalles-->'.$afternolink[$x];
    115.       }
    116.  
    117.  
    118.  
    119.  
    120.     foreach($replaces as $replace => $link) {
    121.  
    122.         $mreplaces = explode(',',$replace);
    123.         foreach($mreplaces as $mreplace) {
    124.  
    125.             $text_link = $template;
    126.             $text_link = str_replace("{WORD}",$mreplace,$text_link);
    127.             $text_link = str_replace("{LINK}",$link,$text_link);
    128.  
    129. $fl = ereg_replace('([^A-Za-zА-Яа-я])'.$mreplace.'([^A-Za-zА-Яа-я])','\\1'.$text_link.'\\2',$fl);
    130. $anl = ereg_replace('([^A-Za-zА-Яа-я])'.$mreplace.'([^A-Za-zА-Яа-я])','\\1'.$text_link.'\\2',$anl);
    131.  
    132.     }
    133.     }
    134.  
    135.     $one = explode('<!--rzbitnaxxalles-->',$fl);
    136.     $two = explode('<!--rzbitnaxxalles-->',$nl);
    137.     $three = explode('<!--rzbitnaxxalles-->',$anl);
    138.  
    139.     $x=count($two);
    140.     for($z=0;$z<$x;$z++) {
    141.     $c = $c.$one[$z];
    142.     $c = $c.$two[$z];
    143.     $c = $c.$three[$z];
    144.     }
    145.     $text = $c;
    146.  
    147.     }
    148.  
    149. }
    150. ?>
     
    Dead Krolik нравится это.
  15. Offline

    kokus Недавно здесь

    Регистрация:
    01.06.2008
    Сообщения:
    35
    Симпатии:
    0
    Пол:
    Мужской
    goTravel, спасибо огромное что помог разобраться!
     
  16. Offline

    Hensler Недавно здесь

    Регистрация:
    16.08.2007
    Сообщения:
    5
    Симпатии:
    0
    Пол:
    Мужской
    У меня просьба несколько экзотичная, но вдруг кто поможет.
    Можно ли чтобы мамбот производил замену разных слов по двум правилам? Например: 1 - ссылка с noindex; 2 - обычная ссылка.
    Будет ли под 1.5?
     
  17. MishaShimko
    Offline

    MishaShimko Недавно здесь

    Регистрация:
    01.06.2014
    Сообщения:
    1
    Симпатии:
    0
    Надеюсь тут еще кто-нибудь сидит... У меня пишет ошибку
    Warning
    : Invalid argument supplied for foreach() in /home/host1451/_inflib.ru/mambots/content/wordtolink.php on line 82
     

Поделиться этой страницей

Загрузка...