Кнопки социальных сетей в Joomla 2.5

Куда внедрять?
Какие и где взять?
  Блок Поделиться от Яндекса и панель от Pluso
  Плавающая вертикальная панель от Share42
Выборочное размещение


Upd: English version of the article: Social Media Buttons in Joomla 2.5. Selective placement.


Во время написания статьи о кастомизации страницы ошибки 404 я поднял тему, как отвязать от интерфейса страницы ненужные элементы. Отдельная статья посвящена выборочному скрытию модуля хлебных крошек. Также я пришел к выводу о нецелесообразности показа социальных кнопок на странице 404. Возможны и другие случаи, когда соцкнопки стоит скрыть на определенных страницах или наоборот - выводить только на некоторых. В данном цикле статей я как раз и столкнулся с подобной необходимостью: панели от Яндекса и Share42 выведены в соответствующих статьях исключительно для иллюстрации, сам же я использую вариант от Pluso. Поэтому я решил добавить сабжевую тему в цикл, а заодно сослаться на нее из статьи о 404-й станице как на один из этапов ее настройки.

Итак, определим условие, по которому будем фильтровать вывод блока кнопок. Если цель - вывести его только на страницах определенных статей, то для каждой из них оно примет следующий вид:

$article_id = explode(':', JRequest::getVar('id'));
if (JRequest::getVar('view') == 'article' &&
    $article_id[0] == '[Article ID]') ...

Здесь [Article ID] - идентификатор материала, выяснить значение которого легко в административном сервисе из списка материалов, либо же зайдя на страницу редактирования статьи. Соответственно, для скрытия кнопок на некоторых страницах к приведенной конструкции добавляется оператор отрицания !.

Таким образом, в файле шаблона статьи код панели кнопок, добавленный как описано в первой статье цикла, обрамляется условным оператором if. Например, на моем двуязычном сайте ID русской и английской страниц 404 соответственно - 80 и 448. Фрагмент кода с кнопками от Pluso выглядит следующим образом:

<?php
  $article_id = explode(':', JRequest::getVar('id'));
  if (!(JRequest::getVar('view') == 'article' &&
        ($article_id[0] == '80' || $article_id[0] == '448'))) {
?>
<script type="text/javascript">(function() {
  if (window.pluso)if (typeof window.pluso.start == "function") return;
  var d = document, s = d.createElement('script'), g = 'getElementsByTagName';
  s.type = 'text/javascript'; s.charset='UTF-8'; s.async = true;
  s.src = ('https:' == window.location.protocol ? 'https' : 'http') + '://share.pluso.ru/pluso-like.js';
  var h=d[g]('head')[0] || d[g]('body')[0];
  h.appendChild(s);
})();</script>
<div class="pluso" data-options="big,square,line,horizontal,counter,theme=06" data-services="facebook,twitter,vkontakte,odnoklassniki,yandex,moimir,google,linkedin" data-background="transparent"></div>
<?php } ?>

Замените 80 и 448 на свои значения идентификаторов страниц. Кстати, если кому интересно, для случая, когда включен SEF (ЧПУ), условие могло бы выглядеть проще:

if (JRequest::getVar('id') == '[Article ID]') ...

Надеюсь, вы используете ЧПУ; однако наверняка бывают случаи, когда джумловоды по тем или иным соображениям его отключают. И если в первом случае JRequest::getVar('id') возвращает строку идентификатора, то во втором - ее же, но с приличным хвостом в виде алиаса материала, отделенного двоеточием. Так, при включенном SEF строка ID данной статьи - '630', в противоположном же случае была бы '630:knopki-sotsialnykh-setej-v-joomla-2-5-vyborochnoe-podklyuchenie'. Для этого и введена функция explode, отсекающая тот самый хвост, и это делает условие универсальным для обоих вариантов. Ну, это программистские тонкости, и вникать в них необязательно. Помните только, что условие с вытаскиванием номера из строки идентификатора материала гарантирует вам возможность отключения ЧПУ без скрытых побочных эффектов в логике вывода соцкнопок.

P.S. Напоследок хотелось бы заметить вот еще что. Многие мои статьи рассказывают, как кастомизировать Джумлу и ее расширения. Сам я понавносил уже немало полезных изменений в коды и на определенном этапе сделал открытие: палка, оказывается, о двух концах. Все кастомизации приходится тащить через обновления, выпускаемые, как мы знаем, достаточно часто. Как регулярно обновляться и при этом не потерять свои изменения - вот вопрос, которым я озаботился. При этом хотелось бы решение этой, не побоюсь этого слова, диалектической проблемы оптимизировать и при каждом апдейте и даже апгрейде тратить времени по-минимуму на восстановление кастомно добавленного функционала. Определенный сценарий в общих чертах уже выработан и применяется на практике. Планирую выделить время на изучение темы в сети, добавить лучшие идеи оттуда к своим и посвятить вопросу подробную статью. Кому интересно - подписывайтесь на обновления. А если кто имеет свои мысли по этому поводу и желает ими поделиться, может сделать это через камменты, контактную форму или на мыло ogri@ogri.me.

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