CMS Drupal

Очередной заказчик захотел чтобы на сайте рядом с новостями были кнопки для добавления данной новости в ту или иную социальную сеть. Т.к. я не большой любитель различного рода социальных сетей, то для меня это было в новику, поэтому для начала полез искать готовые решения.

Под руку попались модули типа addtoany, addthis и им подобные сервисы. Вроде и красиво и перечень сервисов богатый, но не было в них самого главного. А именно одноклассников. А для меня это было обязательным условием. Да и своего рода зависимость получается от сторонних разработчиков. Оно с одной стороны хорошо, т.к. не надо заморачиваться над тем, поменялся ли алгоритм добавления материала в соц. сеть, т.к. за тебя это должен сделать выбранный сервис. А с другой стороны, должен, но не обязан и можно пролететь. Поэтому проще добавить самодельные кнопочки, тем более что особой сложности в этом нет.

Я делал новости на типе материала "Заметка" (story), поэтому добавил в свою тему файл node-story.tpl.php.
В самом начале данного файла пишем код:

<?php
drupal_set_html_head('<script src="http://stg.odnoklassniki.ru/share/odkl_share.js" type="text/javascript" ></script>');
?>

Этим кодом мы подгружаем ява-скрипт. Он нужен, как не сложно догадаться для одноклассников. На сколько я знаю функция drupal_add_js не работает для внешних скриптов, поэтому используем drupal_set_html_head.

Далее переходим непосредственно к размещению кнопок социальных сетей.

  <?php
  $node_path = url($node->path,array('absolute'=>true));
  $cache_path_to_theme = base_path() . path_to_theme();
  ?>
  <div id="add-social">
    <!--Livejournal-->
    <noindex>
      <a rel="nofollow" href="http://www.livejournal.com/update.bml?event=<?php echo $node_path; ?>&subject=<?php echo $node->title; ?>" target="_blank" title="Опубликовать в своем блоге livejournal.com">
        <img src="<?php echo $cache_path_to_theme; ?>/images/icon_livejournal.gif" alt="Опубликовать в своем блоге livejournal.com">
      </a>
    </noindex>
    <!--Twitter-->
    <noindex>
      <a rel="nofollow" target="_blank" href="http://twitter.com/home?status=RT @allexx_info <?php echo $node->title; ?>: <?php echo $node_path; ?>" title="Добавить в Twitter">
        <img src="<?php echo $cache_path_to_theme; ?>/images/icon_twitter.gif" alt="Опубликовать в twitter.com">
      </a>
    </noindex>    
    <!--Vkontakte-->
    <noindex>
      <a href="http://vkontakte.ru/share.php?url=<?php echo $node_path; ?>" target="_blank" rel="nofollow">
        <img src="<?php echo $cache_path_to_theme; ?>/images/icon_vkontakte.gif" title="Поделиться ВКонтакте">
      </a>
    </noindex>
    <!--Facebook-->
    <noindex>
      <a rel="nofollow" target="_blank" href="http://www.facebook.com/sharer.php?u=<?php echo $node_path; ?>">
        <img src="<?php echo $cache_path_to_theme; ?>/images/icon_facebook.gif" title="Поделиться в Facebook">
      </a>
    </noindex>      
    <!--Odnoklassniki-->
    <noindex>
      <a rel="nofollow" href="<?php echo $node_path; ?>" onclick="ODKL.Share(this);return false;" >
        <img src="<?php echo $cache_path_to_theme; ?>/images/icon_odnoklassniki.gif" title="Поделиться в Одноклассниках">
      </a>
    </noindex>
  </div>

Мне для проекта необходимы были: Livejournal,Twitter,Facebook,Вконтакте и Одноклассники, поэтому именно эти кнопки и приведены в качестве примера. Остальные кнопки можно сделать по аналогии. Единственное замечание, не забудьте в коде для Твитера заменить значение @allexx_info на свое.

Комментарии

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Полезно. Молодец.

Не уверен, что правильно понял: вторую часть кода вставляем также в node-story.tpl.php?

admin аватар

Да, все правильно. Туда же, в story.tpl.php, в то место где вы хотите видеть эти кнопки.

Спасибо, друг! Я тут уже всю голову сломал, думая как же попроще сделать закладки для друпала.

я вообще ничего не понял, сколько ни лазил в инете нифига ничего нет, может кто подскажет ссамого начала, с установки модуля или вообще без модуля?

admin аватар

Да в том то все и дело, что никакого дополнительного модуля устанавливать не надо. Нужно просто добавить в папку с вашей темой новый файл node-story.tpl.php (если кнопки делаете для типа материала Заметка). Код данного файла будет равен коду файла node.tpl.php (который уже есть в вашей теме) плюс мои вставки в то место, где хотите видеть эти кнопки.

Чегот не работает...
Все ставил в node-blog.tpl (нужно к блогу привязать)

admin аватар

Единственное что может быть - это кэш не обновили.

Заработало, то я немного забыл режим пхп включить)))
Правда вылезла иная лажа... по идее ведь должно автоматом брать адрес страницы... А все кнопки ставят просто адрес главной((( не пойму что за беда(

admin аватар

Беда судя по всему в первой строчке:
$node_path = url($node->path,array('absolute'=>true));
Надо посмотреть что хранится в переменной $node->path или вообще посмотреть что там в $node: print_r($node). На крайняк можно задействовать $PHP_SELF

а можно более подробно? Я пока не настолько хорошо знаю где что в друпале, и довольно слабо знаю пхп(
Если здесь идет зависимость от самого формирования адреса, то используется обычный пазауто, связанный с таксономией.

admin аватар

Напишите там, где у вас идет код php, после строчки
$node_path = url($node->path,array('absolute'=>true));
такие строки:
echo $node_path;
echo $node->path;
echo $PHP_SELF;
И посмотрите что там у вас появится на экране при выводе страницы. Вот оттуда и будете плясать. Нужный вам вариант адреса присваиваете переменной $node_path, которая у вас дальше встречается по тексту при формировании ссылок. Хотя по идее $node_path уже должна содержать в себе адрес с учетом пазауто, т.е. прежде всего просто выведите на экран содрежимое этой переменной и посмотрите что там.

Целостного решения так и не нашел, решил проблемку поставиви возле <?php echo $node_path;?> (выводит корень сайта - мой_сайт.ру) <?php print drupal_get_path_alias($_GET['q']); ?> - выводит остальную часть адреса. Таким вот макаром по кирпичику собрал весь адрес))) теперь буду искать вариант как вывести титл страницы в этих сообщениях)) Потому как тоже не работает ((( Вообще странно, у всего народа все ок, а у меня полный пиздец, извините (((

спасибо огромное за такой полезный материал.
есть один вопрос. Как добавить google+

admin аватар

Не проверял, но если просто тупо взять код который гугл предлагает и вставить, то не получится?
https://developers.google.com/+/plugins/+1button/

получилось. жаль что нет возможности менять вид самой кнопки
Спасибо за совет

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <1c7>, <drupal5>, <drupal6>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".