3

カテゴリブログのレイアウトに主要な記事の全文を表示するにはどうすればよいですか(続きを読むことが含まれている場合でも)。

変更できるバックエンド設定はありますか、またはどのPHPファイルを上書きする必要がありますか?主要な記事の全文のみを表示したいのですが、イントロの記事では、イントロのテキストのみで続きを表示する必要があります。

前もって感謝します。

4

3 に答える 3

8

Joomla!のバージョンを指定しません。したがって、この返信は2.5.xに基づいています

特にビューtmplファイルまたはのレイアウトオーバーライドを作成する必要があります。com_contentcategoryblog.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つまたはすべてを、上記の最初のパスにコピーすることでオーバーライドできます。注意: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することができます。

全文を取得するには2つの方法があります。

最も簡単で最初の方法は、 153行目またはその近くで始まる/components/com_content/models/articles.php最初の$query->select()ファイルから開始してコアファイルを変更することです。a.introtextの後、単一のアポストロフィの前に「a.fulltext」を追加すると、行は次のようになります。function getListQuery()

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, ' .

2番目の方法、そしてJoomla!更新証明の方法(したがって、おそらくより良い方法)は、記事全体をオーバーライドにロードし(醜いですが、ハックではありません)、最初の記事のに連結するfulltextことです。introtext

これを行うには、最初の先頭アイテムにgetTable$ this-> item-> idを使用して記事をロードするだけblog.phpなので、54行目でthe<?php$this->item = &$item;putの間に次のように入力します。

if($leadingcount == 0) {
    $contentTable = JTable::getInstance('Content');
    if($contentTable->load($item->id)) {
        $item->introtext .= $contentTable->fulltext;
    }
}

注意:ifは最初の主要な記事に限定し、ifを削除すると、すべての主要な記事の全文が添付されます。

これは、Joomlaの開発インストールで機能します!2.5.6なので、あなたもそれを行うことができるはずです。

于 2012-07-10T02:00:42.557 に答える
2

上記の2つの答えを考慮すると、blog.phpとblog_item.phpには3つの変更が必要です。これはJoomla3.1で機能します。これらのファイルをテンプレートオーバーライドにコピーするのが最善です。

blog.phpblog_item.phpをコピーします

components / com_content / views / category /tmpl/から

[私のテンプレート]/html / com_content / category /

主要なアイテムのループ内のblog.phpに、1行追加します。

  <?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->item->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-> get('show_readmore')&& $ this-> item-> readmore)

の中へ

if($ params-> get('show_readmore')&& $ this-> item-> readmore &&!$ this-> item-> LeadingItem)

于 2013-06-20T11:00:40.910 に答える
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文字列変数を使用できます。

于 2012-11-27T17:18:01.557 に答える