如何在類別博客佈局中顯示領先文章的全文(即使它包含更多閱讀內容)?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