1

メニュー項目「すべてのカテゴリを一覧表示」があります。カテゴリがサブカテゴリの記事をカウントせず、0 を表示するという問題は、すべてのサブカテゴリのすべての記事をカウントする必要があります。写真を追加できないので、説明します: カテゴリ (0) サブカテゴリ 1 (1) サブカテゴリ 2 (1)

カテゴリがサブカテゴリの記事をカウントすることを望みます (例では 2 にする必要があります)。

誰もそれを修正する方法を知っていますか?

どんな助けでも大歓迎です。

前もって感謝します。編集:

私は2.5 Joomlaを使用しています。いいえ、コンポーネント/プラグイン/モジュールは作成していません。メニュー項目を使用しています: すべてのカテゴリを一覧表示 (メニュー -> メイン メニュー -> 新しいメニュー項目を追加 -> すべてのカテゴリを一覧表示)。ようやく、この関数が記述されている場所を見つけました。ここで、numitemsはカテゴリ内の記事の数字です。

 $subQuery = ' (SELECT cat.id as id FROM #__categories AS cat JOIN #__categories AS parent ' .
        'ON cat.lft BETWEEN parent.lft AND parent.rgt WHERE parent.extension = ' . $db->quote($extension) .
        ' AND parent.published != 1 GROUP BY cat.id) ';
    $query->leftJoin($subQuery . 'AS badcats ON badcats.id = c.id');
    $query->where('badcats.id is null');

    // i for item
    if (isset($this->_options['countItems']) && $this->_options['countItems'] == 1)
    {
        if ($this->_options['published'] == 1)
        {
            $query->leftJoin(
                $db->quoteName($this->_table) . ' AS i ON i.' . $db->quoteName($this->_field) . ' = c.id AND i.' . $this->_statefield . ' = 1'
            );
        }
        else
        {
            $query->leftJoin($db->quoteName($this->_table) . ' AS i ON i.' . $db->quoteName($this->_field) . ' = c.id');
        }

        $query->select('COUNT(i.' . $db->quoteName($this->_key) . ') AS numitems');
    }

私の理解では、$subQuery に似たものを作成する必要がありますが、今回はサブカテゴリの記事をカウントする必要があります。しかし、それを行う方法がわかりません;/何かアイデアはありますか?

4

1 に答える 1

2

Joomla! の List All Categories は、特定のカテゴリの記事の数のみを表示し、サブカテゴリは親カテゴリではカウントされません。これは、親カテゴリが独自の記事を持つことができるためです。

カテゴリとそのサブカテゴリ内のすべての記事の合計を表示するには、Joomla コアcom_contentコンポーネントを変更するか (コア ファイルの変更はすべて悪いと見なす必要があります)、変更された*copy com_content コンポーネント*を作成する必要があります(これはより効率的ですが、おそらく必要以上の労力が必要です) またはビューのビュー オーバーライドを作成しcategoriesます。

オーバーライドを使用すると、ページの表示がより重い計算になります。

オーバーライドを使用する場合は、次のことだけを行う必要があります。

  1. default_items.phpからおよび/components/com_content/views/categories/tmpl/default_items.phpへのコピー/templates/your-template/html/com_content/categories/default_items.php
  2. サブアイテムをカウントするように変更します
  3. 合計数を表示するように変更します

2 - サブアイテムを数える

defined('_JEXEC') or die;次のコードを行の後に挿入します。

// Calculate number of items including sub-categories using a recursive anonymous function
$countSubItems = function( $item ) use ( &$countSubItems ) {
    $children = $item->getChildren();
    if( count($children) == 0 ) {
        return $item->numitems;
    } else {
        $subItems = 0;
        foreach ($children as $child) {
            $subItems += $countSubItems($child);
        }
        return $subItems = $item->numitems + $subItems;
    }
};

カウント関数を呼び出す

if2 番目のステートメントの後に count 関数を呼び出す行を挿入します。

$allItemsInclSubCats = $countSubItems($item);

サブカテゴリを含めた合計を表示

echo の行を次の$item->numitems;ように変更します。

<dd><?php echo $item->numitems; ?> ( <?php echo $allItemsInclSubCats; ?> including sub-categories )</dd>
于 2012-08-11T05:46:14.180 に答える