Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 25/11/2010, 10h38   #1
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Par défaut Portée de variable

Bonjour,

Je rencontre un problème "simple", j'explique:

Je dispose de deux fichiers: index.php et gamme.php

Index.php:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
 
<?php
ob_start();
 
list($k, $l, $m) = explode('/', $_SERVER['REQUEST_URI']);
if(empty($m)){
header('Status: 301 Moved Permanently', false, 301);
header('Location: ./index.html');
exit();
}
include('./includes/bdd_connect.php');
include('./includes/functions.php');
 
//Smarty
include('./includes/xSmarty/Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = './includes/myViews_tpl/';
$smarty->compile_dir = './includes/myViews_c/';
$smarty->config_dir = './includes/xSmarty/configs/';
$smarty->cache_dir = './includes/xSmarty/cache/';
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
 
//Architecture MVC
define('CONTROLERS', './includes/myControlers/');
define('MODELS', './includes/myModels/');
define('VIEWS', './includes/myViews_tpl/');
include(MODELS.'general.php');
if(isset($_GET['view'])){
switch($_GET['view']){
case '404':
$smarty->assign('title', 'Page non trouvée');
$inc = CONTROLERS.'404.php';//fonctions liées à gammes
$display = '404.tpl';
break;
case 'gamme'://page gamme.
//////////////////////////
//LA PARTIE DE TEST POUR LE TITRE EST ICI:
//////////////////////////
$inc = CONTROLERS.'gamme.php';//fonctions liées à gammes
$display = 'gamme.tpl';
break;
//////////////////////////////////////////////////
case 'actualites'://page gamme.
$smarty->assign('title', 'Actualités');
$inc = CONTROLERS.'actualites.php';//fonctions liées à actualites
$display = 'actualites.tpl';
break;
case 'articles'://page gamme.
$smarty->assign('title', 'Articles');
$inc = CONTROLERS.'articles.php';//fonctions liées à articles
$display = 'articles.tpl';
break;
case 'contact':
$smarty->assign('title', 'Contact');
$inc = CONTROLERS.'contact.php';//fonctions liées à contact
$display = 'contact.tpl';
break;
case 'produit':
$smarty->assign('title', 'Produit');
$inc = CONTROLERS.'produit.php';//fonctions liées à produit
$display = 'produit.tpl';
break;
case 'faq':
$smarty->assign('title', 'Foire aux questions');
$inc = CONTROLERS.'faq.php';//fonctions liées à la faq
$display = 'faq.tpl';
break;
case 'qui-sommes-nous':
$smarty->assign('title', 'Qui sommes nous');
$inc = CONTROLERS.'qui.php';//fonctions liées à qui-sommes-nous
$display = 'qui.tpl';
break;
case 'presse':
$smarty->assign('title', 'Revues de presse');
$inc = CONTROLERS.'presse.php';//fonctions liées à presse
$display = 'presse.tpl';
break;
case 'revendeurs':
$smarty->assign('title', 'Revendeurs');
$inc = CONTROLERS.'revendeurs.php';//fonctions liées aux revendeurs
$display = 'revendeurs.tpl';
break;
case 'poules':
$smarty->assign('title', 'Les poules');
$inc = CONTROLERS.'poules.php';//fonctions liées à poules
$display = 'poules.tpl';
break;
default:
$smarty->assign('title', 'Accueil');
$inc = CONTROLERS.'accueil.php';//fonctions liées à l'accueil
$display = 'accueil.tpl';
}//fin switch
}else{//si view pas defini = page accueil $smarty->display('menu.tpl');
$smarty->assign('title', 'Accueil');
$inc = CONTROLERS.'accueil.php';///fonctions liées à l'accueil
$display = 'accueil.tpl';
}
 
 
///////////////////////////////j'affiche la page!
$smarty->assign('title', $title);
$smarty->display('header.tpl');
 
include(CONTROLERS.'ariane.php');//fonctions liées à l'affichage du fil d'ariane
 
include(CONTROLERS.'caroussel_actu.php');//fonctions liées à l'affichage des actualités.
 
//////////////affichage du menu/////////////
include(CONTROLERS.'menu.php');
$smarty->display('menu.tpl');
////////////////////////////////////////////
 
require_once $inc;//inclus la page
$smarty->display($display);
 
////////////Affichage du pied de page////////
include(CONTROLERS.'footer.php');///fonctions liées au pied de page
$smarty->display('footer.tpl');
/////////////////////////////////////////////
ob_end_flush();
?>
gamme.php:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
<?php
require_once MODELS.'gamme.php';
 
if(isset($_GET['id']) and is_numeric($_GET['id'])){
 
$uneGamme = getGamme($_GET['id']);
$uneGamme['url_image_gamme'] = './img/gammes/'.$uneGamme['id_gamme'].'-';
$uneGamme['url_image_gamme'].= safe_str($uneGamme['nom_gamme']).'/'.$uneGamme['url_image_gamme'];
 
$smarty->assign('uneGamme', $uneGamme);
$produits = getProduits($_GET['id']);
$smarty->assign('produits', $produits);
global $title;
$title = 'omg ça marche!';
 
 
}else{
header('location: ./index.php');
}
?>
On peut donc voir que je switch suivant un GET et que je traite mes données dans le fichier gamme.
Pour le SEO, j'aimerais afficher un title différent selon chaque page (logique hein ^^). Le problème est que, je traite comme on peut le voir le $title dans le fichier gamme.php (le fichier inclus donc) et que je fais

Code :
$smarty->assign('title', $title);
Et qu'il ne me trouve pas $title et qu'il m'affiche un undefined index...

Je ne comprends pas car j'ai fait des tests (avec un nouveau fichier index.php et test.php pour voir si normalement la variable est rappatriée dans le fichier parent, et c'est le cas)


