Je sais dans un modèle que vous pouvez ajouter
<jdoc:include type="modules" name="newposition" />
et ensuite, dans les balises de positions, vous ajoutez votre nouvelle position.
<positions>
<position>newposition</position>
</positions>
Mais je sais aussi que vous pouvez simplement créer une position de nulle part en la tapant dans le module dorsal dans l’emplacement.
Et puis vous pouvez faire le chargement du module.
{loadposition some_position}
Mais si je répète ce texte dans mon module, il ne s'agit que de texte (une chaîne). Si je répète le XML, c'est aussi une chaîne, mais je ne m'attendais pas à ce que cela fonctionne, car ce n'est pas dans le fichier XML.
Est-il possible d'ajouter une position de module dans un module?
Je préférerais que ce soit construit dans Joomla! manière que d'utiliser des extensions.
Je l'ai essayé avec un plugin de préparation de contenu, mais je préférerais essayer la méthode de Sharky, mais je ne parviens pas à le faire fonctionner. Voici ce que j'ai essayé.
<?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>
La partie commentée affiche un blanc, mais l'autre version fonctionne.
Bien que l’utilisation de plug-in de contenu fonctionne, elle n’est pas nécessaire dans le code PHP. À la place, vous pouvez utiliser le rendu du document directement:
use Joomla\CMS\Factory;
echo Factory::getApplication()->getDocument()->loadRenderer('modules')->render($position);
Cela dépend probablement de circonstances spécifiques. J'ai des modules personnalisés contenant plusieurs modules "secondaires". Pour ce faire, utilisez l'extension Modules Anywhere et ajoutez {exemple de module} au code du module dans lequel je l'insère. Vous n'avez pas besoin d'inclure une position de module dans les paramètres de module pour utiliser Modules Anywhere.
JE SUIS CELA ICI DANS CE CAS QUELQU'UN A BESOIN DE SAVOIR FAIRE. MAIS LA REPONSE CI-DESSUS IS MEILLEUR.
Vous devez activer le plugin de contenu
Déclencher l'événement du plugin onContentPrepare
https://docs.joomla.org/Triggering_content_plugins_in_votre_extension
J'ai fini par créer un Joomla! sous-formulaire afin que je puisse ajouter plusieurs positions. Voici mon code.
foreach ($subform_items as $item) {
$position_name = "{loadposition " . $item->position_name_x . "}";
$modulePositions = JHtml::_('content.prepare', $position_name, '', 'mod_my_module.content');
echo $modulePositions;
}
Ce que cela fait c'est:
foreach
sur mon XML pour gagner chaque position.{loadposition yourPositionName}
code qui peut être vu ici: https://docs.joomla.org/How_do_you_put_a_module_inside_an_article%3F$position_name_x
qui fait partie du params
de mon $item
.content prepare
il va faire écho à une chaîne littérale {yourPositionName} et non aux modules à cette position, mais avec content prepare
il vous enverra les modules. Ceci utilise le plugin système onContentPrepare
je crois.J'espère que cela aide quelqu'un