AddThis в переопределении блога категории Joomla. Ссылки на соответствующие статьи

Я перезаписал blog.php для блога категории, чтобы поместить плагин для обмена социальными сетями AddThis внизу каждой статьи. Работаю на джумла 3.0.

Макет блога категории отображает много статей на странице. По умолчанию AddThis использует вашу текущую страницу, чтобы поделиться/лайкнуть/твитнуть/и т. д.

Мое добавление этого кода выглядит так:

<div class="article-sharing">
    <!-- AddThis Button BEGIN -->
    <div class="addthis_toolbox addthis_default_style">
        <a class="addthis_button_facebook_like" fb:like:layout="button_count"></a>
        <a class="addthis_button_tweet"></a>
        <a class="addthis_counter addthis_pill_style"></a>
    </div>
    <script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=undefined"></script>
    <!-- AddThis Button END -->
</div>

Что я, конечно, хочу, так это изменить используемый URL-адрес на соответствующую статью. Это возможно (http://support.addthis.com/customer/portal/articles/381242-url-title#.Ucd1HevmT2x).

Код должен выглядеть так (только с динамическими URL):

<div class="article-sharing">
    <!-- AddThis Button BEGIN -->
    <div class="addthis_toolbox addthis_default_style"
        addthis:url="http://example.com/blog/my-article-about-horses"
        addthis:title="The title of my article"
        addthis:description="The short article description">
        <a class="addthis_button_facebook_like" fb:like:layout="button_count"></a>
        <a class="addthis_button_tweet"></a>
        <a class="addthis_counter addthis_pill_style"></a>
    </div>
    <script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=undefined"></script>
    <!-- AddThis Button END -->
</div>

Было бы здорово, если бы кто-нибудь помог мне немного лучше понять, как я это делаю.

addthis:url="http://example.com/blog/my-article-about-horses"
addthis:title="The title of my article"
addthis:description="The short article description"

Вот полный код blog.php.

<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::addIncludePath(JPATH_COMPONENT.'/helpers');

JHtml::_('behavior.caption');
?>
<div class="blog<?php echo $this->pageclass_sfx;?>">
   <?php if ($this->params->get('show_page_heading', 1)) : ?>
   <div class="page-header">
      <h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1>
   </div>
<?php endif; ?>
<?php if ($this->params->get('show_category_title', 1) or $this->params->get('page_subheading')) : ?>
   <h2> <?php echo $this->escape($this->params->get('page_subheading')); ?>
      <?php if ($this->params->get('show_category_title')) : ?>
      <span class="subheading-category"><?php echo $this->category->title;?></span>
   <?php endif; ?>
</h2>
<?php endif; ?>
<?php if ($this->params->get('show_description', 1) || $this->params->def('show_description_image', 1)) : ?>
   <div class="category-desc">
      <?php if ($this->params->get('show_description_image') && $this->category->getParams()->get('image')) : ?>
      <img src="<?php echo $this->category->getParams()->get('image'); ?>"/>
   <?php endif; ?>
   <?php if ($this->params->get('show_description') && $this->category->description) : ?>
   <?php echo JHtml::_('content.prepare', $this->category->description, '', 'com_content.category'); ?>
<?php endif; ?>
<div class="clr"></div>
</div>
<?php endif; ?>
<?php $leadingcount = 0; ?>
<?php if (!empty($this->lead_items)) : ?>
   <div class="items-leading">
      <?php foreach ($this->lead_items as &$item) : ?>
      <div class="leading-article leading-<?php echo $leadingcount; ?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?>">
         <?php
         $this->item = &$item;
         echo $this->loadTemplate('item');
         ?>
      </div>
      <div class="clearfix"></div>
      <?php
      $leadingcount++;
      ?>
<div class="article-sharing">
   <!-- AddThis Button BEGIN -->
   <div class="addthis_toolbox addthis_default_style"
   addthis:url="http://example.com"
   addthis:title="An Example Title"
   addthis:description="An Example Description">
   <a class="addthis_button_facebook_like" fb:like:layout="button_count"></a>
   <a class="addthis_button_tweet"></a>
   <a class="addthis_counter addthis_pill_style"></a>
</div>
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=undefined"></script>
<!-- AddThis Button END -->
</div>

<?php endforeach; ?>
</div><!-- end items-leading -->
<div class="clearfix"></div>
<?php endif; ?>
<?php
$introcount = (count($this->intro_items));
$counter = 0;
?>
<?php if (!empty($this->intro_items)) : ?>
   <?php foreach ($this->intro_items as $key => &$item) : ?>
   <?php
   $key = ($key - $leadingcount) + 1;
   $rowcount = (((int) $key - 1) % (int) $this->columns) + 1;
   $row = $counter / $this->columns;

   if ($rowcount == 1) : ?>
   <div class="items-row cols-<?php echo (int) $this->columns;?> <?php echo 'row-'.$row; ?> row-fluid">
   <?php endif; ?>
   <div class="span<?php echo round((12 / $this->columns));?>">
      <div class="item column-<?php echo $rowcount;?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?>">
         <?php
         $this->item = &$item;
         echo $this->loadTemplate('item');
         ?>
         <div class="article-sharing">
            <!-- AddThis Button BEGIN -->
            <div class="addthis_toolbox addthis_default_style">
               <a class="addthis_button_facebook_like" fb:like:layout="button_count"></a>
               <a class="addthis_button_tweet"></a>
               <a class="addthis_counter addthis_pill_style"></a>
            </div>
            <script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=undefined"></script>
            <!-- AddThis Button END -->
         </div>
         
      </div><!-- end item -->
      <?php $counter++; ?>
   </div><!-- end spann -->
   <?php if (($rowcount == $this->columns) or ($counter == $introcount)): ?>         
</div><!-- end row -->
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>

<?php if (!empty($this->link_items)) : ?>
   <div class="items-more older-articles">
      <?php echo $this->loadTemplate('links'); ?>
   </div>
<?php endif; ?>
<?php if (!empty($this->children[$this->category->id])&& $this->maxLevel != 0) : ?>
   <div class="cat-children">
      <h3> <?php echo JTEXT::_('JGLOBAL_SUBCATEGORIES'); ?> </h3>
      <?php echo $this->loadTemplate('children'); ?> </div>
   <?php endif; ?>
   <?php if (($this->params->def('show_pagination', 1) == 1  || ($this->params->get('show_pagination') == 2)) && ($this->pagination->get('pages.total') > 1)) : ?>
   <div class="pagination">
      <?php  if ($this->params->def('show_pagination_results', 1)) : ?>
      <!-- <p class="counter pull-right hidden-phone"> <?php echo $this->pagination->getPagesCounter(); ?> </p> -->
   <?php endif; ?>
   <?php echo $this->pagination->getPagesLinks(); ?> </div>
<?php  endif; ?>
</div>

Обновлять

Спасибо Ахмад за ответ. Это очень помогло.

Это мой текущий код AddThis в файле blog_item.php. Это хорошо работает для Twitter, электронной почты и т. д. Но у меня есть некоторые проблемы, когда дело доходит до Facebook. Название и описание addthis: не используются. Вместо этого используются теги OG, которые есть в файле index.php. Он по-прежнему ссылается на правильную статью при нажатии на общую ссылку на Facebook. Это может немного сбить пользователя с толку — когда он/она получает всплывающее окно «Поделиться в Facebook», там нет ничего о статье, которой он/она хочет поделиться, — только информация о странице в целом.

<div class="article-sharing">
    <!-- AddThis Button BEGIN -->
    <div class="addthis_toolbox addthis_default_style"
    addthis:url="http://www.tolt-inspiration.com<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid)); ?>"
    addthis:title="<?php echo $this->escape($this->item->title); ?>"
    addthis:description="<?php echo $this->escape($this->item->metadesc); ?>">
    <a class="addthis_button_facebook_like" fb:like:layout="button_count"
    addthis:title="<?php echo $this->escape($this->item->title); ?>"
    addthis:description="<?php echo $this->escape($this->item->metadesc); ?>"></a>
    <a class="addthis_button_tweet"></a>
    <a class="addthis_counter addthis_pill_style"></a>
</div>
<!-- AddThis Button END -->
</div>

Как это исправить?


person Leopold Kristjansson    schedule 23.06.2013    source источник
comment
Я случайно проверял сообщение, когда обнаружил, что вы внесли некоторые изменения. Если вы хотите уведомить пользователей о своем обновлении, было бы здорово, если бы вы разместили комментарий в качестве ответа на мой ответ. Таким образом, я получаю уведомление о том, что вы обновили вопрос, и могу видеть вас и помогать вам. Найдите время, чтобы просмотреть раздел справки на Stackoverflow =), чтобы получить максимальную пользу от веб-сайта. Я рассмотрю ваше обновление и обновлю свой ответ.   -  person Ahmad Alfy    schedule 27.06.2013
comment
Что касается проблемы Facebook, вы можете проверить, является ли текущее представление статьей, не повторяйте теги OG, которые вы добавили в свой index.php, и вместо этого будут использоваться теги addthis. Если у вас возникнут проблемы с этим, я с радостью опубликую код.   -  person Ahmad Alfy    schedule 27.06.2013
comment
Еще раз спасибо Ахмад. Я не совсем понял часть facebook OG. Не могли бы вы рассказать об этом подробнее?   -  person Leopold Kristjansson    schedule 01.07.2013
comment
Как вы включаете часть facebook OG в свой шаблон?   -  person Ahmad Alfy    schedule 03.07.2013


