web-dev-qa-db-ja.com

モジュール内に新しいモジュール位置を追加することは可能ですか?

テンプレートに追加できることを知っています

<jdoc:include type="modules" name="newposition"   />

そして、positionsタグ内に新しい位置を追加します。

<positions>
     <position>newposition</position>
</positions>

しかし、ポジションスロットのモジュールバックエンドに入力することで、どこからでもポジションを作成できることも知っています。

Adding a new module position in the Joomla! module backend

そして、あなたはモジュールのloadpositionを行うことができます。

{loadposition some_position}

しかし、このテキストをモジュールにエコーすると、それは単なるテキスト(文字列)です。文字列でもあるXMLをエコーするが、XMLファイルにないため、期待どおりに動作しない場合。

モジュール内にモジュール位置を追加することは可能ですか?

組み込みのJoomlaを使用したいです。拡張機能を使用するよりも方法。

コンテンツ準備プラグインで試しましたが、Sharkyの方法を試したいのですが、機能させることができません。これが私が試したものです。

<?php 
use Joomla\CMS\Factory;
?>

<div class="ui-nav ui-nav-mobile">
    <div class="g-content">
    <a class="ui-btn ui-menu-close">Close <i class="fa fa-close" aria-label="Close dialog"></i></a>        
    <?php
        foreach ($subform_items as $item) {
            $position_name = "{loadposition " . $item->position_name_x . "}";
         $modulePositions = JHtml::_('content.prepare', $position_name, '', 'mod_koy_sticky_contact.content');
            //$modulePositions = Factory::getApplication()->getDocument()->loadRenderer('modules')->render($position_name);
            echo "<div class='" . $item->position_name_x . "'>" . $modulePositions . "</div>";
        }
    ?>
    </div>
</div>

コメントアウトされた部分は空白を示していますが、他のバージョンは機能します。

2
Eoin

コンテンツプラグインを使用しても機能しますが、PHPコードでは必要ありません。代わりに、ドキュメントレンダラーを直接使用できます。

use Joomla\CMS\Factory;

echo Factory::getApplication()->getDocument()->loadRenderer('modules')->render($position);
2
Sharky

それはおそらく特定の状況に依存します。いくつかの「セカンダリ」モジュールを含むカスタムモジュールがあります。 Modules Anywhere拡張を使用してこれを実現し、挿入するモジュールのコードに{example module}を追加します。ModulesAnywhereを使用するためにモジュール設定にモジュール位置を含める必要はありません。

https://extensions.joomla.org/extensions/extension/core-enhancements/coding-a-scripts-integration/modules-anywhere/

1
Mythic

私はこれをここに残しています。誰かがこれを行う方法を知る必要があります。しかし、上記の答えISより良い。

コンテンツプラグインをオンにする必要があります

OnContentPrepareプラグインイベントをトリガーする

https://docs.joomla.org/Triggering_content_plugins_in_your_extension

Joomlaを作成してしまいました!複数のポジションを追加できるように、サブフォーム。これが私のコードです。

        foreach ($subform_items as $item) {
            $position_name = "{loadposition " . $item->position_name_x . "}";
            $modulePositions = JHtml::_('content.prepare', $position_name, '', 'mod_my_module.content');
            echo $modulePositions;
        }

これがしていることは:

  1. XMLでforeachを使用して、各ポジションを獲得します。
  2. ここに表示される通常の{loadposition yourPositionName}コードを使用します: https://docs.joomla.org/How_do_you_put_a_module_inside_an_article%3F
  3. 通常、手動で入力するか、エディターモジュールプラグインを使用します。この例では、yourPositionNameを使用しましたが、実際には、これらの位置は繰り返し可能なフィールドがあるモジュール。 $position_name_xparamsの一部である$itemを呼び出しました。
  4. 次に、自分のポジション名をエコーし​​ます。 content prepareがない場合、リテラル文字列{yourPositionName}をエコーし​​、その位置にあるモジュールはエコーしませんが、content prepareを使用するとモジュールを送ってください。これはシステムプラグインonContentPrepareを使用していると思います。

それが誰かを助けることを願っています

0
Eoin