MVC appel d'une page à partir d'une autre

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] MVC appel d'une page à partir d'une autre

    Bonjour et meilleurs vœux à tous,

    Sous joomla 4, je développe un composant AAAA qui pour la partie site présente deux VUES ayant pour structure :
    . A : components / com_AAAA / src / View / Personnes / HtmlView.php
    . B : components / com_AAAA / src / View / Personne / HtmlView.php

    La structure de chaque vue est issue des fichiers DEFAUT présents dans :
    . A : components / com_AAAA / tmpl / personnes / defaut.php
    . B : components / com_AAAA / tmpl / personne / default.php

    La première vue (A) présente une liste de personnes, la seconde (B) une seule personne avec des mentions spécifiques la concernant.

    Les liens de menu respectifs de chaque vue les font apparaître normalement à l’écran avec les chemins suivants :
    . A : index.php?option=com_AAAA&view=personnes&id=0&Item id=142&lang=fr
    . B : index.php?option=com_AAAA&view=personne&Itemid=343 &lang=fr

    Je souhaite placer pour chaque personne de la liste (A) un lien de type FORM pour appeler la page B avec les infos de la personne correspondante.

    Malgré de nombreux essais – avec de multiples variantes – du type :


    <form action="<?php echo Route::_('index.php?option=com_AAAA&view=personne' ); ?>" method="post" name="adminForm" id="adminForm">
    <input type="hidden" name="id" value="<?php echo $id; ?>" class="form-control">
    <input type="submit" name="Compléments" class="accueil20b1a" value="Compléments">
    </form>
    Je n’y parviens pas.

    Quelle est la solution ?

    Merci d’avance

    Très cordialement

    Philippe
    Dernière édition par philippe44500 à 09/01/2023, 19h15

  • #2
    Hello.

    Tes explications sont très confuses.

    Envoyé par philippe44500 Voir le message
    Je souhaite placer pour chaque personne de la liste (A) un lien de type FORM pour appeler la page B avec les infos de la personne correspondante.
    L'url du formulaire te permet de renvoyer les champs avec les modifications pour les traiter.
    La balise FORM doit donc figurer dans ta page B (s'il s'agit d'un formulaire, donc avec des champ en saisie).

    Rien à voir avec le lien qu'il te faut placer dans la vue de type list (ta page A) pour ouvrir justement la page B


    Envoyé par philippe44500 Voir le message
    Les liens de menu respectifs de chaque vue les font apparaître normalement à l’écran avec les chemins suivants :
    . A : index.php?option=com_AAAA&view=personnes&id=0&Item id=142&lang=fr
    . B : index.php?option=com_AAAA&view=personne&Itemid=343 &lang=fr
    Pourquoi tu passes par un lien de menu (présence d'un itemid dans ton lien) pour ouvrir des fiches individuelles.
    Ceci signifie que tu vas créer autant de liens de menus que tu as d'item?
    Je ne pense pas !

    Je pense que tu confonds itemId et id.
    • ItemId est l'identifiant du lien de menu (afin que le router sache calculer l'url et que tu puisse retrouver les paramètres définis dans le lien de menu dans ton model -généralement dans la méthode populatestate-)
      (certes le nom de variable choisi par le joomlateam itemId est un peu déroutant, ce devrait plutôt être menuId, mais c'est ainsi...)
    • et id est l'identifiant de l'item (la personne dans ton cas) à afficher.

    Donc ton lien de chaque ligne de ton tableau de ta vue de type list (A) doit être : .index.php?option=com_AAAA&view=personne&id=...
    pour accéder à la vue B avec le bon item (la bonne personne dans ton cas).

    Ceci pour un simple affichage d'un fiche "personne".
    Mais comme tu parles d'un formulaire (balise FORM), il te faut aussi une variable task, pour savoir quelle action tu veux faire (donc quel méthode du model ton contrôleur doit appeler).
    Dans ce cas le lien serait plutot : index.php?option=com_AAAA&task=personne.edit&id=.. .
    task=personne.edit lançant la méthode edit du contrôleur personne.php
    Pas besoin de définir la vue qui est implicitement "personne" (définie ainsi dans le contrôleur).

    Pour t'aider inspire toi de composants natifs de joomla (com_content, com_banners, ou com_contact par exemple).
    Dernière édition par roland_d_alsace à 07/01/2023, 20h08
    A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
    Rejoignez le Joomla Users Groupe Alsace...
    roland_d_alsace va-t-il devenir roland_du_grand_est ?

    Commentaire


    • #3

      Bonjour Roland,

      Merci pour ton aide.

      J’ai essayé de résoudre mon problème de ROUTE en suivant tes recommandations avec :

      <form action="<?php echo Route::_('index.php?option=com_AAAA&task=personne. edit&id=' . ((int) $this->record->id)) ?>"

      Après avoir parcouru les composants où figure TASK et les forums, je n’ai pas réussi à résoudre mon problème.

      J’ai tourné la difficulté en utilisant

      <form action="./index.php?option=com_daglink&view=personne&Itemid= 343&lang=fr" method="post" target="_blank" name="adminForm" id="adminForm">
      <input type="hidden" name="id" value="<?php echo $id; ?>" class="form-control">
      <input type="submit" name="Compléments" class="accueil20b1a" value="Compléments">
      </form>
      Cela ouvre un nouvel onglet (lien de menu qui correspond à la page appelée par FORM) avec une page où l’ID récupérée par POST permet d’afficher les variables (nom, etc …) correspondant à l’ID issue de la page d’origine.

      Ce n’est sans doute pas la bonne méthode mais, cela me permet d’avancer.

      Encore merci Roland

      Très cordialement

      Philippe



      Commentaire

      Annonce

      Réduire
      Aucune annonce pour le moment.

      Partenaire de l'association

      Réduire

      Hébergeur Web PlanetHoster
      Travaille ...
      X