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

Anr*_*rgh 3 article joomla

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

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

提前致谢.

Cra*_*aig 8

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

您将需要创建一个布局覆盖com_content,专门为category视TMPL文件blog.phpblog_item.php.

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

/templates/your-template/html/com_content/category/
Run Code Online (Sandbox Code Playgroud)

如果没有,你可以从你的Joomla复制原始文件!2.5的component目录在/components/com_content/views/category/tmpl/

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

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

blog_children.php
blog_item.php
blog_links.php
blog.php
Run Code Online (Sandbox Code Playgroud)

基本上blog.php是主文件,它包括所需的子布局blog_item.php.

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

blog_item.php 通常只用这样的行输出介绍文本:

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

你需要将全文回显,所以在你将上面的行包裹起来if以检查你是否正在执行前导项时,你的输出行看起来像这样:

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

注意:我没有检查这是否有效它只是猜测并依赖于表$item中的完整行#__content.

因此,文章全文不会添加到标准安装中的文章项目中,即您可以简单地回显 $this->item->fulltext.

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

最简单的第一和是修改核心文件在/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, ' .
Run Code Online (Sandbox Code Playgroud)

第二种方式,和Joomla!更新证明方式(因此可能是更好的方法)是在覆盖中加载整篇文章(丑陋但不是黑客)并连接fulltextintrotext第一篇文章.

要做到这一点,你只需使用getTable$ this-> item-> id in blog.php为第一个前导项加载文章,所以在第54行左右,在put <?php$this->item = &$item;put 之间:

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

注意:if if仅限于第一篇主要文章,如果你删除if它将附加所有主要文章的全文.

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