Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Bonjour,
C'est idiot, je ne trouve pas dans les templates ou dans les plugins la page author qui nous permet sur notre blog multiauteurs de filtrer les billets par rédacteur :
http://www.je-mattarde.com/index.php?author/gilles
Et si c'est juste un attribut, je ne comprends pas pourquoi la présentation des billets diffèrent avec la page d'accueil.
Pouvez-vous m'éclairer?
Dernière modification par je-mattarde (2012-02-15 12:06:01)
Gilles
Hors ligne
Le thème que tu utilises a une structure différente du thème par défaut. Il faut adapter en fonction la CSS et/ou la structure de template.
Hors ligne
Je ne connais pas cette page "author". je suppose qu'elle dépend d'un plugin (peut-être authorMode ?). Généralement le/les templates sont fournis avec dans le répertoire default-templates du plugin et peuvent être personnalisés en le/les ajoutant au répertoire "tpl" du thème utilisé.
C'est le cas avec authorMode comme l'indique sa fiche dans dotaddict :
Ce plugin ajoute deux fichiers de thème :
- un fichier author.html affichant la liste des billets d'un même auteur
- un fichier authors.html affichant la liste des auteurs avec un lien vers la page regroupant les billets de chacun d'entre eux.Ces fichiers sont situés dans le répertoire default-templates du plugin. Vous pouvez les personnaliser en en en plaçant une copie dans le répertoire du thème que vous utilisez puis en y effectuant vos modifications.
Le B.A.BA : https://abc.dotaddict.org
La doc DC2 : https://fr.dotclear.org/documentation/2.0
Mes extensions : https://www.mirovinben.fr/blog/index.ph … pluginsDC2
Mes marqueurs de template : https://www.mirovinben.fr/blog/index.php?post/id3553
Hors ligne
Normalement les fichiers de ce plugin devraient être visible depuis l'éditeur du thème.
Hors ligne
je suppose qu'elle dépend d'un plugin (peut-être authorMode ?).
Bingo.
Je suis bigleux.
Je ne me souvenais plus d'avoir mis en place ce plugin.
Et j'ai dû mal utiliser l'outil de recherche de fichiers de windows.
Les deux fichiers de thème se trouvaient bien dans le dossier de ce plugin.
Normalement les fichiers de ce plugin devraient être visible depuis l'éditeur du thème.
Oui et comme je ne passe jamais par l'éditeur de thème, je n'y ai pas fait attention. Mais effectivement, les fichiers s'y trouvent bien aussi.
Merci à tous les deux.
Dernière modification par je-mattarde (2012-02-15 13:52:09)
Gilles
Hors ligne
J'ai une nouvelle question.
Dans cette page author.html, la balise suivante affiche le nom du rédacteur sélectionné :
{{tpl:AuthorCommonName encode_html="1"}}
Je souhaite tester l'expression de AuthorCommonName pour afficher (ou pas) un extrait de code dans la page author.
Je me suis donc orienté vers le plugin ExpAt
Et j'ai testé de faire ça :
<tpl:EntryIf AuthorCommonName="Gilles">
Profil 1
</tpl:EntryIf>
<tpl:EntryIf AuthorCommonName="Renaud">
Profil 2
</tpl:EntryIf>
<tpl:EntryIf AuthorCommonName="Clément">
Profil 3
</tpl:EntryIf>
Résultat pas concluant, cela affiche :
Profil 1 Profil 2 Profil 3
Est ce que je me trompe en assimilant AuthorCommonName comme une variable dont je peux tester l'expression?
Dernière modification par je-mattarde (2012-02-16 10:49:38)
Gilles
Hors ligne
[désolé du doublon, voir mon message précédent]
Dernière modification par je-mattarde (2012-02-16 10:50:54)
Gilles
Hors ligne
Est ce que je me trompe en assimilant AuthorCommonName comme une variable dont je peux tester l'expression?
Oui. Le marqueur de template <tpl:EntryIf>...</tpl:EntryIf> n'accepte que les paramètres prévus par le(s) développeur(s). Ils sont répertoriés ici.
Le B.A.BA : https://abc.dotaddict.org
La doc DC2 : https://fr.dotclear.org/documentation/2.0
Mes extensions : https://www.mirovinben.fr/blog/index.ph … pluginsDC2
Mes marqueurs de template : https://www.mirovinben.fr/blog/index.php?post/id3553
Hors ligne
Dac.
J'ai donc essayé de comprendre ce qui se cachait derrière AuthorCommonName. Je me tripatouille avec le peu de connaissances que j'ai du php.
Donc dans le fichier public.php du plugin, j'ai trouvé une fonction :
public static function AuthorCommonName($attr){
$f = $GLOBALS['core']->tpl->getFilters($attr);
return '<?php echo '.sprintf($f,'$_ctx->users->getAuthorCN()').'; ?>';
}
puisque la fonction retourne une expression, je pensais tester le nom de l'auteur ici, affecter une variable pour stocker le texte qui sera différent selon le nom de l'auteur, et ajouter cette variable à l'expression retournée.
public static function AuthorCommonName($attr){
$f = $GLOBALS['core']->tpl->getFilters($attr);
if($_ctx->users->getAuthorCN()='gilles'){
$ajout_text='blabala1';
}else{
$ajout_text='blabla2';
}
return '<?php echo '.sprintf($f,'$_ctx->users->getAuthorCN()',$ajout_text).'; ?>';
}
Si j'avais réussi du premier coup, ca aurait été fort surprenant.
Je suppose que je n'ajoute pas correctement ma variable dans la fonction sprintf.
Si quelqu'un a le temps de s'y pencher un peu pour m'aider, ça ne me semble pas compliqué, mais je bloque.
Dernière modification par je-mattarde (2012-02-16 15:47:41)
Gilles
Hors ligne
Tu souhaites l'ajouter à la suite ? Ce serait alors plutôt
public static function AuthorCommonName($attr){
$f = $GLOBALS['core']->tpl->getFilters($attr);
$text = "";
if($_ctx->users->getAuthorCN()='gilles'){
$$text= $_ctx->users->getAuthorCN() . " blablabla 1";
}else{
$$text= $_ctx->users->getAuthorCN() . " blablabla 2";
}
return '<?php echo '.sprintf($f,$text).'; ?>';
}
Hors ligne
Le test
if($_ctx->users->getAuthorCN()='gilles'){
ne marchera pas : il faut utiliser == pour comparer les deux valeurs ;)
Hors ligne
Salut annso et amalgame !
Oui à la suite.
Avec le double égal, c'est mieux en effet.
Il doit y avoir une autre futilité car j'ai un message d'erreur.
Pour avoir une idée d'où ca vient, j'ai pour le moment enlevé le test de comparaison.
public static function AuthorCommonName($attr)
{
$f = $GLOBALS['core']->tpl->getFilters($attr);
$text = $_ctx->users->getAuthorCN()."youhou";
return '<?php echo '.sprintf($f,$text).'; ?>';
}
Le code au-dessus donne :
Fatal error: Call to a member function getAuthorCN() on a non-object in F:\Inetpub\vhosts\je-mattarde.com\httpdocs\plugins\authorMode\_public.php on line 158
et pour vous rassurer, celui-ci...
public static function AuthorCommonName($attr)
{
$f = $GLOBALS['core']->tpl->getFilters($attr);
$text = "youhou";
return '<?php echo '.sprintf($f,$text).'; ?>';
}
...donne bien : youhou
J'ai essayé en ajoutant des single quote autour de $_ctx->users->getAuthorCN() lors de la concaténation. Pas mieux.
(Et, je ne sais pas très bien à quoi sert le $f )
Dernière modification par je-mattarde (2012-02-16 17:01:25)
Gilles
Hors ligne
Essaie avec
public static function AuthorCommonName($attr)
{
$f = $GLOBALS['core']->tpl->getFilters($attr);
#$text = $_ctx->users->getAuthorCN()."youhou";
return '<?php echo '.sprintf($f,$_ctx->users->getAuthorCN()."youhou").'; ?>';
}
si ça marche, c'est que $_ctx->users n'est défini que dans le cache, et dans ce cas il faudra insérer ton test dans le code renvoyé par la fonction (dans le bloc <?php echo...)
Hors ligne
J'obtiens la même chose :
Fatal error: Call to a member function getAuthorCN() on a non-object in F:\Inetpub\vhosts\je-mattarde.com\httpdocs\plugins\authorMode\_public.php on line 157
Dans le code initial, il y a des single quote autour de $_ctx->users->getAuthorCN()
Je les ai donc ajoutés comme ceci :
return '<?php echo '.sprintf($f,'$_ctx->users->getAuthorCN()'."youhou").'; ?>';
Et, j'ai obtenu :
Parse error: syntax error, unexpected T_STRING in F:\Inetpub\vhosts\je-mattarde.com\httpdocs\cache\cbtpl\58\89\588964a20392f499e657e9fafd900870.php on line 95
Dernière modification par je-mattarde (2012-02-16 17:42:26)
Gilles
Hors ligne
et comme ça :
return '<?php
$text = $_ctx->users->getAuthorCN()."youhou";
echo '.sprintf($f,'$text).';
?>';
?
Hors ligne
$core->tpl->addValue('AuthorCommonName',array('myClass','AuthorCommonName'));
class myClass
{
public static function AuthorCommonName($attr)
{
$f = $GLOBALS['core']->tpl->getFilters($attr);
return
'<?php $author = '.sprintf($f,'$_ctx->users->getAuthorCN()').'; ?>'.
'<?php echo myClass::getAuthorText($author); ?>';
}
public static function getAuthorText($author)
{
if ($author == 'author-1') {
$author = 'author-1 bla bla bla';
}
elseif ($author == 'author-2') {
$author = 'author-2 bli bli bli';
}
return $author;
}
}
Dernière modification par adjaya (2012-02-16 18:50:04)
Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/
Hors ligne
Salut adjaya !
@amalgame, ta dernière tentative était la bonne. youhou ;-) Merci beaucoup. J'ai maintenant ce que je souhaitais.
Maintenant, je suis tenté par ta solution adjaya , mais tandis que j'ai bien recopier les deux fonctions, le message d'erreur Fatal error: Call to undefined function getAuthorText() apparaît. Je dois peut-être la pré-déclarer quelque part?
Dernière modification par je-mattarde (2012-02-16 18:48:24)
Gilles
Hors ligne
oui, regarde la première ligne que je viens d'ajouter au code, c'est la déclaration du tpl {{tpl:AuthorCommonName}}
C'est un exemple surtout pour le principe, les noms de class et fonctions sont à adapter suivant....
Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/
Hors ligne
Je n'ose pas dire que le même message d'erreur persiste. Pourtant, il me semble avoir correctement déclarer la fonction, ce que je n'avais pas fait la première fois.
$core->tpl->addValue('getAuthorText',array('tplAuthor','getAuthorText'));
J'ai vérifié que les deux fonctions étaient bien entre les accolades de la classe tplAuthor.
J'ai même pensé que l'ordre de leur déclaration avait peut-être une importance.
Queneni, le message persiste.
edit:
Pour être plus précis le message d'erreur complet est :
Fatal error: Call to undefined function getAuthorText() in F:\Inetpub\vhosts\je-mattarde.com\httpdocs\cache\cbtpl\58\89\588964a20392f499e657e9fafd900870.php on line 95
La fonction est indéfinie dans un fichier du cache.. ce qui me rend perplexe (:
Dernière modification par je-mattarde (2012-02-16 21:23:03)
Gilles
Hors ligne
Avec le plugin sysInfo, tu pourrais savoir à quel fichier template correspond le fichier cache, comme expliquer dans ce billet.
Hors ligne
Ouah Dotclear c'est magique. Une jungle. Mais magique.
Sans grande surprise. Le fichier cache fait référence au fichier template author.html
Gilles
Hors ligne
La fonction est indéfinie dans un fichier du cache.. ce qui me rend perplexe (:
Ce qui est dans le cache, c'est du php, que tu envoies avec la partie return '<?php $author... etc. de ta fonction. Or tu n'envoies pas le code de getAuthorText() dans le cache, l'erreur me semble donc normale.
Hors ligne
Ok de la même nature que le problème que tu avais identifié tout à l'heure.
Je reviens donc à ce que tu avais proposé en faisant le test de comparaison dans la partie return, et donc sans passer par une fonction intermédiaire getAuthorText qui ne pourra pas fonctionner dans ce cas précis.
edit :
Le code qui fonctionne :
public static function AuthorCommonName($attr)
{
$f = $GLOBALS['core']->tpl->getFilters($attr);
return '<?php
if($_ctx->users->getAuthorCN()=="Gilles"){
$text = $_ctx->users->getAuthorCN()."<br>Profil1";
}elseif($_ctx->users->getAuthorCN()=="Renaud"){
$text = $_ctx->users->getAuthorCN()."<br>Profil2";
}elseif($_ctx->users->getAuthorCN()=="Clément"){
$text = $_ctx->users->getAuthorCN()."<br>Profil3";
}
echo '.sprintf($f,'$text').';
?>';
}
Et, j'ai supprimé l'attribut encode_html="1" à l'appel de la fonction dans le fichier author.html pour que les insertions de html soient traitées.
{{tpl:AuthorCommonName}}
Merci encore
Dernière modification par je-mattarde (2012-02-16 22:33:15)
Gilles
Hors ligne
Je n'ose pas dire que le même message d'erreur persiste. Pourtant, il me semble avoir correctement déclarer la fonction, ce que je n'avais pas fait la première fois.
$core->tpl->addValue('getAuthorText',array('tplAuthor','getAuthorText'));
Ce n'est pas ce que j'ai écris, la fonction getAuthorText() n'est pas un tpl, mais une methode appelée par la fonction d'un tpl, tu vois la nuance?
Bon, je pensais que ce serait plus simple à écrire avec une fonction intermédiaire, mais je vois que tu a réussi d'une manière plus directe, donc tout va pour le mieux :)
Dernière modification par adjaya (2012-02-16 22:57:39)
Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/
Hors ligne
je-mattarde a écrit :La fonction est indéfinie dans un fichier du cache.. ce qui me rend perplexe (:
Ce qui est dans le cache, c'est du php, que tu envoies avec la partie return '<?php $author... etc. de ta fonction. Or tu n'envoies pas le code de getAuthorText() dans le cache, l'erreur me semble donc normale.
Ce n'est pas nécessaire d'envoyer le code de la fonction dans le cache, il y a plein d'exemple de ce procédé dans dotclear, par exemple dans le plugin blogroll.
class tplBlogroll
{
public static function blogroll($attr)
{
// ....................
return
'<?php '.
"echo tplBlogroll::getList('".$category."','".$block."','".$item."',".$only_cat."); ".
'?>';
}
la methode getList() est appelée dans le cache d'un manière statique en ajoutant le nom de la class devant et ::
tplBlogroll::getList()
Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/
Hors ligne
Vous n'êtes pas identifié(e).