如何在类别博客布局中显示领先文章的全文(即使它包含更多阅读内容)?Joomla - 仅显示类别博客布局中的主要文章的全文
是否有可以更改的后端设置或需要覆盖哪个PHP文件?我只想要领导文章的全文显示,介绍文章仍然应该只显示介绍文本的readmore。
在此先感谢。
如何在类别博客布局中显示领先文章的全文(即使它包含更多阅读内容)?Joomla - 仅显示类别博客布局中的主要文章的全文
是否有可以更改的后端设置或需要覆盖哪个PHP文件?我只想要领导文章的全文显示,介绍文章仍然应该只显示介绍文本的readmore。
在此先感谢。
你不指定哪个版本的Joomla!所以这个答复是基于2.5.X
您将需要创建一个layout override为com_content
,专门为category
视图TMPL文件blog.php
或blog_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.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
核心文件中的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所以你应该能够做到这一点。
的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();
,你可以使用$全文字符串变量。
考虑到上面的两个答案,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)
谢谢,我会尝试这一点,是的,这确实是J 1 2.5。 – 2012-07-11 08:34:25
我试过这个,但是似乎'$ this-> item-> fulltext'不适用于分类博客布局。我不知道如何强制它从数据库加载。 – 2012-07-17 09:08:46
嗯..好的两件事你可以做,我会更新我的答案。 – Craig 2012-07-17 09:35:10