2012-07-09 119 views

回答

8

你不指定哪个版本的Joomla!所以这个答复是基于2.5.X

您将需要创建一个layout overridecom_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结尾的文件 - 你可以通过它们来应付上面列出的第一个路径覆盖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

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

最简单&第一是修改在/components/com_content/models/articles.php核心文件中的function getListQuery()始于第一$query->select()这将启动开/邻近线153。添加“a.fulltext”的a.introtext和单引号之前后,太行看起来是这样的:

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

要做到这一点,你只需使用getTable使用$这个 - >用品 - > id来加载文章中blog.php第一个领先的项目,因此在大约54行之间的<?php$this->item = &$item;地说:

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

NB如果只是将它限制在第一篇主要文章中,如果删除了它将附加所有主要文章的全文。

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

+0

谢谢,我会尝试这一点,是的,这确实是J 1 2.5。 – 2012-07-11 08:34:25

+0

我试过这个,但是似乎'$ this-> item-> fulltext'不适用于分类博客布局。我不知道如何强制它从数据库加载。 – 2012-07-17 09:08:46

+0

嗯..好的两件事你可以做,我会更新我的答案。 – Craig 2012-07-17 09:35:10

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(); 

,你可以使用$全文字符串变量。

2

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

副本blog.php的blog_item.php

组件/ com_content /视图/分类/ TMPL/

[我的模板]/HTML/com_content /分类/

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取代“回声$这个 - >用品 - > 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没有展现“更多...“在每篇文章

编辑线

如果($ params-> GET( 'show_readmore')& & $这个 - >用品 - > readmore)

底部按钮到

如果($ params-> GET( 'show_readmore')& & $这个 - >用品 - > readmore & & !$这个 - >用品 - > leadingItem)