web-dev-qa-db-fra.com

Charger un module entre des modules dans la même position

Je ne suis pas aussi expert en php, donc désolé d'avance (j'utilise Joomla! 3.3.6 en italien).

Ce que je veux faire/obtenir, c'est: - créer et activer un module HTML dans Joomla, avec la position "position-x" (qui n'existe pas vraiment dans le modèle) - appeler ce module, si une certaine condition se produit, par php ( dans mon index.php), entre deux modules spécifiques dans la même position "sidebar", identifiés par id, ou par ordre ou quelque chose.

C'est possible? Je cherche une suggestion, une idée ...

Merci beaucoup!

1
Elisa74

Je ne sais pas si je comprends ce que vous essayez de réaliser. Mais vous ne pouvez pas appeler d'autres modules pour qu'ils apparaissent dans une autre position de module - du moins, je ne connais pas un moyen simple de faire quelque chose comme cela, de sorte que vous ne pouvez pas injecter un module affecté à une autre position de module entre 2 autres. modules d'un autre poste.

Mais si vous voulez montrer ce module à ce poste, pourquoi ne l'attribuez-vous pas à ce poste?

Également pour les conditions, le gestionnaire de module principal vous permet d'affecter le module par élément de menu. Si vous avez besoin de plus de flexibilité, vous pouvez utiliser le Gestionnaire de module avancé de NoNumber .

D'autre part, si vous souhaitez que les choses se passent de l'intérieur de votre modèle et ajouter une logique php personnalisée, je pense que vous devrez créer différentes positions de module pour la position de la barre latérale.

Par exemple. si vous souhaitez afficher 2 modules et sous certaines conditions en afficher un de plus au milieu, vous aurez besoin de 3 positions de module:
La gauche, le centre et la droite et vous devez organiser leur positionnement avec CSS.

Enfin, vous pouvez charger un module depuis votre modèle avec le code ci-dessous:

<?php 
jimport( 'joomla.application.module.helper' );

$modules = JModuleHelper::getModules( 'myposition' ); // Get Modules assigned at a position myposition (Returns an array)- it can be a custom position. 

$attribs = array('style' => 'xhtml'); // define module attributes, like module chrome. 

if (count($modules)>0) { // Checking if there are any modules ?> 

    <!-- Module wrapper -->
    <div id="top-contentb" class="top-content">

       <?php echo JModuleHelper::renderModule($modules[0], $attribs); // Render the first module of the $modules array.?> 

    </div>
<?php } ?>

J'espère que ça aide un peu.

1
FFrewin