0

我已经覆盖了“blog.php”,以便类别博客将 AddThis 社交媒体共享插件放在每篇文章的底部。在 joomla 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>

更新

谢谢艾哈迈德的回答。它帮了很多忙。

这是我当前在 blog_item.php 文件中的 AddThis 代码。它适用于 Twitter、电子邮件等。但我在使用 Facebook 时遇到了一些问题。“addthis:title”和描述没有被使用。相反,我在 index.php 文件中的 OG 标签正在被使用。当在 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>

如何解决?

4

1 回答 1

0

编辑核心文件的注意事项

首先让我们澄清一下,编辑 Joomla 的核心文件是一种不好的做法。您应该始终使用覆盖。这样,您可以确保在 Joomla 更新时您的更改不会被覆盖。

更新:没有注意到问题标题说 OP 已经在进行覆盖。

Joomla 类别视图是如何呈现的

让我们剖析 Joomla 中的类别视图(按执行顺序)。它以default.php(所有视图之母)开始,然后加载:

  1. blog.php(用于博客视图;显然)这部分输出类别描述、图像、标题、列...等,并将调用以下部分:
    1. blog_item.php -- 显示文章<- 这是您应该处理的文件。
    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. 要使用 Joomla 的 API添加它:

紧接着:

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

添加:

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

笔记

使用该方法添加脚本addScript不是必需的,但它比简单地添加到模板中更好。例如,一些插件会在关闭 body 标签之前移动每个脚本标签;它提供了一种抓住该对象的方法。

于 2013-06-24T07:00:26.840 回答