IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] Erreur notice, pour : Gestion d'un système de template en PHP


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [Système] Erreur notice, pour : Gestion d'un système de template en PHP
    Bonjours,

    j'ai suivi le tuto proposé sur developpez.com (merci Adrien Pellegrini) suivant :
    http://a-pellegrini.developpez.com/t...php/templates/

    Qui est bien fait dans l'emsemble (pour ma part y un détail que j'ai pas compris j'y reveindrais aprés l'explication de mon probléme).
    j'obtient l'erreur:
    Notice: Undefined index: menu in template.php on line 58.
    Mais je ne comprend pas pourquoi cette erreur.
    ci-join les fichier en cause, le fichier index.htm est nommée index.tpl sur mon serveur (developpez.com n'accepte pas les fichier tpl).

    Si quelqu'un pourrait m'expliquer pour corriger, d'où ça vient j'en lui serai reconnaissant.

    Sinon là où je suis pas sur d'avoir bien suivi c'est au chapitre 4 : Méthode(s) supplémentaire(s).
    Pour moi il faut remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ligne 76:
    foreach ($info[$i] as $constant => $data) {
        // Remplace {CONSTANTE} par les donneés correspondantes
       // et mets  jour le code HTML du fichier test.tpl
       // stock dans $this->page
       $data = (file_exists($data)) ? $this->includeFile($data) : $data;
       $this->page = preg_replace('`{'.$constant.'}`', $data, $this->page);
    }
    ...
    ligne 134 :
    foreach($info[$i] as $constant => $data) {
       $data = (file_exists($data)) ? $this->includeFile($data) : $data;;
       $blockTag = preg_replace('`{'.$type.'.'.$constant.'}`', $data, $blockTag);
    }
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    ligne 76
    foreach ($info[$i] as $constant => $data) {
        // Remplace {CONSTANTE} par les donneés correspondantes
       // et mets  jour le code HTML du fichier test.tpl
       // stock dans $this->page
       $data = (file_exists($data)) ? $this->includeFile($data) : $data;
       $this->page = preg_replace('`{'.$constant.'}`', $data, $this->page);
     
       // Si $data est un fichier
       $data = (file_exists($data)) ? $this->includeFile($data) : $data;
      $this->page = preg_replace('`{'.$constant.'}`', $data, $this->page);
    }
    ...
    ligne 137 (anciennement 134) :
    foreach($info[$i] as $constant => $data) {
       $data = (file_exists($data)) ? $this->includeFile($data) : $data;;
       $blockTag = preg_replace('`{'.$type.'.'.$constant.'}`', $data, $blockTag);
    }
    et rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    function includeFile ($file) {
    	// Enclenche la temporisation de sortie
    	ob_start();
     
    	include $file;
     
    	// Enregistre le contenu du tampon de sortie
    	$buffer = ob_get_contents();
     
    	// Efface le contenu du tampon de sortie
    	ob_clean();
     
    	// Retourne les données enregistrées
    	return $buffer;
    }
    avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        function constantReplace() {
    ...
    Ai-je bon ?


    Et une question me tarlupinne, avec ce script comment je peut faire pour avoir des affichages conditionnels de block genre formulaire de connexion ou un lien vers son profil suivant si on est connecter ou pas?

    Merci a vous d'avoir consacré un peu de temps a lire ce pavé, et j'éspere avoir été assez claire dans mes explications vaseuses.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti Avatar de makmaoui
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 283
    Points : 368
    Points
    368
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined index: menu in template.php on line 58.
    signifie que tu utilises un élément de tableau inexistant, peut-on voir le code à la ligne 58 ?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    oui, c'est vrais que ca peut etre plus partique que d'allez voir dans le code source des fichiers joints, j'ai mis la fonction entier ca peut aider.

    J'avait compris que l'index n'etait initialiser, mais je comprend pas pourquoi, car si je commente ca marche plus du tout (c'est peu etre normale)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    #48   function loopVar($type, $varArray = array()) {
    #49		// Si le tableau est vide, on stoppe le script
    #50		if (empty($varArray)) exit;
    #51	        
    #52		// Calcule le nombre de lignes dans le type courant
    #53		// Si 0 ligne    => 0
    #54		// Si X lignes    => X
    #55		// Pourquoi X et non (X + 1) ?
    #56		// -> Car on comtpe à partir de 0 donc X retourne toujours
    #57		//      le dernier id + 1
    #58		$lastID = (count($this->infoTpl[$type]) != 0) ? (count($this->infoTpl[$type])) : 0;
    #59	        
    #60		foreach ($varArray as $constant => $data) {
    #61			$this->infoTpl[$type][$lastID][$constant] = $data;
    #62		}
    #63   }

  4. #4
    Membre averti Avatar de makmaoui
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 283
    Points : 368
    Points
    368
    Par défaut
    Ajoute un test avant d'utiliser cet élément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    #58 $lastID = (isset($this->infoTpl[$type]) && count($this->infoTpl[$type]) != 0) ? (count($this->infoTpl[$type])) : 0;

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Et franchement, y a-t-il une bonne raison pour utiliser un opérateur ternaire ?
    Un bon vieux if...then...else est carrément plus lisible.
    C'est du php, pas du perl.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Excuser moi de mon absence je passais de wind*** a Linux.

    Ajoute un test avant d'utiliser cet élément :
    Je n'ai pas encore test pas eu le temps, le temps de me remettre les main dans le cambouis, et savoir ou j'en était et je teste.

    Et franchement, y a-t-il une bonne raison pour utiliser un opérateur ternaire ?
    en fait j'ai repris le tuto a la lettre

    [quelque instant plus tard]
    Voilou, j'ai remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $lastID = (count($this->infoTpl[$type]) != 0) ? (count($this->infoTpl[$type])) : 0;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!empty ($this->infoTpl[$type]) ) {
          $lastID = count ($this->infoTpl[$type]) ;
    } else {
    	$lastID = 0 ;
    }
    et l'erreur notice a disparue, et pour répondre a ta question jml94, non je confirme apparemment il n'a y pas besoin, ça marche aussi bien.

    1ere problème résolut. Merci.

    Pour le cas de l'affichage conditionnel, étant débutant des les templates, je patauge carrément
    je pencherait pour modifier ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    // Récupration et formatage des tags
    	$startTag = '<!-- BEGIN '.$type.' -->';
    	$startTag = htmlentities($startTag);
     
    	$endTag = '<!-- END '.$type.' -->';
    	$endTag = htmlentities($endTag);
     
    	// Récupration de la clé des tags dans le tableau $infoArray
    	$startTag = (array_search($startTag, $infoArray)) + 1;
    	$endTag = (array_search($endTag, $infoArray)) - 1;
     
    	// Nombre de lignes entre les tags
    	$lengthTag = ($endTag - $startTag) + 1;
     
    	// Récupration de la portion du tableau
    	// délimite par les tags (tags non compris)
    	$blockTag = array_slice($infoArray, $startTag, $lengthTag);
     
    	// Remise en type 'string' et non plus 'array'
    	// Facilitera le remplacement des constantes par leurs donneés
    	$blockTag = implode("\n", $blockTag);
     
    	// Remplacement des constantes par leur données
    	foreach($info[$i] as $constant => $data) {
    	        $data = (file_exists($data)) ? $this->includeFile($data) : $data;;
    		$blockTag = preg_replace('`{'.$type.'.'.$constant.'}`', $data, $blockTag);
    	}
     
    	// Ajout des données à la variable block globale pour la boucle
    	// Ajoute \n ou pas et ajoute les données
           // de la nouvelle boucle à la suite de $block
    	$block = ($block == '') ? $blockTag : $block."\n".$blockTag;

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/07/2014, 17h03
  2. Erreur pour le moins étrange(système)
    Par asphalte dans le forum C++
    Réponses: 6
    Dernier message: 24/06/2008, 10h56
  3. Lien pour afficher fenêtre Propriétés système.
    Par keny dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/07/2005, 18h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo