Как заменить ссылки в комментариях на JS.

как заменить ссылку на JS

На WebOnLife, как и на многих других сайтах, в форме комментариев есть поле сайт. Редко кто оставляет это поле не заполненным и внешних ссылок накопилось достаточно много. Ссылки были закрыты в nofollow, но есть мнение что это не спасает от потери веса. Ещё меня не устраивало то что ссылки открывались в этом же окне, а не в новом.

Обе проблемы решаются одной строчкой кода на Javascript. Вместо старого доброго тега <a> нужно вставить

<span onclick="window.open('URL сайта')">комментатор</span>

или если хотите чтобы ссылка открывалась в этом же окне

<span onclick = "location.href = 'URL сайта'">комментатор</span>

Теперь всё это нужно вставить в тему. Для этого берём файл comment.tpl.php. Если его нет в папке с темой, скопируйте его туда из папки с модулем comment. В дефолтном шаблоне за вывод имени комментатора и даты отвечает переменная $submitted. Она содержит данные из переменных $author и $created. В $created - дата создания комментария. В $author храниться имя комментатора. Проблема в том, что $author выводит или текст или ссылку, если было заполнено поле сайт. А нам нужно получить отдельно имя и URL. Поэтому создадим свои переменные, а нужные нам данные получим следующим образом.

/*URL*/
$content['comment_body']['#object']->homepage
/*Имя*/
$content['comment_body']['#object']->name

Не забываем о пользователях не заполнивших поле сайт. Для них, используя конструкцию elseif, будем выводить стандартную переменную $author. Приведённый ниже код нужно вставить вместо

<?php print $submitted; ?>

Как я уже говорил в переменной $submitted, кроме имени содержится дата, поэтому не забываем про $created. В итоге получается такой код

<?php $commenter_url = $content['comment_body']['#object']->homepage;
    $comment_author = $content['comment_body']['#object']->name;
    if ($commenter_url) : ?>
      <span class="commenter_url" onclick = "window.open('<?php print $commenter_url; ?>')" title="<?php print $commenter_url; ?>"><?php print $comment_author; ?></span>
    <?php else : ?>
      <?php print $author; ?>
    <?php endif; ?>
<?php print $created?>

Для комментаторов без сайта можно использовать созданную нами переменную $commenter_author. Для простого блога разницы не заметна. Другое дело когда у вас сайт на котором есть зарегистрированные пользователи и ссылки ведут на их профиль. В этом случае только $author.

UPD Если у вас стоит модуль gravatar, то аватарка также будет ссылкой на сайт комментатора. Пока не нашол ничего лучше чем удалить из файла gravatar.module

elseif (!empty($account->homepage)) {
// If user is anonymous, create link to the commenter's homepage.
  $attributes = array(
    'title' => t('View user website.'),
    'rel' => 'external nofollow',
  );
  $variables['user_picture'] = l($variables['user_picture'], $account->homepage, array('attributes' => $attributes, 'html' => TRUE));
}

 

Member for

49 лет 7 месяцев

У себя сделал проще, просто под комментарием вывел адрес блога в виде текста. Кому интересен автор, тот скопирует и перейдет по ссылке. Таким образом быстро решился вопрос с внешними ссылками из комментариев.

Member for

49 лет 7 месяцев

Ну и как результаты?
Я вот тоже слышал что поисковики (по крайней мере гугль) научились хавать js, но пока заспамленности с сайта не вижу. Вот тоже подумывал сделать просто текстом, интересно бы найти какое-нибудь исследование по этому поводу.
Олег, Вы никаких данных пока не подбивали?

Member for

6 лет 4 месяца

Данных не подбивал. Пару дней назад обнаружил что модуль gravatar делает аватарку ссылкой в итоге колво ссылок с сайта не уменьшилось. Только вчера исправил 

Member for

6 лет 4 месяца

вместо кода из статьи юзаем это

<?php $commenter_url = $content['comment_body']['#object']->homepage;
    $comment_author = $content['comment_body']['#object']->name;
    if ($commenter_url) : ?>
      <span class="commenter_url"><?php print $comment_author; ?> автор сайта <?php print $commenter_url; ?></span>
    <?php else : ?>
      <?php print $author; ?>
    <?php endif; ?>
<?php print $created?>

 

Добавить комментарий

Содержимое данного поля является приватным и не предназначено для показа.