Joomla - 仅显示类别博客布局中的主要文章的全文

时间:2012-07-09 13:59:50

标签: joomla article

如何在类别博客布局上显示主要文章的全文(即使它包含更多内容)?

是否有可以更改的后端设置或者我需要覆盖哪个PHP文件?我只想要显示主要文章的全文,介绍文章仍应显示只有简介文本的阅读。

提前致谢。

3 个答案:

答案 0 :(得分:8)

您没有指定Joomla的哪个版本!所以这个回复是基于2.5.x

您需要为com_content创建layout override,专门针对category视图tmpl文件blog.phpblog_item.php

如果您的模板已经为com_content安装了覆盖,您将在此位置找到它:

/templates/your-template/html/com_content/category/

如果没有,您可以从Joomla复制原始文件! 2.5 component

/components/com_content/views/category/tmpl/目录

在该目录中,您会找到以blog开头并以.php开头的一系列文件 - 您可以通过将它们复制到上面列出的第一条路径来覆盖1或所有这些文件。 N.B。只复制你需要更改Joomla的文件!如果它在覆盖位置找不到版本,那么它足够智能查看默认目录。

默认的Joomla! 2.5安装有这些博客文件:

blog_children.php
blog_item.php
blog_links.php
blog.php

基本上blog.php是主文件,它根据需要包含blog_item.php等子布局。

如果您使用的是默认的Joomla! 2.5文件,为了实现您的目标,您可能必须覆盖blog.phpblog_item.php,并找到一种方法来检查您是否在领先项目中。一旦你知道你在一个主要项目中,你就会想要回显该项目的全文。

blog_item.php通常只输出带有这样一行的简介文本:

<?php echo $this->item->introtext; ?>

在将if上面的行包裹起来以检查您是否正在执行主要项目后,输出行将如下所示:

您希望将全文回显。

<?php echo $this->item->introtext.$this->item->fulltext; ?>

注意: 我还没有检查这是否有效它只是推测而依赖于$item的完整行来自#__content表。

因此,文章全文未添加到标准安装中的文章项目中,即您只需回显 $this->item->fulltext

有两种方法可以获得全文。

最简单的&amp;首先是修改/components/com_content/models/articles.php核心文件,从$query->select()中的第一个function getListQuery()开始,该文件从第153行开始/附近开始。在 a.introtext 之后和单撇号之前添加'a.fulltext',所以该行看起来像这样:

function getListQuery()
{
    // Create a new query object.
    $db = $this->getDbo();
    $query = $db->getQuery(true);

    // Select the required fields from the table.
    $query->select(
        $this->getState(
            'list.select',
            'a.id, a.title, a.alias, a.title_alias, a.introtext, a.fulltext, ' .
            'a.checked_out, a.checked_out_time, ' .

第二种方式,和Joomla!更新证明方式(也可能是更好的方法)是在覆盖中加载整篇文章(丑陋但不是黑客)并将fulltext连接到第一篇文章的introtext。 / p>

要执行此操作,您只需使用getTable使用blog.php中的$ this-&gt; item-&gt; id为第一个首要项加载文章,因此在第54行左右, <?php$this->item = &$item;放置:

if($leadingcount == 0) {
    $contentTable = JTable::getInstance('Content');
    if($contentTable->load($item->id)) {
        $item->introtext .= $contentTable->fulltext;
    }
}

N.B。 if只是将它限制在第一篇主要文章中,如果你删除if它会附加所有主要文章的全文。

这适用于我的Joomla开发安装! 2.5.6所以你也应该能够做到这一点。

答案 1 :(得分:2)

考虑到上面的两个答案,blog.php和blog_item.php需要进行三项更改。这适用于Joomla 3.1最好是将这些文件复制到模板覆盖

复制 blog.php blog_item.php

来自 components / com_content / views / category / tmpl /

[我的模板] / html / com_content / category /

blog.php 的主要项目循环中添加一行:

  <?php foreach ($this->lead_items as &$item) : ?>
   <div class="leading-<?php echo ...?>">
                <?php
                    $this->item = &$item;
                    $this->item->leadingItem = true; //ADD THIS LINE !!!
                    echo $this->loadTemplate('item');
                ?>
            </div>
            <div class="clearfix"></div>
            <?php
               $leadingcount++;
            ?>
        <?php endforeach; ?>

blog_item.php 中,将“echo $ this-&gt; item-&gt; introtext; 替换为

if ($this->item->leadingItem){
//this is a leading article - show full text and remove "Read more..." button
        $itemID =  $this->item->id;
        $db =& JFactory::getDBO();
        $query = "SELECT `fulltext` FROM `#__content` WHERE `id` =" . $itemID;
        $db->setQuery($query);
        $fulltext = $db->loadResult();
        echo $this->item->introtext . $fulltext; 

    }else{

        echo $this->item->introtext; 
}

最后在 blog_item.php 中,不要在每篇文章的底部显示“阅读更多...”按钮

修改专栏

  

if($ params-&gt; get('show_readmore')&amp;&amp; $ this-&gt; item-&gt; readmore)

  

if($ params-&gt; get('show_readmore')&amp;&amp; $ this-&gt; item-&gt; readmore&amp;&amp;   !$&这 - GT;本期特价货品&GT; leadingItem)

答案 2 :(得分:1)

Joomla 2.5.x,在你的模板blog_item.php中:

$itemID =  $this->item->id;
$db =& JFactory::getDBO();
$query = "
SELECT `fulltext` 
FROM `#__content` 
WHERE `id` = $itemID;
";
$db->setQuery($query);
$fulltext = $db->loadResult();

你可以使用$ fulltext字符串变量。