web-dev-qa-db-fra.com

Obtenir de la valeur d'un champ répétable et l'utiliser dans un module

J'utilise le type de champ "répétable" dans un module Joomla que j'ai créé mais je ne sais pas comment en extraire les valeurs et l'utiliser dans le fichier default.php du module pour créer la sortie.

Mon champ répétable:

                    <field name="mitarbeiter"
                    type="Repeatable"
                    icon="list"
                    description="Mitarbeiter eingeben"
                    label="Mitarbeiter eingeben"
                    <fields name="params">
                        <fieldset hidden="true" name="mitarbeiter_template_modal" repeat="true">

                        <field name="mitarbeitername"
                            label="Name"
                            size="30"
                            type="text" />

                        <field name="mitarbeiterfunktion"
                            label="Funktion"
                            size="30"
                            type="text" />

                        <field name="mitarbeitertelefonnummer"
                            label="Funktion"
                            size="30"
                            type="text" />

                        <field name="mitarbeiteremail"
                            label="Funktion"
                            size="30"
                            type="text" />

                        <field name="mitarbeiterbild"
                            label="Bild-URL"
                            size="30"
                            type="text" />

                        </fieldset>
                    </fields>
                </field>

Normalement, je reçois la valeur d'un champ dans mod_nom_module.php:

$fieldvalue = $parameters->get('fieldname');
4
Peesen87

J'espérais que quelqu'un poserait éventuellement cette question ici. J'ai écrit une fonction pour ma première utilisation de champs de formulaire répétables et je l'utilise pour chaque extension que je crée maintenant.

Voici comment vous le faites:

Tout d’abord, récupérez l’objet json pour le paramètre comme ceci:

$mitarbeiter = $params->get('mitarbeiter');

Puis décoder l'objet json:

$json = json_decode($mitarbeiter, true);

Vous pouvez ensuite regrouper chaque ensemble de champs par clé, comme suit:

public function group_by_key($array) 
{
    $result = array();

    foreach ($array as $sub) 
    {
        foreach ($sub as $k => $v) 
        {
            $result[$k][] = $v;
        }
    }
    return $result;
}

$filtered_array = group_by_key($json);

Et enfin, vous aurez besoin de le parcourir à l'aide d'une boucle foreach, comme ceci:

foreach ($filtered_array as $index=>$value) 
{   
    echo $value[0] . '<br>';   // mitarbeitername
    echo $value[1] . '<br>';   // mitarbeiterfunktion
    echo $value[2] . '<br>';   // mitarbeitertelefonnummer
    echo $value[3] . '<br>';   // mitarbeiteremail
    echo $value[4] . '<br>';   // mitarbeiterbild
}

J'espère que cela t'aides

4
Lodder

La réponse ci-dessus de @Lodder est correcte, mais vous devrez également envelopper la fonction avec

if (!function_exists('yourFunctionname')) {
    // ... proceed to declare your function
}

Sinon, vous ne pouvez rendre cette fonction qu'une fois par page.

Donc tout à fait cela devrait ressembler à ceci:

$mitarbeiter = $params->get('mitarbeiter');
$json = json_decode($mitarbeiter, true);

if (!function_exists('group_by_key')) {
  public function group_by_key($array) 
  {
      $result = array();

      foreach ($array as $sub) 
      {
          foreach ($sub as $k => $v) 
          {
              $result[$k][] = $v;
          }
      }
      return $result;
  }
}
$filtered_array = group_by_key($json);

foreach ($filtered_array as $index=>$value) 
{   
    echo $value[0] . '<br>';   // mitarbeitername
    echo $value[1] . '<br>';   // mitarbeiterfunktion
    echo $value[2] . '<br>';   // mitarbeitertelefonnummer
    echo $value[3] . '<br>';   // mitarbeiteremail
    echo $value[4] . '<br>';   // mitarbeiterbild
}
4
NicholasByDesign