Ответы (1)


Примечание по редактированию основных файлов

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

обновление: не заметил в заголовке вопроса, что OP уже работает над переопределением.

Как отображается вид категории Joomla

Разберем представление категорий в Joomla (в порядке выполнения). Он начинается с default.php (мать всех представлений). Затем либо загружается:

  1. blog.php (for blog view; obviously) This part output the category description, image, title, columns ... etc and will call the following parts:
    1. blog_item.php -- display the article <- This is the file you should be working on.
    2. blog_links.php
  2. default_items.php (для списка)

Для Joomla 1.5 до <span class="article_separator">&nbsp;</span> добавьте код

Для Joomla 2.5 до <div class="item-separator"></div> добавьте код

Код

<div class="article-sharing">
   <!-- AddThis Button BEGIN -->
   <div class="addthis_toolbox addthis_default_style"
   addthis:url="<?php echo $this->item->readmore_link; ?>"
   addthis:title="<?php echo $this->escape($this->item->title); ?>"
   addthis:description="<?php echo $this->escape($this->item->metadesc); ?>">
   <a class="addthis_button_facebook_like" fb:like:layout="button_count"></a>
   <a class="addthis_button_tweet"></a>
   <a class="addthis_counter addthis_pill_style"></a>
</div>

Добавление <script>

Обратите внимание, что сейчас мы еще не добавили добавить это <script> . Вы не хотите добавлять его в blog_item.php, иначе он будет добавлен несколько раз. Мы добавим его в blog.php. Чтобы добавить его с помощью API Joomla:

Сразу после:

defined('_JEXEC') or die('Restricted access');

Добавлять:

$doc =& JFactory::getDocument();
$doc->addScript("//s7.addthis.com/js/300/addthis_widget.js#pubid=undefined");

Примечание

Добавлять скрипт методом addScript не обязательно, но это предпочтительнее, чем просто добавлять его в шаблон. Некоторые плагины, например, перемещают каждый тег скрипта прямо перед закрытием тега body; Он обеспечивает способ схватить этот объект.

person Ahmad Alfy    schedule 24.06.2013