简体   繁体   English

Joomla类别博客覆盖中的AddThis。 链接到相应的文章

[英]AddThis in Joomla Category Blog Override. Linking to corresponding articles

I've overwritten the "blog.php", for Category Blog to put the AddThis social media sharing plugin at the bottom of each article. 我已经覆盖了类别博客的“ blog.php”,以便将AddThis社交媒体共享插件放在每篇文章的底部。 Working on joomla 3.0 在joomla 3.0上工作

The Category blog layout displays many articles per page. 类别博客布局每页显示许多文章。 By default AddThis uses your current page to share/like/tweet/etc. 默认情况下,AddThis使用您当前的页面来共享/赞/鸣叫/等。

My add this code looks like this: 我添加此代码如下所示:

<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>

What I of course want is to change the URL being used to the corresponding article. 我当然想要的是更改用于相应文章的URL。 This is possible ( http://support.addthis.com/customer/portal/articles/381242-url-title#.Ucd1HevmT2x ). 这是可能的( http://support.addthis.com/customer/portal/articles/381242-url-title#.Ucd1HevmT2x )。

The code should look like this (only with dynamic urls): 代码应如下所示(仅适用于动态网址):

<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>

Would be great if someone could help me understand a bit better how I go about doing this. 如果有人可以帮助我更好地了解我如何做到这一点,那将很棒。

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

Here is the full blog.php code. 这是完整的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>

Update 更新资料

Thank you Ahmad for your answer. 谢谢艾哈迈德的回答。 It helped out a lot. 它帮了很多忙。

This is my current AddThis code within the blog_item.php file. 这是我当前在blog_item.php文件中的AddThis代码。 It works well for Twitter, email etc. But I have some issues when it comes to Facebook. 它适用于Twitter,电子邮件等。但是,关于Facebook,我有一些问题。 The "addthis:title" and description are being not being used. 没有使用“ addthis:title”及其描述。 Instead the OG tags I have in the index.php file are being used. 相反,正在使用index.php文件中包含的OG标签。 It still links to the correct article when the shared link is clicked on Facebook. 当在Facebook上单击共享链接时,它仍链接到正确的文章。 This can be a bit confusing for the user - when he/she get's the Facebook share pop-up there is nothing about the article that he/she wants to share - only info about the page in general. 这可能会使用户感到困惑-当他/她出现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>

How to fix that? 如何解决?

Note on editing core files 有关编辑核心文件的注意事项

First of all let's clarify that editing Joomla's core file is a bad practice. 首先让我们澄清一下,编辑Joomla的核心文件是一种不好的做法。 You should always use overrides . 您应该始终 使用替代 This way you make sure that your changes wont get overwritten when Joomla is updated. 这样,您可以确保更新Joomla时所做的更改不会被覆盖。

update: didn't notice the question title saying that OP is working on override already. 更新:没有注意到问题标题说OP已经在进行覆盖。

How Joomla category view is rendered Joomla类别视图的呈现方式

Let's dissect the category view in Joomla (in order of execution). 让我们在Joomla中剖析类别视图(按执行顺序)。 It starts with default.php (mother of all views) Then either loads: 它从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: blog.php( 用于博客视图;很明显 )这部分输出类别描述,图像,标题,列...等,并将调用以下部分:
    1. blog_item.php -- display the article <- This is the file you should be working on. blog_item.php -显示文章<-这是您应该使用的文件。
    2. blog_links.php blog_links.php
  2. default_items.php ( for list view ) default_items.php( 用于列表视图

For Joomla 1.5 before <span class="article_separator">&nbsp;</span> add the code 对于<span class="article_separator">&nbsp;</span>之前的Joomla 1.5 ,添加代码

For Joomla 2.5 before <div class="item-separator"></div> add the code 对于<div class="item-separator"></div>之前的Joomla 2.5 ,添加代码

The code 编码

<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>

Adding the <script> 添加<script>

Note that now we didn't add <script> yet. 注意,现在我们还没有添加 <script> You don't want to be adding it to blog_item.php or it will be added multiple times. 您不想将其添加到blog_item.php ,否则将被添加多次。 We will add it to blog.php . 我们将其添加到blog.php To add it using Joomla's API : 使用Joomla的API添加它:

Right after: 之后:

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

Add: 加:

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

Note 注意

Adding the script using the addScript method is not required but it is preferred than just adding it simply in the template. 不需要使用addScript方法添加脚本,但它比仅在模板中添加脚本addScript可取。 Some plugins for example move every script tag right before closing the body tag; 例如,某些插件会在关闭body标签之前立即移动每个script标签; It provides a way to grasp that object. 它提供了一种掌握该对象的方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM