Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : avril 2005
    Messages : 112
    Points : 41
    Points
    41

    Par défaut [TBS] Problème avec MergeBlock

    Bonjour,

    Voila ça fais quelques temps maintenant que je me prend la tête avec la fonction MergeBlock du moteur de template TinyButStrong... Je n'arrive pas à la faire marcher. Je croyais au départ que c'était mon code qui n'était pas bon alors j'ai créer un code de test, très simple et ça ne marche toujours pas, pourtant je crois avoir fais comme écris dans le manuel...

    Voici mon fichier index.php

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    	require_once "include/class/tbs_class.php";
    	// Création du template
    	$index = new clsTinyButStrong();
    	//on créer le tableau
    	$test = array(1,2,3,4);
    	//puis on le merge dans la variable blkTablesName
    	$tab = $index->MergeBlock('blkTablesName, *', $test);
    	//la fonction MergeBlock semble avoir fonctionnée puisque je peu récupérer le tableau qu'elle renvoie
    	for($i = 0; $i<4; $i++ )
    		echo $tab[$i];
    	//Chargement du template principale
    	$index->LoadTemplate("test.tpl");
    	//Affichage de la page
    	$index->Show();
    ?>
    Et le fichier test.tpl :

    Code HTML :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<title>Test</title>
    	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
    </head>
    <body>
    	<div>
    			[blkTablesName;block=div]
    			<br />
    	</div>
    </body>
    </html>

    Je précise que j'utilise la version 3.2 et que son utilisation avec des variables PHP simples (champs TBS) s'est effectué sans problème.
    Je dois vraiment avoir fait une faute de débutant mais je vois vraiment pas où elle se situe.

    Merci de me guider dans ma résolution de problème .

    A+
    Andréas

  2. #2
    Invité de passage
    Inscrit en
    juillet 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 3
    Points : 3
    Points
    3

    Par défaut

    Déja mon chere dede, je te conseil de lire un peu la doc de TBS, elle est assez bien foutu et t'aidera beaucoup.
    pour la methode MergeBlock : http://www.tinybutstrong.com/fr/manu...php_mergeblock

    Sinon,
    Code :
    $index->MergeBlock('blkTablesName, *', $test);
    En l'occurence ta syntaxe est mauvaise, essais plutot ça :
    Code :
    $index->MergeBlock('blkTablesName', 'array', $test);
    le mot clé 'array' indique que tu passe un tableau a la fonction.
    Petite tips : pour afficher un tableau sans te faire chier lors de tes tests de debugage, utilise la fonction print_r, comme ceci :
    Ensuite, Perso je donne toujours un titre aux entrés de tableaux pour pouvoir les identifier coté HTML, du genre :
    Code :
    1
    2
    3
    4
    5
    $test = array();
    $test[] = array("id" => 1);
    $test[] = array("id" => 2);
    $test[] = array("id" => 3);
    $test[] = array("id" => 4);
    (le faite d'utiliser $test[] incrémente numériquement les entrés de ton tableau)
    Tu peux largement optimiser ce morceau de code, mais je te le met en dur pour l'exemple. Prend l'habitude d'utiliser un tableau a deux dimentions comme ceci, car déja quand tu passe une requette SQL a MergeBlock ça te sortira un tableau de cette forme, mais aussi car se sera plus facile pour te repérer dans tes template.

    Et enfin coté HTML :
    Code :
    1
    2
    3
    4
    5
     
    <div>
    	[blkTablesName.id;block=div]
    	<br />
    </div>
    Je n'ai pas tester donc il ce peux que j'ai fais des erreur et autres fautes de frappe, mais le concept est la.
    En esperant t'avoir aidé

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : avril 2005
    Messages : 112
    Points : 41
    Points
    41

    Par défaut

    Merci H pour ces infos,
    mais la page HTML affiche toujours ça :

    [blkTablesName.id;block=div]
    Pourquoi la variable n'est-elle pas affichée? Est-ce que quelqu'un peut tester chez lui pour voir si ça viens de moi ou de TBS??

    [EDIT] Youpi!!!!!!!!! J'ai trouvé le problème... Quel b*** je suis!!! J'ai regarder les example sur le site Tiny But Strong (qui sont très bien fait d'ailleur!!) et j'ai vu qu'il fallait charger le template AVANT d'appelé la fonction MergeBlock()!!!!
    Je sais pas pourquoi mais je trouvais ca plus logique de le faire après.
    Bon en tout cas ça marche!

    @H : l'étoile après le nom du block c'est pour spéicifier qu'on veux que MergeBlock renvois le tableau dans une variable (ici $tab) sinon ca ne le fais pas. (j'avais lu la doc quand même ).

    Merci,
    A+
    dede

  4. #4
    Invité de passage
    Inscrit en
    juillet 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 3
    Points : 3
    Points
    3

    Par défaut

    j'ai vu qu'il fallait charger le template AVANT d'appelé la fonction MergeBlock()!!!!
    En effet j'ai omis ce detail qui a son importance...
    Toutes mes excuses ^^, visiblement tu t'es débrouillé par toi meme .

    spéicifier qu'on veux que MergeBlock renvois le tableau dans une variable
    L'utilité de MergeBlock c'est de fusionner une portion de code HTML avec les entrées du tableau de valeurs que tu lui passe. Quel est l'utilité du renvois de ce tableau par MergeBlock ?

  5. #5
    Nouveau Membre du Club
    Homme Profil pro Manu
    Inscrit en
    mai 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Nom : Homme Manu
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : mai 2009
    Messages : 80
    Points : 25
    Points
    25

    Par défaut génération odt avec tbs

    Bonjour à tous,

    j'ai un soucis pour générer l'exemple de TBS,
    je me suis mis au Zend il y a peu alors en plus c'est du MVC

    voici par exemple un controller :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     public function listerpararchiveAction()
        {
    		// On récupère l'ID de l'archive passé en Get
    		if ( $this->getRequest()->isGet() ) {
    			$archive = $this->getRequest()->getParam( 'num_archive' ); //echo $archive;
    			$archive = str_replace('__', '/', $archive);
    		}
     
            $scelles = new Application_Model_DbTable_Scelles();
    		$select   = $scelles->select()
                        ->setIntegrityCheck(false)
                        ->from (array('sc'=>'scelles'))
                        ->joininner (array('sr'=>'service'),'sr.id=sc.id_service',array('nom_service'=>'sr.nom')) 
    					->where ( 'sc.num_archive="' . $archive . '"' )
    					->order(array('sc.id desc'));
    		// exit ("$select");
     
     
    		//*** TEST TINYBUTSTRONG ***
    		$TBS = new clsTinyButStrong;
    		$TBS->Plugin(TBS_INSTALL, OPENTBS_PLUGIN);
    		$TBS->LoadTemplate(APPLICATION_PATH . '\..\library\tbs_plugin_opentbs_1.7.4\tbs.odt'); // Load the archive 'document.odt'.
     
    		//Prepare some data for the demo
    		$data = array();
    		$data[] = array('firstname'=>'Sandra' , 'name'=>'Hill'      , 'number'=>'1523d', 'score'=>200, 'email_1'=>'sh@tbs.com',  'email_2'=>'sandra@tbs.com',  'email_3'=>'s.hill@tbs.com');
    		$data[] = array('firstname'=>'Roger'  , 'name'=>'Smith'     , 'number'=>'1234f', 'score'=>800, 'email_1'=>'rs@tbs.com',  'email_2'=>'robert@tbs.com',  'email_3'=>'r.smith@tbs.com' );
    		$data[] = array('firstname'=>'William', 'name'=>'Mac Dowell', 'number'=>'5491y', 'score'=>130, 'email_1'=>'wmc@tbs.com', 'email_2'=>'william@tbs.com', 'email_3'=>'w.m.dowell@tbs.com' );
     
    		//Merge data
    		$TBS->MergeBlock('a,b', $data);
     
    		//Define the name of the output file
    		$file_name = 'test-tbs-' . date('Y-m-d') . '.odt';
    		//$TBS->Plugin(OPENTBS_DEBUG_XML_SHOW);
    		$TBS->Show(OPENTBS_DOWNLOAD, $file_name);
     
     
     
     
    		$this->view->scelles = $scelles->fetchAll($select);
     }
    il y a la premiere partie avec ma requete qui marche tres bien. Pour TBS par contre quoique je mette dans mon template j'obtiens le résultat de cette requete au lieu des données brutes contenues dans $data

    de plus si j'enlève le mode debug, il me génère 92 pages avec à chaque page une ligne de hiéroglyphes ....

    Quelqu'un aurait une petite idée ?

  6. #6
    Membre Expert
    Avatar de eric.pommereau
    Homme Profil pro ERIC POMMEREAU
    Ingénieur, pôle cartographie
    Inscrit en
    décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Nom : Homme ERIC POMMEREAU
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : décembre 2004
    Messages : 715
    Points : 1 666
    Points
    1 666

    Par défaut

    .. comme on se retrouve :-p

    Bon courage !!

    ++

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •