web-dev-qa-db-ja.com

コンポーネント領域にモジュールを表示する方法

他のコンテンツなしで、コンポーネント領域にモジュールを表示するメニュー項目を作成する必要があることがよくあります。

これを解決する方法は、新しい記事を作成し、記事のコンテンツに{loadposition mymodule}のみを追加することです。次に、記事の単一記事メニュー項目を作成します。これは単一のモジュールでは問題ありませんが、この方法で表示したい20の異なるモジュールがある場合はどうなりますか? 20個のモジュール、20個(ほとんど空の記事)、20個のメニュー項目を作成する必要があります。

テンプレートのコンポーネント領域にモジュールを表示する他の方法はありますか?トリック?ハック?アイデア?

13
johanpw

これを行うには、コンポーネントと同じ場所にモジュールの位置を作成し、モジュールがこの位置に存在するかどうかを確認してから表示します。それ以外の場合は、コンポーネントに移動します。

コードサンプル:

<main id="content" role="main" class="main">
 <?php 
 if ($this->countModules('myposition')) 
   { ?>
     <jdoc:include type="modules" name="myposition" style="xhtml" />
 <?php } 
  else 
  { ?>
     <jdoc:include type="component" /> 
  <?php } ?>
</main>

次に、コンポーネントではなくモジュールをページに表示したい場合、モジュールを作成してそのメニュー項目に割り当てれば完了です。

小さな付記:

便宜上、わかりやすくするために、このモジュールの位置に「content-module」、「main-module」、「compomodule」などの名前を付けることをお勧めします。そこに配置されたモジュールがコンポーネントの出力を置き換えることを思い出させるもの。

10
FFrewin

ここで与えられた答えを強化するには:

コンポーネントビューにモジュールの位置を含め、そこにモジュールをロードするには、次を追加するだけです。

echo JHtml::_('content.prepare', '{loadposition yourmodulposition}');

ビューファイルに。

ロード位置の短いタグを持つ2番目の文字列は、必要に応じて、より多くのhtmlを含むvarで置き換えることができます。新しいモジュール位置ごとにその行を記述する必要はありません。

$outputModules = '<strong>Some Html</strong>'
                 .'{loadposition yourmodulposition1}'
                 .'{loadposition yourmodulposition2}';


echo JHtml::_('content.prepare', $outputModules);

(私はこれが著者の質問に対する直接の回答ではないことを知っています。)

9
Dennis Heiden

シンプルで実用的なソリューションを次に示します。私はjdoc:includeで試しましたが、うまくいきませんでした。

 $ document = JFactory :: getDocument(); 
 $ renderer = $ document-> loadRenderer( 'modules'); 
 $ position = 'custompositionname'; 
 $ options = array( 'style' => 'raw'); 
 echo $ renderer-> render($ position、$ options、null); 
2
akfaisel

空白の記事を作成します。

作成した記事を選択するメニュー項目を作成します。

未使用の位置にモジュールを作成し、選択したページにのみメニュー割り当てを設定し、上からメニュー項目のみを選択します。

これが一番上の数字だったので、私は私の答えを提供します。これが私がすることです。

0
Mythic

これを試して

jimport('joomla.application.module.helper');
    // this is where you want to load your module position
    $modules = JModuleHelper::getModules('header'); 
    foreach($modules as $module)
    {
    echo JModuleHelper::renderModule($module);
    }

ref: https://stackoverflow.com/questions/12225538/how-we-include-a-joomla-module-in-a-component-view-in-joomla

0
Sh4msi

これを行う最もクリーンな方法は、以下を使用することです http://extensions.joomla.org/extension/m2c-module-to-component

0
Lala

私は自分のサイトでも拡張機能のデモとダウンロードボタンについて同じことをしなければなりませんでしたが、正直なところ、管理しやすいので、物事を分離しておく方がいくつかの点で優れていると思います。実際のCMSを介して探しているものを達成する方法はなく、ハードコードのみです(これ以上言うことはありません)。

0
Lodder

まず、あなたの質問によれば、すでに20個のモジュールと20個のメニュー項目を作成しているので、実際に行う必要があるのは、モジュールごとに1行のコンテンツ項目を作成することだけです。それが本当に面倒な場合は、@ FFrewinのアイデアを先に進めてください。少しハッキーですが、うまくいきます。

個人的には、私はコンテンツアイテムを使います。実際、ポップアップダイアログボックスを使用してシステムを構築しているときに、jsを有効にせずに作業したいと思っていました。ダイアログコンテンツをcustom_htmlモジュールに配置し、リンクがクリックされたときにモジュールが表示および配置されるようにリギングしました。そして、あなたが説明したようなモジュールを含むコンテンツアイテムへのリンクもポイントしました。 jsが有効になっている場合、リンクがたどられず、ダイアログボックスが表示されました。 jsが無効になっている場合、リンクがたどられ、ダイアログのコンテンツがコンテンツとして表示されました。また、コンテンツが1か所にあったため、コンテンツの2つの別々のコピーを保持していませんでした。

0
Arlen