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