コンポーネントエリアにモジュールを表示する方法


12

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

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

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


Joomla!で役立つかもしれません。3は、モジュールを作成するエディターボタンを使用します。これにより、エラーが発生しにくくなります。
エオイン

回答:


9

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

コードサンプル:

<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」などの名前を付けることをお勧めします。そこに配置されたモジュールを思い出させるものはすべて、コンポーネントの出力を置き換えます。


1
これが理想的なソリューションです。多くの商用テンプレートには、管理側の設定にパラメータートグルがありますが、これらの商用テンプレートのいずれかを使用していない場合は、これが最も効率的でエレガントな答えです。
トニマリー14

1
私はこのアイデアが大好きです。シンプルで効果的で、既存のテンプレートに簡単に実装できます。優秀な。
johanpw

8

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

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

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

ビューファイルに。

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

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


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

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


2

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

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

質問で説明されているように、上記のコードを使用して望ましい結果を達成する方法をさらに説明してください。
FFrewin

裏付けで、新しいモジュールを作成し、その位置(custompositionnameなど)を設定して公開します。フロントエンドで、上記のコードを追加すると、問題なく動作します。
-user2589739

0

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


0

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

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




0

空の記事を作成します。

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

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

これは私が答えを提供するだろうと考えられていたので、これは私がしていることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.