Categories > TinyButStrong general (FR) >

array[] et array()

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Arnauld
Date: 2008-05-29
Time: 16:09

array[] et array()

Salut,

ça me semble bizarre ...

$tab = array('maClef' => 'ma valeur');

$tbs->MergeBlock('bloc1','array', $tab);
ou
$tbs->MergeBlock('bloc1', $tab);

et le html
[bloc1.maClef]

ça ne fonctionne pas ...


j'ai lu la doc à ce sujet mais pourquoi faut-il rajouter [] en plus pour que cela fonctionne ?

je demande cela, car dans mes fichiers langues, j'utilise des tableaux genre

$lang_index = array(
'key1' => 'Val1',
'key2' => 'Val2'
);

il serait simple de pouvoir utiliser les méthodes décrites plus haut ??

merci d'avance
By: Arnauld
Date: 2008-05-29
Time: 16:34

Re: array[] et array()

encore une question lol

function page_header($subpage)
{
    global $TBS, $cpx_config, $db, $tags;
   
    $tags = getMetaTag($subpage);
    getLanguageFile(array('common'));
   
    $TBS->LoadTemplate('themes/'.$cpx_config['theme'].'/header.html') ;
    $TBS->LoadTemplate('themes/'.$cpx_config['theme'].'/'.$subpage.'.html','+') ;
    $TBS->Mergefield('cpx','tbs_get_constant', true);
}


function page_footer()
{
    global $TBS, $cpx_config, $db;
   
    $TBS->LoadTemplate('themes/'.$cpx_config['theme'].'/footer.html','+') ;
    $TBS->Show() ;
    $db->close();
}

dans ma page.php
page_header('index');

page_footer();

dans ma template footer.html se trouve
[cpx.FOO_RIGHTS]

mais il s'avère que cette constante n'est pas affichée ...
je ne comprend pas pourquoi
By: Arnauld
Date: 2008-05-29
Time: 16:36

Re: array[] et array()

j'ai trouvé réponse à ma deuxième question :)  la template footer doit être chargée avant le merge ...
By: Georges
Date: 2008-05-30
Time: 14:17

Re: array[] et array()

Pour ton premier post :

Le MergeBlock te permet de boucler sur un tableau, donc tu dois avoir un tableau indexé
$tab[] = array('maClef' => 'ma valeur1');
$tab[] = array('maClef' => 'ma valeur2');
$tab[] = array('maClef' => 'ma valeur3');
$tbs->MergeBlock('bloc1', $tab);
Tu pourras ainsi dans le html faire qqchose come ca :
<td>[bloc1.maClef;block=td]</td>

Ceci te permettra de créer dynamiquemement un tableau remplit automatiquement par toutes tes valeurs

Si tu n'as pas besoin de ça car tu ne veux pas boucler et que tu n'as qu'une valeur, alors dans ce cas tu dois utiliser MergeField au lieu de MergeBlock, et dans ce cas ton code html marchera
By: Arnauld
Date: 2008-06-05
Time: 16:45

Re: array[] et array()

merci pour la réponse mais je m'en sors pas ...

mon fichier contact.php
$language = getLanguageFile(array('contact'));
$TBS->MergeField('contact', $language);


ma fonction
function getLanguageFile($file)
{
    if(isset($_GET['lang']))
    {
        $_SESSION['lang'] = $_GET['lang'];
    }
    elseif (!isset($_SESSION['lang']))
    {
        $_SESSION['lang'] = "fr";
    }
   
    if(is_array($file))
    {
        foreach($file as $nf)
        {
            include ("language/".$_SESSION['lang']."/".$nf.".php");
        }
    }
    else
    {
        include ("language/".$_SESSION['lang']."/".$file.".php");
    }
}

mon fichier langue (contact)
$lang_contact = array(
'CO_TITLE' => 'Nous contacter',
'CO_NAME' => 'Nom',
'CO_FIRST' => 'Prénom',
'CO_LAST' => 'Nom',
'CO_COMPANY' => 'Société',
'CO_PHONE' => 'Téléphone',
'CO_WORK' => 'Bureau',
'CO_MOBILE' => 'Mobile',
'CO_REQUEST' => 'Votre demande',
'CO_TVA' => 'N° TVA',
'CO_BRUSSELS' => 'Bruxelles',
'ERR1' => 'Votre prénom est obligatoire et doit contenir au moins 3 caractères.',
'ERR2' => 'Votre nom est obligatoire et doit contenir au moins 3 caractères.',
'ERR3' => 'Veuillez compléter votre demande.',
'ERR4' => 'Veuillez compléter au moins un numéro de téléphone. Ne contient que des chiffres.'
);

et mon html
                <div class="formerror">
                        <p><label for="fname" class="error">- [contact.ERR1] </label></p>
                        <p><label for="lname" class="error">- [contact.ERR2] </label></p>
                        <p><label for="email" class="error">- [contact.ERR3] </label></p>
                        <p><label for="request" class="error">- [contact.ERR4] </label></p>
                </div>   

mais ça ne marche pas ...
je reçois l'erreur suivante ...
TinyButStrong Error in field [contact.ERR1...] : item before 'ERR1' is neither an object nor an array. Its type is string. This message can be cancelled using parameter 'noerr'.


si je met le tableau se trouvant ds le fichier directement dans mon fichier contact.php ... miracle ça marche ....

une idée ?

merci d'avance.
By: Georges
Date: 2008-06-05
Time: 17:26

Re: array[] et array()

heu je ne comprends pas... pourquoi y a t'il  :
array('contact')
dans les arguments que tu passes a ta fonction ???
pk tu ne passes pas 'contact' tout simplement ?

Ensuite ta fonction ne fait aucun return, donc $language ne contient rien


pour que ca marche il faudrait que tu fasses :
$TBS->MergeField('contact', $lang_contact);
By: Arnauld
Date: 2008-06-05
Time: 17:52

Re: array[] et array()

je passe un array car il y a plusieurs fichiers à inclure.
ici je fait le test avec un seul fichier et ça ne passe pas.

Quant au return, pas besoin puisque la fonction fait un include du fichier langue ... donc en théorie, le tableau langue est accessible comme si il se trouvait directement dans le fichier contact.php ....

By: Arnauld
Date: 2008-06-05
Time: 17:54

Re: array[] et array()

et j'ai tenté de faire

$TBS->MergeField('contact', $lang_contact);

ça ne marche pas non plus ...
By: Georges
Date: 2008-06-05
Time: 18:47

Re: array[] et array()

juste avant de faire ce mergefield, fais un print_r de $lang_contact, et regarde bien si la var n'est pas vide. Car normalement ca devrait etre bon...
By: Arnauld
Date: 2008-06-05
Time: 19:09

Re: array[] et array()

bien c'est clair qu'il est vide ... car cela fonctionne si je place le tableau $lang_contact directement dans le fichier contact.php

par contre si je passe par la fonction pour l'inclusion => marche plus et donc vide .... => erreur
ce que je n'arrive pas à comprendre c'est pourquoi il accepte pas le tableau lors de l'include alors que si je change ce tableau pour des constantes, ça marche parfaitement ...