Друзья, помогитеее...особенно ДедКролик в продолжение темы http://forum.joom.ru/index.php?topic=4394.30, а то вещь полезная, но тема заглохла. давайте уже как-нибудь доделаем сие чудо (чудо в эттаче) Мне вот например интересннее всего вот что: можно ли приделать чтоб этот маботъ не выставлял ссылки на той странице, куда ссылается. Т.е. напр. слово Москва с урлом www.qwe.ru/q находится на этом же урле www.qwe.ru/q и в этом случае сцылку не проставляет.
у меня 1.012 Блин, а мне казалось это не сложно сделать, там пару строчек типа if Link=url, link-must die и все... хотя я не шарю Добавлено через 8 минут а еще бы сделать чтоб слова целиком выделялись... но это потом, это не так важно
Ух ты, какой замечательный мамбот! Ух ты какая старая тема) ДедКролик, после большого перерыва присоединяюсь к просьбе goTravelа, очень полезный мамбот, но хотелось бы еще некоторые фишечки. А именно: 1) чтобы страница не ссылалась сама на себя 2) чтобы была возможность добавить к ссылкам title 3) чтобы была возможность выбора количества замен как в ludo autolinkbot A - замена всех совпадений на странице F - замена первого совпадения L - замена последнего совпадения Очень не хватает этих функций. Может быть, за такую работу потребуется не только моральное вознаграждение? Я не против, да наверно и не только я был бы рад если б у тебя нашлось время для такой доработки.
Я тут его помучал не заморачиваясь, лишь бы работало как мне надо. Вот файлик wordtolink.php Изменения: - Выделяет только слова, а не части слов - Не ссылается на себя - Если часть текста страницы не нужно обрабатывать мамботом: в начало этой страницы написать <!--nowtl--> а текст, который не обрабатывать выделить так : <!--nowtl(-->Наш супертекст<!--)nowtl-->. Все эти новтл'ы писать через хтмл Изменить $yoururl = 'http://www.yoursite.ru/content/'; А вообще надо все переделать не explode'ом, а регулярками сделать эти новтл...лень wordtolink.php Код (PHP): <?php //gotravel что-то переделал /** * @package Word replacer * @author Dead Krolik [http://joom.ru] */ defined( '_VALID_MOS' ) or die( 'Restricted access' ); $_MAMBOTS->registerFunction( 'onPrepareContent', 'botWordToLink' ); /** * Main callback function. Here we parse text. */ $yoururl = 'http://www.yoursite.ru/content/'; function botWordToLink( $published, &$row, &$asdf, $page=1) { global $_MAMBOTS; static $template=''; if (!$published) { return true; } if ($template=='') { global $database; $database->setQuery("SELECT params FROM #__mambots WHERE element = 'wordtolink' AND folder = 'content'"); $database->loadObject($mambot); $_MAMBOTS->_content_mambot_params['wordtolink'] = $mambot; $mambot = $_MAMBOTS->_content_mambot_params['wordtolink']; $params = new mosParameters( $mambot->params ); $template = $params->get('template'); } botWordToLink_replacer($row->text,$template); botWordToLink_replacer($row->introtext,$template); } /** * Function, that replaces words given in wordtolink.txt file in format * word1,word2,word3=http://site.com\n * another word=http://site2.com\n * * @param string Text, in which we replace our words * @param string Link template */ function botWordToLink_replacer(& $text, $template) { static $replaces = ''; if ($replaces==='') { global $mosConfig_absolute_path; $file = file($mosConfig_absolute_path.'/mambots/content/wordtolink.txt'); // $artid = $_GET['id']; $itid = $_GET['Itemid']; $tasker = htmlentities($_GET['task']); if (!is_numeric($artid) || !is_numeric($itid)) { $artid = '0'; $itid = '0'; } $thisurl = $yoururl .$tasker .'/' .$artid .'/' .$itid .'/'; // foreach ($file as $str) { $str = trim($str,2); if (!$str) continue; list($w,$l) = explode("=",$str); if (strtolower(strval(trim($l))) != strtolower(strval(trim($thisurl)))) { $replaces[$w] = $l; } } } if (!preg_match('<!--nowtl-->',$text)) { foreach($replaces as $replace => $link) { $mreplaces = explode(',',$replace); foreach($mreplaces as $mreplace) { $text_link = $template; $text_link = str_replace("{WORD}",$mreplace,$text_link); $text_link = str_replace("{LINK}",$link,$text_link); $text = ereg_replace('([^A-Za-zА-Яа-я])'.$mreplace.'([^A-Za-zА-Яа-я])','\\1'.$text_link.'\\2',$text); } } } else { $before = explode('<!--nowtl(-->',$text); $firstlink[] = $before[0]; $nolink[] = ''; $afternolink[] = ''; for($i=1;$i<count($before);$i++) { $elem = $before[$i]; $after = explode("<!--)nowtl-->",$elem); $nolink[]=$after[0]; $afternolink[]=$after[1]; $firstlink[]=''; } for($x=0;$x<$i;$x++) { $fl=$fl.'<!--rzbitnaxxalles-->'.$firstlink[$x]; $nl=$nl.'<!--rzbitnaxxalles-->'.$nolink[$x]; $anl=$anl.'<!--rzbitnaxxalles-->'.$afternolink[$x]; } foreach($replaces as $replace => $link) { $mreplaces = explode(',',$replace); foreach($mreplaces as $mreplace) { $text_link = $template; $text_link = str_replace("{WORD}",$mreplace,$text_link); $text_link = str_replace("{LINK}",$link,$text_link); $fl = ereg_replace('([^A-Za-zА-Яа-я])'.$mreplace.'([^A-Za-zА-Яа-я])','\\1'.$text_link.'\\2',$fl); $anl = ereg_replace('([^A-Za-zА-Яа-я])'.$mreplace.'([^A-Za-zА-Яа-я])','\\1'.$text_link.'\\2',$anl); } } $one = explode('<!--rzbitnaxxalles-->',$fl); $two = explode('<!--rzbitnaxxalles-->',$nl); $three = explode('<!--rzbitnaxxalles-->',$anl); $x=count($two); for($z=0;$z<$x;$z++) { $c = $c.$one[$z]; $c = $c.$two[$z]; $c = $c.$three[$z]; } $text = $c; } } ?>
Классно! То что работает с целыми словами большой плюс. Правда страница у меня все равно сама на себя почему-то ссылается после замены кода на ваш.
Вот тут надо исправить $yoururl = 'http://www.yoursite.ru/content/'; Если все исправлено, очистить кеш и обновит стр., или вообще кеш временно отключить пока тестирование И SEF родной должен быть
Вот переделал, теперь для всех SEF'ов должно срабатывать Код (PHP): <?php //gotravel что-то переделал /** * @package Word replacer * @author Dead Krolik [http://joom.ru] */ defined( '_VALID_MOS' ) or die( 'Restricted access' ); $_MAMBOTS->registerFunction( 'onPrepareContent', 'botWordToLink' ); /** * Main callback function. Here we parse text. */ function botWordToLink( $published, &$row, &$asdf, $page=1) { global $_MAMBOTS; static $template=''; if (!$published) { return true; } if ($template=='') { global $database; $database->setQuery("SELECT params FROM #__mambots WHERE element = 'wordtolink' AND folder = 'content'"); $database->loadObject($mambot); $_MAMBOTS->_content_mambot_params['wordtolink'] = $mambot; $mambot = $_MAMBOTS->_content_mambot_params['wordtolink']; $params = new mosParameters( $mambot->params ); $template = $params->get('template'); } botWordToLink_replacer($row->text,$template); botWordToLink_replacer($row->introtext,$template); } /** * Function, that replaces words given in wordtolink.txt file in format * word1,word2,word3=http://site.com\n * another word=http://site2.com\n * * @param string Text, in which we replace our words * @param string Link template */ function botWordToLink_replacer(& $text, $template) { static $replaces = ''; if ($replaces==='') { global $mosConfig_absolute_path; $file = file($mosConfig_absolute_path.'/mambots/content/wordtolink.txt'); // $myseflink = 'index.php?'.$_SERVER['QUERY_STRING']; $thisurl = sefRelToAbs($myseflink); // foreach ($file as $str) { $str = trim($str,2); if (!$str) continue; list($w,$l) = explode("=",$str); if (strtolower(strval(trim($l))) != strtolower(strval(trim($thisurl)))) { $replaces[$w] = $l; } } } if (!preg_match('<!--nowtl-->',$text)) { foreach($replaces as $replace => $link) { $mreplaces = explode(',',$replace); foreach($mreplaces as $mreplace) { $text_link = $template; $text_link = str_replace("{WORD}",$mreplace,$text_link); $text_link = str_replace("{LINK}",$link,$text_link); $text = ereg_replace('([^A-Za-zА-Яа-я])'.$mreplace.'([^A-Za-zА-Яа-я])','\\1'.$text_link.'\\2',$text); } } } else { $before = explode('<!--nowtl(-->',$text); $firstlink[] = $before[0]; $nolink[] = ''; $afternolink[] = ''; for($i=1;$i<count($before);$i++) { $elem = $before[$i]; $after = explode("<!--)nowtl-->",$elem); $nolink[]=$after[0]; $afternolink[]=$after[1]; $firstlink[]=''; } for($x=0;$x<$i;$x++) { $fl=$fl.'<!--rzbitnaxxalles-->'.$firstlink[$x]; $nl=$nl.'<!--rzbitnaxxalles-->'.$nolink[$x]; $anl=$anl.'<!--rzbitnaxxalles-->'.$afternolink[$x]; } foreach($replaces as $replace => $link) { $mreplaces = explode(',',$replace); foreach($mreplaces as $mreplace) { $text_link = $template; $text_link = str_replace("{WORD}",$mreplace,$text_link); $text_link = str_replace("{LINK}",$link,$text_link); $fl = ereg_replace('([^A-Za-zА-Яа-я])'.$mreplace.'([^A-Za-zА-Яа-я])','\\1'.$text_link.'\\2',$fl); $anl = ereg_replace('([^A-Za-zА-Яа-я])'.$mreplace.'([^A-Za-zА-Яа-я])','\\1'.$text_link.'\\2',$anl); } } $one = explode('<!--rzbitnaxxalles-->',$fl); $two = explode('<!--rzbitnaxxalles-->',$nl); $three = explode('<!--rzbitnaxxalles-->',$anl); $x=count($two); for($z=0;$z<$x;$z++) { $c = $c.$one[$z]; $c = $c.$two[$z]; $c = $c.$three[$z]; } $text = $c; } } ?>
У меня просьба несколько экзотичная, но вдруг кто поможет. Можно ли чтобы мамбот производил замену разных слов по двум правилам? Например: 1 - ссылка с noindex; 2 - обычная ссылка. Будет ли под 1.5?
Надеюсь тут еще кто-нибудь сидит... У меня пишет ошибку Warning: Invalid argument supplied for foreach() in /home/host1451/_inflib.ru/mambots/content/wordtolink.php on line 82