Précédent   Forum des professionnels en informatique > PHP > Scripts > Forum > phpBB
phpBB Avant de poster -> Cours phpBB, FAQ phpBB et Sources phpBB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/09/2005, 16h15   #1
Invité de passage
 
Inscription : juillet 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 12
Points : 4
Points : 4
Par défaut Problème de Function avec le Template PhpBB

Bonjour je viens de faire un formulaire avec une gestion des thèmes grâce à au moteur de template phpbb.

J'ai voulu mettre la génération des menus déroulants dans une fonction, car j'en ai pas mal, mais c'est pas parce que mon bout de code marchait hors fonction, qu'il allait s'adapter sans râler. (^^)

Voilà le code d'origine qui marche mais que j'ai pas trop envie de le coller vingt fois dans ma page.

Code :
1
2
3
4
5
6
7
8
9
10
 
foreach ($marque as $key => $value)
{
$selected = ($key == @$_SESSION['marque']) ? 'selected="selected"' : '';
$template->assign_block_vars('pre_marque.marque_opt', array(
'OPTION' =>$value,
'VALUE' =>$key,
'SELECTED' =>$selected,
));
}
Et voilà la fonction qui ne veut pas rouler.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
function TableauSelect($tableau,$valeur,$nom)
  {
     foreach ($tableau as $key => $value)
       {
          $selected = ($key == $valeur) ? 'selected="selected"' : ''; 
          $template->assign_block_vars($nom, array(
              'OPTION' =>$value,
              'VALUE' =>$key,
              'SELECTED' =>$selected,
          ));
       }      
  }
 
TableauSelect($marque, @$_SESSION["marque"],'pre_marque.marque_opt');
le problème c'est ça :
Code :
$template->assign_block_vars($nom, array( ));
Si j'ai bien compris, il s'agit d'une class et je n'arrive pas a faire en sorte que ma fonction de s'initialise qu'une fois la class lancée par le bout de code suivant :

Code :
1
2
3
 
$template = new Template('./theme');
$template->set_filenames(array('index' => 'index.tpl'));
Je débute en php et là je suis vraiment dans l'impasse...

Si quelqu'un peu me mettre sur la voie, merci à lui.
mangafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2005, 16h20   #2
Rédacteur
 
Homme
Geek entrepreneur
Inscription : novembre 2004
Messages : 1 035
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Geek entrepreneur

Informations forums :
Inscription : novembre 2004
Messages : 1 035
Points : 1 813
Points : 1 813
Dans ta fonction :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
function TableauSelect($tableau,$valeur,$nom) 
  { 
     foreach ($tableau as $key => $value) 
       { 
          $selected = ($key == $valeur) ? 'selected="selected"' : ''; 
          $template->assign_block_vars($nom, array( 
              'OPTION' =>$value, 
              'VALUE' =>$key, 
              'SELECTED' =>$selected, 
          )); 
       }      
  }
Je ne comprends pas bien ta question mais je vois que a aucun moment tu ne passe $template en argument.
Pourquoi ?
hugo123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2005, 16h27   #3
Invité de passage
 
Inscription : juillet 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 12
Points : 4
Points : 4
Pardon manque peut-être le code du template pour mieux saisir.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<!-- BEGIN pre_marque -->
<p>
<label for="marque">Marque</label> 
<select id="marque" name="marque" size="1" onchange="document.sous.submit()">
<!-- BEGIN marque_opt -->
<option value="{pre_marque.marque_opt.VALUE}" {pre_marque.marque_opt.SELECTED}>{pre_marque.marque_opt.OPTION}</option>
<!-- END marque_opt -->
</select>
</p>
<p>
<label for="model">Mod&egrave;le</label>
<select  id="model" name="model" onchange="document.sous.submit()">
<!-- BEGIN model_opt -->
<option value="{pre_marque.model_opt.VALUE}" {pre_marque.model_opt.SELECTED}>{pre_marque.model_opt.OPTION}</option>
<!-- END model_opt -->
</select>
</p>
<!-- END pre_marque -->
Je pensais faire comme ça pour éviter de mélanger les blocs dans mon fichier *.tpl car j'ai des conditions qui font que certains vont s'afficher et d'autres non. Si je fixe sur le même nom de bloc, ça marchera pas.

Hors fonction tout marche, et j'ai fait un essai en retirant l'argument $nom et en le fixant le problème reste le même.

Citation:
Fatal error: Call to a member function on a non-object in c:\documents and settings\administrateur\bureau\travail\new321auto\index.php on line 19
mangafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2005, 16h29   #4
Rédacteur
 
Homme
Geek entrepreneur
Inscription : novembre 2004
Messages : 1 035
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Geek entrepreneur

Informations forums :
Inscription : novembre 2004
Messages : 1 035
Points : 1 813
Points : 1 813
Oui et la ligne 19 je parie que c'es :

$template->assign_block_vars($nom, array(
'OPTION' =>$value,
'VALUE' =>$key,
'SELECTED' =>$selected,

Normal, $template n'est pas connu dans ta fonction.

Il faut le passer en paramêtre.
hugo123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2005, 16h29   #5
Membre éclairé
 
Avatar de genova
 
Inscription : septembre 2004
Messages : 487
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 487
Points : 397
Points : 397
Envoyer un message via MSN à genova
Salut,
si tu veux utiliser une variable (en locurence $template ici même) dans une fonction tu dois la rendre globale en rajoutant :
Code :
global $nom_de_ta_variable;
avant de l'utiliser, par exemple dans ton cas fait ca :
Code :
1
2
3
function TableauSelect($tableau,$valeur,$nom)
  { 
      global $template;
PS : va voir mon tuto dans ma signature si tu as du mal avec le système de template phpBB.
__________________
Testez le forum Fire Soft Board, un forum libre, gratuit et français.

Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.
genova est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2005, 16h32   #6
Invité de passage
 
Inscription : juillet 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 12
Points : 4
Points : 4
Merci beaucoup, je vais essayer. Le tuto sur les templates, je le connais c'est grâce à lui que j'ai commencé à ma lancer dedans, c'est plutôt côté function que je bloquais.

edit :

Merci ça marche, le malheur, c'est que j'ai cherché un tuto sur les fonctions et j'en ai pas trouvé. Je vais continuer à chercher j'ai des l'accunes de ce côté là...
mangafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h00.


 
 
 
 
Partenaires

Hébergement Web