Utiliser des sections à la TemplaVoilà dans une flexform

Par défaut
Il est parfois nécessaire de pouvoir saisir des éléments répétitifs au travers d’un flexform, de la même façon qu’il est possible de le faire via les FCE de TemplaVoilà.

Le FlexForm :

 

<accroche>
  <TCEforms>
    <label>Accroche</label>
    <config>
      <type>text</type>
      <cols>30</cols>
      <rows>5</rows>
    </config>
  </TCEforms>
</accroche>
<services>
  <section>1</section>
  <type>array</type>
  <el>
    <service>
      <type>array</type>
      <tx_templavoila>
        <title>Ajouter un service</title>
      </tx_templavoila>
      <el>
        <nom>
          <TCEforms>
            <label>Nom</label>
            <config>
              <type>input</type>
              <size>30</size>
            </config>
          </TCEforms>
        </nom>
        <description>
          <TCEforms>
            <label>Description</label>
            <config>
              <type>text</type>
              <cols>30</cols>
              <rows>5</rows>
            </config>
          </TCEforms>
        </description>
      </el>
    </service>
  </el>
</services>

 

La partie php (ok elle est moche et perfectible) :
&lt;?php
/**
 * Récupère les valeur du flexform
 */

function getFlexform2Array() {
 $piFlexForm = $this-&gt;cObj-&gt;data['pi_flexform'];
 foreach($piFlexForm['data'] as $sheet =&gt; $data) { 
  foreach($data as $lang =&gt; $value) { 
   foreach($value as $key =&gt; $val) {  
    if(isset($val['el']) == true) { 
     $this-&gt;lConf[$key] = $this-&gt;getFlexFormSection($val);
    } else {
     $this-&gt;lConf[$key] = $this-&gt;pi_getFFvalue($piFlexForm, $key, $sheet);
    }
   }
  }
 }
}

/**
 * Récupère les valeurs d'une section
 * @param Array Section data
 * @return Array Valeurs de la section
 */

function getFlexFormSection($sections) {
 foreach($sections['el'] as $section) {
  foreach($section as $sectionName =&gt; $sectionData) {
   if(is_array($sectionData['el'])) {
    $temp = Array();
    foreach($sectionData['el'] as $key =&gt; $value) {
     $temp[$key] = $value['vDEF'];
    }
    $sectionArray[$sectionName][] = $temp;
   }
  }
 }
 return $sectionArray;
}

 

Vous n’avez plus qu’à appeler getFlexform2Array() dans votre main, les valeurs renseignées dans le flexform se retrouverons dans le tableau $this->lConf

  • Anonymous

    Bonjour,

    Le code du Flexform n’a pas l’air de fonctionner….il affiche bien les éléments, mais vide…

  • http://www.blogger.com/profile/10633702134214690944 Benoit NORRIN

    C’est lié à la balise TCEforms qui est tout en minuscule dans l’exemple.

  • http://blog.aswinlutchanah.info/ Aswin

    Bonjour,

    Très intéressant et surtout très utile.

    Par contre je voulais savoir si c’était possible d’avoir une incrémentation automatique pour le backend ?

    Ex : Service 1
    Service 2

    Merci d’avance :)