nofollow к внешним ссылкам viewtopic.php

L

ler

Гость
#1
Вот создал такую функцию. Помогите допилить. Проблема в том что если в посте будут и внешние и внутренние ссылки, то nofollow не добавится
PHP:
function rel2nofollow($s){
if(!stristr($s,'http://мойтрекер.ru') AND !stristr($s,'http://мойсайт2.ru') AND !stristr($s,'http://мойсайт3.ua')){
$s = str_replace('<a','<a rel="nofollow"',$s);
return preg_replace('/(<a .*?href=\")([^>]+?)/i', '$1/out.php?url=$2', $s);
}
else return $s;
}
Нужно составить регулярное выражение на поиск ссылок <a>...</a> в переменной $message. Все совпадения добавить в массив. Форычить массив и к каждому значению применить функцию rel2nofollow
 

Nightmare

Разработчик
#4
Вообще я бы сделал не во viewtopic скорее бы вписал "это" в bb_code в генерацию ссылок
 

Nightmare

Разработчик
#5
В config.php
PHP:
$bb_cfg['allowed_url'] = array('URL1','URL2',...,'URLn');
includes/bb_code.php
Найти
PHP:
function init_replacements ()
    {
Вставить после
PHP:
global $bb_cfg;
Найти
PHP:
            "#\[url\](https?://$url_exp)\[/url\]#isu"                => '<a href="$1" class="postLink">$1</a>',
            "#\[url\](www\.$url_exp)\[/url\]#isu"                    => '<a href="http://$1" class="postLink">$1</a>',
            "#\[url=(https?://$url_exp)\]([^?\n\t].*?)\[/url\]#isu"  => '<a href="$1" class="postLink">$2</a>',
            "#\[url=(www\.$url_exp)\]([^?\n\t].*?)\[/url\]#isu"      => '<a href="http://$1" class="postLink">$2</a>',
Заменить на
PHP:
            "#\[url\](https?://$url_exp)\[/url\]#isu"                => (in_array(parse_url('$1',PHP_URL_HOST),$bb_cfg['allowed_url'])) ? '<a href="$1" class="postLink">$1</a>' : '<a rel="nofollow" href="$1" class="postLink">$1</a>',
            "#\[url\](www\.$url_exp)\[/url\]#isu"                    => (in_array(parse_url('http://$1',PHP_URL_HOST),$bb_cfg['allowed_url'])) ? '<a href="$1" class="postLink">$1</a>' : '<a rel="nofollow" href="http://$1" class="postLink">$1</a>',
            "#\[url=(https?://$url_exp)\]([^?\n\t].*?)\[/url\]#isu"  => (in_array(parse_url('$1',PHP_URL_HOST),$bb_cfg['allowed_url'])) ? '<a href="$1" class="postLink">$2</a>' : '<a rel="nofollow" href="$1" class="postLink">$2</a>',
            "#\[url=(www\.$url_exp)\]([^?\n\t].*?)\[/url\]#isu"      => (in_array(parse_url('http://$1',PHP_URL_HOST),$bb_cfg['allowed_url'])) ? '<a href="$1" class="postLink">$2</a>' : '<a rel="nofollow" href="http://$1" class="postLink">$2</a>',
// Замена добавленных не через bb_code ссылок
Найти
PHP:
return "<a href=\"$href\" class=\"postLink\">$name</a>";
Заменить
PHP:
return (in_array(parse_url($href,PHP_URL_HOST), $bb_cfg['allowed_url'])) ? "<a href=\"$href\" class=\"postLink\">$name</a>" : "<a rel=\"nofollow\" href=\"$href\" class=\"postLink\">$name</a>";
Написал на коленке, не проверял. В теории все должно работать. Только разрешенные ссылки скорее всего придется писать во всех возможных сочетаниях с www и без.
 

Dr_Brown

Пользователь
#6
Nightmare, ну наконецто, уже куча постов про это....скажите что значит разрешенные, те что в конфиге пропишешь ? Типа внутренние ?
 

Nightmare

Разработчик
#7
Dr_Brown, абсолютно верно, только те, которые нужно пропускать. По существу можно сделать следущее
PHP:
$bb_cfg['allowed_url'] = array($domain_name,'URL1','URL2',...,'URLn');
А URL1-URLn возможно url смежных проектов
 

Nightmare

Разработчик
#9
Dr_Brown, не обязательно у человека помимо трекера может быть еще куча замечательных проектов. Этакая перелинковка. Ну и вариант с продажой ссылок тоже рабочий. Главное, чтобы это все работало как положено. Была свободная минутка написал, тестировать к сожалению времени нет
 
Сверху