web-dev-qa-db-ja.com

すべてのサブカテゴリも表示するカテゴリのリストを表示する最良の方法は?

このようなサブカテゴリも表示するカテゴリのリストを表示する方法については、しばらく前から検索してきました。

enter image description here

この場合、コンテンツのリストにはサブカテゴリレベル(またはカテゴリ内の記事の名前)のみが表示されますが、必要なだけサブカテゴリを表示したいと思います。

カテゴリリストまたはブログを作成しようとしましたが、出力が希望どおりではありません。

enter image description here

基本的に、Intro(メニューに設定されたカテゴリBasicsのサブカテゴリです)をクリックする必要があります。入手したいのは、カテゴリ名のリストです。サブリストには、サブカテゴリや記事へのリストが含まれているので、クリックして移動できます。

Joomlaのコアモジュールでこれが不可能な場合、これを取得できるモジュールはありますか?

エディターを使用して、リンクのすべてのサブリストを含むリンクのリストを手動で作成できることはわかっていますが、モジュールがそれを実行できると便利です。

3
nbro

リンクを参照してください:

https://stackoverflow.com/questions/17988998/joomla-get-subcategories-of-custom-parent-category

$catID = JRequest::getVar('id');
$categories = JCategories::getInstance('Content');
$cat = $categories->get($catID);
$children = $cat->getChildren();
print_r($children);
1
Sh4msi

いくつかの解決策があります:

カテゴリツリーのみを取得する場合

Template Overrides を使用して、カテゴリビューの代替レイアウトを作成します。このビューでは、JCategoriesを使用してカテゴリツリーを取得します。ここにサンプルがあります:

_$model_categories = JCategories::getInstance('Content');
$root = $model_categories->get('root');
$categories = $root->getChildren();
_

すべてのカテゴリでgetChildren()を使用して、その子を取得できます。

すべての記事を含むカテゴリツリーを取得する場合

上記すべてを作成して、カテゴリーIDを収集します。次に、収集されたIDを使用して、それらのカテゴリーのすべての記事をデータベースから取得します。配列キーがカテゴリIDになるArticlesマップ配列を作成して、配列が次のようになるようにします。

_Array(
    CATEGORY1_ID => array(
       1=>YOUR_ARTICLE_OBJECT1,
       2=>YOUR_ARTICLE_OBJECT2,
       3=>YOUR_ARTICLE_OBJECT3
    ),
    CATEGORY2_ID => array(
       1=>YOUR_ARTICLE_OBJECT1,
       2=>YOUR_ARTICLE_OBJECT2,
    )
);
_

そうすれば、すべてのカテゴリの記事を取得するのに必要なクエリは1つだけになります。次に、単にカテゴリを印刷するときに記事マップを使用します。

結論

このソリューションには欠点があります。コンポーネントは、もちろん必要のないモデルからのクエリを引き続き使用します(そのうちの約2つ)。常に、ある種のサイトマップコンポーネントを使用して同じビューを取得できますが、それらの多くはありません。

1
Artur Stępień

Joomla 3.xでは、JoomlaのネイティブのCategoriesモジュールを使用できます。

あなたの例は3つのカテゴリを示しているので、記事内から3つのモジュールをロードし、これらのモジュールを構成して、必要な情報を表示します。

私が行うモジュール構成:

  • 親カテゴリ:はじめに
  • カテゴリーの説明:いいえ
  • 記事の数を表示:いいえ
  • サブカテゴリを表示:はい
  • #最初のサブカテゴリ:すべて
  • 最大レベル深度:1
  • メニューの割り当て:これらが必要なページのみ

必要なページに対応する記事の内容:

{loadposition inarticle-categories1}

{loadposition inarticle-categories2}

{loadposition inarticle-categories3}

1
IberoMedia