web-dev-qa-db-fra.com

Est-il possible de charger le même module dans deux positions différentes et d'utiliser deux identifiants différents?

En construisant un site Web, je suis parvenu à la conclusion que j'avais deux positions comprenant des modules identiques (Header et Footer). Les deux incluent exactement le même menu et un petit texte de présentation.

Par souci de temps et d’efficacité, j’ai essayé de le configurer pour que les deux postes chargent des modules configurés pour se charger dans Header. Cependant, cela pose un problème; mon menu nécessite un identifiant unique pour exécuter du JavaScript. Certes, je pourrais modifier le module pour créer simplement un identifiant aléatoire, mais ce n'est pas garanti d'être unique à 100%.

Est-il possible de modifier l'ID d'un module chargé dans Footer afin qu'il soit différent des doublons dans Header? Ou suis-je obligé de créer des doublons des modules dans Header pour Footer?

2
Chaosxmk

Cet attribut id est un attribut attaché à un certain élément de la sortie de votre module de menu - il s’agit d’un traitement interne de votre menu.

La position du module dans votre modèle ne peut pas définir un identifiant pour un élément utilisé/créé par un module rendu dans cette position. Simplement, le Position du module/modèle ne sait pas ce qui va sortir du module à rendre, en termes de balisage du module.

Ce sera plus rapide si vous dupliquez vos modules et les placez dans 2 positions de module différentes, mais si cela est indispensable, les solutions suivantes pourraient être appliquées.

Solutions

Je vais utiliser le noyau mod_menu comme exemple.
Adaptez l’un des exemples ci-dessous à votre cas/module spécifique.

Solution n ° 1.

Recherchez $ module-> position dans la substitution de modèle d'un module.

EDIT: cette solution ne fonctionnera pas comme décrit pour ce cas d'utilisation particulier. Mieux vérifier la solution 2 et lire les notes de bas.

  1. Créez un modèle de remplacement pour votre module:

    templates/YOU_TEMPLATE/html/mod_menu/default.php 
    
  2. Dans votre gabarit, remplacez la vérification de la position du module comme suit:

    if ($module->position == 'bottom-position')
    {
      $idd = 'bottomMenuID';
    }
    else
    {
      $idd = 'normalMenuID';
    }
    
  3. Ensuite, dans la suite de votre code de menu, remplacez la valeur de l'attribut ID de votre élément par le $idd;

Solution n ° 2.

Utilisez JModuleHelper et remplacez $ module-> params.

  1. Créez un remplacement de modèle pour le mod_menu: Ajoutez ceci:

    templates/YOU_TEMPLATE/html/mod_menu/default.php 
    
  2. Renommez default.php en quelque chose comme footermenu.php

  3. Editez le modèle footermenu.php et remplacez l'attribut id de la question par celui que vous souhaitez utiliser pour le deuxième menu.

  4. Dans votre modèle, à l'emplacement souhaité où vous souhaitez afficher le menu une seconde fois:

    jimport( 'joomla.application.module.helper' );
    $module = JModuleHelper::getModule( 'menu', 'Main Menu');
    $module->params = '{"menutype":"mainmenu","base":"","startLevel":"1","endLevel":"0","showAllChildren":"1","tag_id":"","class_sfx":"","window_open":"","layout":"webxcon:footer","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"itemid","module_tag":"div","bootstrap_size":"0","header_tag":"h3","header_class":"","style":"0"}';
    echo JModuleHelper::renderModule( $module, $attribs );
    

Mise à jour

@Chaosxmk et toute personne qui pourrait atteindre ici ayant la même question:

Notes:

Je dois admettre que je n’ai pas essayé les solutions ci-dessus et que, en fait, vous avez raison pour la solution 1. En fait, la solution 1 m’est venue à l’esprit, alors que j’écrivais la solution 2 après avoir utilisé JModuleHelper, qui Cela me semblait logique de demander au module de rechercher sa position. J'avais oublié à ce stade que vous souhaitiez appeler le même module/la même position de module. La solution 1 ne fonctionnera donc pas comme décrit ci-dessus.

Je laisse ici la solution 1 à titre de référence et parce qu'elle explique comment une personne peut vérifier la position actuelle d'un module à partir d'un module et éventuellement proposer d'autres idées à quelqu'un.

2
FFrewin