8711 sujets

Développement web côté serveur, CMS

Bonjour,

Je rencontre actuellement un problème dans un template.

Je veux incorporer ce code :
<style type="text/css">
    #gallery{background-image:url(./images/<?php echo ucfirst(pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME)); ?>.png);}
</style>

Directement intégré dans la page il est parfaitement fonctionnel, mais à partir du template ça ne fonctionne pas, tout plante :
Wamp a écrit :
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\wamp\www\projetBC\template.inc.php on line 380


Je vois bien le problème, aussi j'ai exploré certaines alternatives telles que placer des ''{}'' :
#gallery{background-image:url(./images/<?php echo ucfirst(pathinfo({$_SERVER['PHP_SELF']}, PATHINFO_FILENAME)); ?>.png);}


Là la page charge bien, mais le code n'est pas fonctionnel pour autant... D'ailleurs si j'intègre directement ce code sans passer par un template, ça ne fonctionne pas non plus.

Quelqu'un aurait une solution ?
Modifié par BlueCoffee (22 May 2013 - 15:26)
Merci beaucoup pour ta réponse !
Je vais tenter de var_dumpouiller.

Mais j'ai du nouveau ceci dit :
À priori ce serait le "$" qui poserait problème. J'ai mis des point, guillemets, slash, antislash, j'ai essayé plein de choses, généralement la page se charge bien, mais pour autant ce n'est pas fonctionnel.

Et pour cause : si je regarde dans le code source de la page généré, le PHP est en commentaire HTML !

Pourtant, mes fichiers sont bien des ".php", Wamp est bien lancé, et je suis bien en localhost.
Je n'y comprend rien...
Modifié par BlueCoffee (23 May 2013 - 10:28)
Dans l'ordre, on va déjà voir si le morceau de code php fonctionne :

<?php echo ucfirst(pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME)); ?>

Si oui, on se posera la question de savoir si t'as moyen de mettre du php dans du css avec un fichier en .php (je ne l'ai jamais fait perso).

Donc ce que je veux savoir c'est si ce que te donne $_SERVER['PHP_SELF'] est bien lisible avec pathinfo. Et si pathinfo() donne bien un truc utilisable par ucfirst.

Donc dans l'ordre, tu vas regarder à quoi ressemble $_SERVER['PHP_SELF'] grâce à une fonction indispensable en débuggage : var_dump. Elle s'utilise simplement :
var_dump($_SERVER['PHP_SELF']);


Et tu fais la même chose avec le résultat de la fonction pathinfo($_SERVER['PHP_SELF'],PATHINFO_FILENAME);


Après, PHP c'est de la logique, pas du bidouillage, ça ne sert à rien de tester plein de choses, il faut savoir où est le problème.
Un médecin ne soigne pas un patient en le bourrant de médicaments en espérant que l'un réagisse. Il cherche la maladie.
Bah un développeur en php, c'est la même chose. Il tente pas plein de trucs aléatoirement en espérant que l'un marche. Il commence par chercher l'origine du bug.
Merci encore pour ton aide.

Voici les résultats :
• string '/projetBC/megamenuhtml5ycss3/index.php' (length=41)
• string '/projetBC/megamenuhtml5ycss3/index.php' (length=41)
int 8


Je précise que hors template (c'est à dire si j’intègre ce code directement dans une page), c'est parfaitement fonctionnel.

Je prend note de tes conseils, je vais essayer d'appréhender tout ça de façon plus logique et réfléchis. Je retourne analyser tout ça de mon côté.
BlueCoffee a écrit :


Je précise que hors template (c'est à dire si j’intègre ce code directement dans une page), c'est parfaitement fonctionnel.
Euh, dans le premier post, tu dis l'inverse ^^'

Donc est-ce que ton code marche hors template ou pas ?

Si oui, va falloir voir du coté du template (là je suis pas la mieux placée, j'en utilise pas). Genre savoir déjà quel template, tu utilises. A quoi ressemble le code pour un background non-dynamique,...
Dans mon premier post, j'avais dis ceci :
BlueCoffee a écrit :

Directement intégré dans la page il est parfaitement fonctionnel, mais à partir du template ça ne fonctionne pas, tout plante :

C'est peut être la tournure qui a pu porter à confusion ? Mais en tout cas il est certain que sans utiliser le template, cela fonctionne parfaitement.


J'utilise un template tout simple, il est structuré comme ceci :
<?php

function showBodyContent()
{
        echo <<< CONTENT

[b][i]ICI MON CONTENU, donc en l'occurence :[/i]
<style type="text/css">
    #gallery{background-image:url(./images/<?php echo ucfirst(pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME)); ?>.jpg);}
</style>[/b]

CONTENT;  
}
?>


Et je l'appelle dans mes pages, comme ceci :
<?php
include('template.inc.php');
?>
 <body>
<?php
showBodyHeader();   
?>  
</body>
Un bloc heredoc c'est une chaine de caractères, tu peux pas t'amuser à coller du code PHP en plein milieu.


function showBodyContent()
{
  $path = ucfirst(pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME));

  echo <<< CONTENT
<style type="text/css">
  #gallery{background-image:url(./images/$path.jpg);}
</style>
CONTENT;
}


La prochaine file ton code complet au lieu de sortir un bout hors contexte. Personne ne pouvait t'aider avec le bout de code que tu as donné dans ton premier message.
Modifié par jb_gfx (25 May 2013 - 17:27)
Effectivement, cela a complétement résolu le problème.
En y repensant, ça aurait pourtant dû me sembler logique...

Merci en tout cas pour ton aide !

Sujet résolu.