如何在分类博客布局中显示主题文章的全部内容(即使它包含“阅读更多”)?
是否有后端设置可以更改或需要覆盖哪个PHP文件?我只想显示主题文章的全文,引言文章应仍然显示“阅读更多”,仅带有引言文字。
提前致谢。
是否有后端设置可以更改或需要覆盖哪个PHP文件?我只想显示主题文章的全文,引言文章应仍然显示“阅读更多”,仅带有引言文字。
提前致谢。
您没有说明使用的Joomla!版本,因此本回复基于2.5.x版本。
您需要为com_content
创建一个布局覆盖,特别是针对category
视图模板文件blog.php
或blog_item.php
。
如果您的模板已经安装了com_content
的覆盖,则可以在此位置找到它:
/templates/your-template/html/com_content/category/
component
目录中复制原始文件,该目录位于/components/com_content/views/category/tmpl/
在该目录下,您会发现一系列以blog
开头、以.php
结尾的文件-您可以通过将它们复制到上面列出的第一个路径来覆盖其中1个或所有文件。注意:只复制需要更改的文件,因为Joomla聪明地在默认目录中查找,如果在覆盖位置没有找到版本。
默认的Joomla! 2.5安装包含这些博客文件:blog_children.php
blog_item.php
blog_links.php
blog.php
blog.php
是主文件,它根据需要包含子布局,如blog_item.php
。blog.php
和blog_item.php
,并找到一种方法来检查是否处于前导项中。一旦您知道您在前导项中,您将想要回显项目的全部文本。
blog_item.php
通常只输出简介文本,类似于以下行:
<?php echo $this->item->introtext; ?>
您将想要完整的文本回显,因此,在您将上述行包装在一个if
中以检查是否正在执行前导项之后,您的输出行将看起来像这样:
<?php echo $this->item->introtext.$this->item->fulltext; ?>
注意:我还没有检查这是否有效,这只是猜测,并依赖于$item
具有来自#__content
表的完整行。echo
$this->item->fulltext
。/components/com_content/models/articles.php
的核心文件中进行修改,从function getListQuery()
中的第一个$query->select()
开始,该行位于/附近的 line 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, ' .
fulltext
连接到第一篇文章的introtext
中。getTable
在第一项领先项目的blog.php
中使用$this->item->id加载文章,因此在大约54行之间,在<?php
和$this->item = &$item;
之间加入:if($leadingcount == 0) {
$contentTable = JTable::getInstance('Content');
if($contentTable->load($item->id)) {
$item->introtext .= $contentTable->fulltext;
}
}
<?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; ?>
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)
在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字符串变量。
$this->item->fulltext
在分类博客布局中不可用。而且我不知道如何强制从数据库加载它。 - Anriëtte Myburghblog.php
覆盖文件中,并在echo $this->loadTemplate('item');
之前添加了$this->item->leading = true;
进行测试,在blog_item.php
中进行了$this->item->leading
是否为 true 的测试,然后将“阅读更多”文本更改为“LINK”,如下所示:echo ($this->item->leading ? "LINK" : JText::sprintf('COM_CONTENT_READ_MORE_TITLE'));
。这是正确的 Joomla 术语吗? - Anriëtte MyburghJText::_()
而不是sprintf
版本。只有在将变量插入字符串时才需要使用sprintf
版本。 - Craigsprintf
是 Joomla 的核心函数,我只是在其中添加了"LINK"
。 - Anriëtte Myburgh