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 :

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é.

Notes

[1] Bien sûr l'exemple est valable pour tout thème disposant déjà d'un fichier _public.php et tout code PHP qu'on vous aura demandé d'ajouter dans le fichier _public.php de votre thème.

[2] voir plus si plusieurs balises sont définies

[3] n'oubliez pas de sauvegarder régulièrement Dotclear