TinyButStrong - the PHP Template Engine
Categories > TinyButStrong general (FR) >

BOucler sur un même template et générer dans un seul fichier

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs

By: Thy
Date: 2015-10-28
Time: 11:31

BOucler sur un même template et générer dans un seul fichier

Bonjour à tous,

J'utilise actuellement OpenTBS pour générer des documents à partir d'un modèle *ott
Mon besoin serait de pouvoir générer plusieurs fois le document à partir de données différentes et de récupérer l'ensemble dans un seul fichier final.


J'ai essayé plusieurs variations de mon code. Je suis passé aussi par le plugin TbsZip pour essayer de le traiter comme une archive mais aucun succès.

Quelqu'un aurait-il une solution à m'apporter svp ?

Merci à tous
By: Skrol29
Date: 2015-10-28
Time: 11:56

Re: BOucler sur un même template et générer dans un seul fichier

Tu dois refaire un LoadTemplate() au début de ta boucle.
Car le template chargé en mémoire se modifie au fur et à mesure des MergeBlock() et MergeField() et Show().
By: Thy
Date: 2015-10-28
Time: 12:15

Re: BOucler sur un même template et générer dans un seul fichier

merci pour ta réponse rapide Skroll29. Mais cela ne fonctionne pas. Il me génère uniquement la sortie pour le dernier élément de ma boucle.

Voilà mon code:
        foreach($contentExtractData as $personne) {
            $tbs->LoadTemplate($templatePath, OPENTBS_ALREADY_UTF8);
            $tbs->MergeField('variable', $personne);
        }

$tbs->Show(OPENTBS_FILE, $filepath);

Ma variable $contentExtractData a pour structure:
        $contentExtractData = array(
          0 => array(
            'adresse_ligne_1' => '12 rue du truc',
            'adresse_ligne_2' => '',
            'adresse_ligne_3' => '75001 PARIS',
            'destinataire' => 'Monsieur NOM Prénom',
            'formule_politesse' => 'Monsieur'
          ),
          1 => array(
            'adresse_ligne_1' => '75 Rue de la chance',
            'adresse_ligne_2' => '',
            'adresse_ligne_3' => '75002 PARIS',
            'destinataire' => 'Madame NOM Prénom',
            'formule_politesse' => 'Madame'
          ),
        );

Je me permets de rajouter que le fichier template est juste un fichier ott avec sa mise en forme et qu'il contient uniquement des balises du genre [variable.destinataire] pour faire l'injection des données au bon endroit. Il n'y a aucune syntaxe particulière dans le fichier template

Aurais-tu une idée ?

Merci encore
By: Skrol29
Date: 2015-10-29
Time: 10:04

Re: BOucler sur un même template et générer dans un seul fichier

        foreach($contentExtractData as $id => $personne) {
            $tbs->LoadTemplate($templatePath, OPENTBS_ALREADY_UTF8);
            $tbs->MergeField('variable', $personne);
            $filepath = 'resultat_' . $id . '.odt';
            $tbs->Show(OPENTBS_FILE, $filepath);
        }
By: Thy
Date: 2015-10-29
Time: 10:47

Re: BOucler sur un même template et générer dans un seul fichier

Merci bcp pour ta réponse Skrol29. Le souci venait de mon template *ott qui avait du mal à prendre en faire la répétition de blocks.
Je suis passé par un template *docx et un mergeBlock et c'est passé.

Merci bcp de temps.
By: Bruno Mannina
Date: 2017-04-10
Time: 15:57

Re: BOucler sur un même template et générer dans un seul fichier

Bonjour Thy,

Auriez vous un petit exemple disponible, je suis dans la même problématique vous mais hélas sans succès.
j'arrive bien à faire ce que je veux avec un simple document mais dès que j'essaie de faire une boucle hélas
je n'y arrive pas. Aucune erreur mais toujours qu'un seul document en résultat.

Merci pour votre aide,

Cdlt,
Bruno