2012-07-09 64 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)