如何在类别博客布局上显示主要文章的全文(即使它包含更多内容)?
是否有可以更改的后端设置或者我需要覆盖哪个PHP文件?我只想要显示主要文章的全文,介绍文章仍应显示只有简介文本的阅读。
提前致谢。
答案 0 :(得分:8)
您没有指定Joomla的哪个版本!所以这个回复是基于2.5.x
您需要为com_content
创建layout override,专门针对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
。
有两种方法可以获得全文。
最简单的&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字符串变量。