it-swarm.dev

コンテンツプラグインに表示されているメインカテゴリに関する情報を取得するにはどうすればよいですか

含まれているすべてのサブカテゴリを表示する前に、パラメータに基づいてカテゴリの説明を前処理する必要があるプラグインがあります。

記事の場合(コンテキスト= com_content.article)、プラグインonContentPrepareイベントが$articleおよび$params必要なすべてのものを与えるが、コンテキストがcom_content.category$paramsは空で、$articleには$article->text

関心のあるカテゴリがクエリ文字列にあることは知っていますが、途中で既に取得されているカテゴリ情報などを見つけるためのより良い方法はありますか?

index.php?option=com_content&view=category&id=123&Itemid=456

public function onContentPrepare($context, &$article, &$params, $page=0)
    if($context == 'com_content.category') {
        // $article has only article ->text
        // $params is empty
        // how can I get category params here?
    }
2
GDP

@codinghandsが指摘したように、カテゴリは技術的な内容ではないため、(設計上)関心のあるすべての情報は利用できず、変更できるのは一般にカテゴリのタイトルのみです。

カテゴリ内のすべてのサブカテゴリと記事を一覧表示するときのもう1つの「キャッチ」は、プラグインイベントがそれらすべてに対して発生することです。いくつかのカテゴリや記事よりも、プラグインコードが発火するロットが、1回だけ発火するように設定されている場合を除きます。

メインカテゴリのみのパラメータが表示されるようにするには、プラグインが初めて起動されたときに、メインカテゴリ用です。 (これは私の場合は正しいことが証明されていますが、他の設定で変更される可能性があるかどうかはわかりません)。

index.php?option = com_content&view = category&id = 123

static $isMainCat = true;
if($isMainCat){
    $catid = JFactory::getApplication()->input->getInt('id');

    $basePath = JPATH_ADMINISTRATOR . '/components/com_categories';
    require_once $basePath . '/models/category.php';
    $category = new CategoriesModelCategory(array('table_path' => $basePath . '/tables'));
    $item = $category->getItem($catid);

    $params = new JRegistry;
    $params->loadString($item->params);
    $image = $params->get('image','noimage.gif');

    $isMainCat = false; // Prevent this code from running on any but the first category
}
1
GDP

view.html.phpcom_content.category を見ると、トリガーの呼び出しは次のとおりです。

$dispatcher->trigger('onContentPrepare', array ('com_content.category', &$item, &$item->params, 0));

$item(記事)パラメータを送信しています。駄目だ。

同じファイル(parent::commonCategoryDisplay();)の72行目を見ると、それ自体はJCategoryViewコードはこちら )にあり、$params格納されます(view.html.php$this->params内)。ただし、カテゴリは技術的にコンテンツではないため、この段階ではcontentPrepareイベントはトリガーされません。

このview.html.phpをオーバーライドして、イベントを発生させることができます。 このガイド を参照してください-ただし、特別なプラグインが必要です。

2
codinghands