static_rocket_468x60.jpg

Как заменить ссылки в комментариях на 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. Поэтому создадим свои переменные, а нужные нам данные получим следующим образом.

  1. /*URL*/
  2. $content['comment_body']['#object']->homepage
  3. /*Имя*/
  4. $content['comment_body']['#object']->name

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

<?php print $submitted; ?>

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

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

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

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

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

 

оценить статью: 
Средняя: 5 (7 оценок)

Комментарии

7
Аватар пользователя Андрей Масалкин

Андрей Масалкин пт, 02/19/2016 - 00:59

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

Аватар пользователя Oleg

Oleg пт, 02/19/2016 - 09:29

Оказалось поисковики понимают JS. Если они ссылки через JS будут признавать как обычные тоже буду выводить текстом.

Аватар пользователя Виталий Охрименко

Виталий Охрименко пт, 02/19/2016 - 09:33

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

Аватар пользователя Oleg

Oleg пт, 02/19/2016 - 11:23

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

Аватар пользователя Лидия Комарова

Лидия Комарова вс, 03/27/2016 - 10:50

Добрый день, Олег. Научите, как выводить адрес текстом. Буду признательна.

Аватар пользователя Oleg

Oleg вс, 03/27/2016 - 21:07

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

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

 

Аватар пользователя Лидия Комарова

Лидия Комарова пн, 03/28/2016 - 13:25

Благодарю, попробую.

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