Le fichier _public.php
du thème du blog est lu à chaque affichage du blog, il peut contenir la déclaration d'une nouvelle balises de template ou la modification d'une balise existante et bien d'autres choses.
Présentation du fichier
Le fichier _public.php
d'un thème doit être placé dans le répertoire du thème, au même niveau que le fichier _define.php
. Par défaut, les thèmes sont installés dans le répertoire /dotclear/themes/
. Chaque thème est installé dans un répertoire portant son nom.
Comme son nom l'indique, le fichier _public.php
est un fichier au format PHP. Il doit obligatoirement commencer par une balise ouvrante <?php
et se terminer par une balise fermante ?>
:
<?php # ceci est un commentaire pour le code PHP ?>
Certaines modifications de Dotclear nécessitent d'ajouter un code PHP à Dotclear. Cela est possible en créant un plugin mais la modification du fichier _public.php
a plusieurs avantages :
- cela demande moins de travail que de créer un plugin
- si les fichiers personnels sont isolés, les modifications n'auront d'impact que sur un seul blog
Si un tutoriel vous demande d'ajouter un code PHP au fichier _public.php
de votre thème, vous ferez face à 2 cas possibles.
Le thème ne contient pas de fichier _public.php
Créez un fichier _public.php
dans le répertoire de votre thème puis insérez le code désiré en vérifiant que les balises ouvrante et fermante de PHP sont bien présentes.
Le thème contient déjà un fichier _public.php
Vous allez devoir modifier le fichier _public.php
existant. Nous allons imaginer que vous utilisez le thème Noviny (qui est un thème distribué avec un fichier _public.php
) et que vous voulez y ajouter le code nécessaire à la création d'une balise {{tpl:DCVersion}}. [1]
Récupérez le fichier _public.php
sur votre ordinateur (en utilisant par exemple un client FTP) et ouvrez-le avec votre éditeur de texte.
Faites défiler le texte jusqu'à arriver en bas du fichier, vous voyez ceci :
(le fichier est présenté partiellement pour ne pas encombrer ce billet, nous ne présenterons ici que les dernières lignes du fichier)
catch (Exception $e) {} header('Content-Type: text/plain; charset=UTF-8'); echo $res; } } ?>
Pour ne pas casser le code existant, nous allons faire un peu de place en ajoutant des lignes avant la balise fermante de PHP (?>
) :
catch (Exception $e) {} header('Content-Type: text/plain; charset=UTF-8'); echo $res; } } ?>
Il ne reste plus qu'à ajouter le code PHP de la balise {{tpl:DCVersion}}
. Puisqu'il y a déjà les balises ouvrante et fermante de PHP dans le fichier _public.php
, on ne les copie pas. Il faut donc sélectiopnner seulement cette portion de code :
$core->tpl->addValue('DCVersion', array('tplMyThemeAdditions', 'DCVersion')); class tplMyThemeAdditions { public static function DCVersion($attr) { return '<?php echo DC_VERSION; ?>'; } }
Collons cette portion de code dans le fichier _public.php
. Le fichier modifié contient l'ancien code et la portion qu'on a ajoutée :
catch (Exception $e) {} header('Content-Type: text/plain; charset=UTF-8'); echo $res; } } $core->tpl->addValue('DCVersion', array('tplMyThemeAdditions', 'DCVersion')); class tplMyThemeAdditions { public static function DCVersion($attr) { return '<?php echo DC_VERSION; ?>'; } } ?>
Et voilà ! La balise {{tpl:DCVersion}} est définie, vous pouvez maintenant l'utiliser dans votre thème.
Les erreurs possibles
L'insertion d'un code dans un autre peut provoquer des erreurs, les plus probables sont décrites ici.
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in /[...]/_public.php on line X
Si PHP affiche une erreur de ce genre, vérifiez que vous n'avez pas copié votre code dans un bloc d'instruction, délimité par les accolades ({
et }
). Déplacez alors votre code en suivant les recommandations ci-dessus.
Parse error: syntax error, unexpected '<' in /[...]/_public.php on line X
Regardez si vous avez inséré par erreur une nouvelle balise ouvrante <?php
.
Fatal error: Cannot redeclare class Y in /[...]/_public.php on line X
Le code PHP utilise un nom de classe déjà défini. Si cela arrivait par exemple avec la classe tplMyThemeAdditions
, il faudrait lui donner un nouveau nom unique. La classe tplMyThemeAdditions
sera alors renommée en tplMyThemeAdditionsDCVersion
:
$core->tpl->addValue('DCVersion', array('tplMyThemeAdditionsDCVersion', 'DCVersion')); class tplMyThemeAdditionsDCVersion { public static function DCVersion($attr) { return '<?php echo DC_VERSION; ?>'; } }
Notez que le nom de la classe est utilisé 2 fois [2] dans le fichier, il faut donc faire les 2 remplacements.
Mise à jour
Pour les mises à jour futures du thème, pensez à sauvegarder [3] le fichier _public.php
avant de le mettre à jour.
Si le thème ne contient pas de fichier _public.php
, vous pourrez renvoyer votre fichier à sa place si la mise à jour l'efface.
Si le thème contient un fichier _public.php
, vos modifications seront probablement effacées. Vous devrez alors comparer votre fichier _public.php
avec le fichier _public.php
du thème mis à jour pour rajouter votre code personnalisé.
Commentaires
Merci pour ton article.
Je veux ajouter une balise perso à mon template, j'ai donc suivi la manip pour créer un fichier _public.php et mettre le code qui va bien dedans...
Mon problème : la balise n'est pas remplacée lorsque j'affiche le blog, elle s'affiche en dur.
Mon fichier _public.php est bien à la racine de theme, pourtant si je fais une erreur de syntaxe dedans, tout amrche bien, je suppose donc que ce fichier n'est pas utilisé. Comment faire ?
Merci d'avance
@Dam : tu peux commencer par vérifier que tu as placé le fichier _public.php dans le bon thème. On peut facilement se tromper si on a plusieurs répertoires de thème. Si le fichier est au bon endroit, il faut vérifier ses permissions.
Merci beaucoup pour ta réponse.
Le fichier _public.php est effectivement dans le bon répertoire de thème.
(il faut bien le mettre à la racine de "/themes/monTheme" ?)
Pour ce qui est des permissions, je n'ai normalement pas ce problème puisque je suis sur une installation locale sous windows.
(j'avais effectivement oublié de le préciser)
@Dam : c'est écrit
. Ça te paraît assez clair ? Tu avais placé le fichier dans ton répertoire/themes/
?Oui oui, il est au bon endroit. Désolé si je me suis mal exprimé.
Dam : si tu ajoutes une erreur dans le fichier
_define.php
du thème, ton blog s'affiche ?Une erreur dans le fichier _define.php se répercute bien en message d'erreur sur le blog...
J'ai testé une erreur dans un fichier _public.php sur le blog "de production", et bien il se trouve que l'erreur s'affiche bien. Mon problème ne se présente donc qu'en local, c'est vraiment bizarre.
Je laisse donc tomber puisque le seul problème que cela va me poser est d'empecher quelques tests avant mise en ligne, ce n'est pas bien grave.
Un grand merci à toi pour ton aide en tout cas.
Bonjour, j'ai exactement le meme probleme que Dam j'ai reverifié 10 fois chaque chose... Quelqu'un à une idée ??
@john : est-ce que les 2 blogs ont le même niveau d'erreur ? Tu peux le voir avec le plugin Informations.
oubliez ce que j'ai dit, je remplissais mal ma balise....tss genre
au lieu de