3

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

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

提前致谢。

4

3 回答 3

8

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

您将需要创建一个布局覆盖com_content特别是为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- 您可以通过将它们复制到上面列出的第一个路径来覆盖其中的一个或全部。注意只复制您需要更改 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; ?>

您将希望全文回显,因此在将上面的行包裹在 anif中以检查您是否正在执行前导项目后,您的输出行将如下所示:

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

注意:我还没有检查过这个作品,这只是猜测,并且依赖于表格$item中的完整行。#__content

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

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

最简单的 & first 是从第153 行/附近开始的/components/com_content/models/articles.php第一个开始修改核心文件。在a.introtext之后和单个撇号之前添加“a.fulltext” ,因此该行如下所示:$query->select()function getListQuery()

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!更新证明方法(因此可能是更好的方法)是将整篇文章加载到覆盖中(丑陋但它不是黑客)并将 连接fulltextintrotext第一篇文章的。

要做到这一点,您只需使用getTable$this->item->id 加载文章blog.php作为第一个前导项目,因此大约在第 54 行,在 the<?php$this->item = &$item;put 之间:

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

注意 if 仅限制在第一个主要文章,如果您删除 if 它将附加所有主要文章的全文。

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

于 2012-07-10T02:00:42.557 回答
2

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

复制blog.phpblog_item.php

来自组件/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->item->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->get('show_readmore') && $this->item->readmore)

进入

if ($params->get('show_readmore') && $this->item->readmore && !$this->item->leadingItem)

于 2013-06-20T11:00:40.910 回答
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 字符串变量。

于 2012-11-27T17:18:01.557 回答