Quelqu'un pourrait-il m'éclairer s'il vous plait?
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 10h43   #2
Membre régulier
 
Inscription : octobre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : octobre 2010
Messages : 101
Points : 71
Points : 71
C'est tout à fait normal.

Ton fichier index.php ne peux pas récupérer 'par magie' les variables des autres fichiers.

essaye ça tu comprendras peut-être mieux :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!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">

<?php include("test.php"); ?>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 
  <title><?php echo $title; ?></title>
 
</head>
<body>
Test de titre
<!-- Document -->
</body>
</html>
La tu 'inclus' dans ta page index le fichier test.php. A partir de la, tous ce qui existe dans ton fichier test.php sera accessible dans ton index.
proxichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 10h54   #3
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Oui oui, je sais. J'avais oublié le include (j'ai fait un edit en le marquant).

Mais cetait des tests. Regarde mon nouveau post. (edit de celui ci expliquant le vrai problème).

Merci de te pencher sur mon cas
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 11h01   #4
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
C'est bon, j'ai enfin trouvé à force de lire, relire et rererelire...

En fait, c'est encore une étourderie...

Dans mon switch case 'gamme' je faisais $inc = CONTROLERS.'gamme.php'

Puis je l'incluais après le header.tpl... Donc normale qu'il ne le trouve pas. Je devais faire mon include dans le switch et non après...
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 11h06   #5
Membre régulier
 
Inscription : octobre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : octobre 2010
Messages : 101
Points : 71
Points : 71
hmmm je ne suis pas expert en MVC sous php mais il y a un truc qui me semble bizarre :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
///////////////////////////////j'affiche la page!
  $smarty->assign('title', $title);
  $smarty->display('header.tpl');
  
  include(CONTROLERS.'ariane.php');//fonctions liées à l'affichage du fil d'ariane
  
  include(CONTROLERS.'caroussel_actu.php');//fonctions liées à l'affichage des actualités.
  
  //////////////affichage du menu/////////////
  include(CONTROLERS.'menu.php');
  $smarty->display('menu.tpl');
  ////////////////////////////////////////////
  
  require_once $inc;//inclus la page
  $smarty->display($display);
deja quand tu fais : $smarty->assign('title', $title);

Ta variable $title n'existe pas encore.

Juste au cas ou, as tu essayé de faire un truc du style :

Code :
1
2
$title = "test";
$smarty->assign('title', $title);
si cela fonctionne alors tu devrais faire ton inclusion avant $smarty->assign('title', $title);
proxichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 11h08   #6
Membre régulier
 
Inscription : octobre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : octobre 2010
Messages : 101
Points : 71
Points : 71
ah ba j'étais pas loin ^^ le problème est bien que ta variable $title n'était pas encore défini car tu faisais ton include après.

bon courage pour la suite.
proxichou 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 17h56.


 
 
 
 
Partenaires

Hébergement Web