Dotclear

Vous n'êtes pas identifié(e).

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2012-02-15 12:05:02

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

La page author

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

#2 2012-02-15 13:08:49

Jean-Michel
Modérateur à ailes d'ange
Lieu : Paris
Inscription : 2006-08-22
Site Web

Re : La page author

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

#3 2012-02-15 13:14:39

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : La page author

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.

Hors ligne

#4 2012-02-15 13:29:56

Jean-Michel
Modérateur à ailes d'ange
Lieu : Paris
Inscription : 2006-08-22
Site Web

Re : La page author

Normalement les fichiers de ce plugin devraient être visible depuis l'éditeur du thème.

Hors ligne

#5 2012-02-15 13:50:41

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

Re : La page author

Mirovinbin a écrit :

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.

J-M a écrit :

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

#6 2012-02-16 10:47:48

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

Re : La page author

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

#7 2012-02-16 10:48:49

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

Re : La page author

[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

#8 2012-02-16 11:44:19

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : La page author

je-mattarde a écrit :

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.

Hors ligne

#9 2012-02-16 15:46:43

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

Re : La page author

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

#10 2012-02-16 15:58:38

annso
Responsable de la machine à Twix
Lieu : Lyon
Inscription : 2006-03-05
Site Web

Re : La page author

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

#11 2012-02-16 16:02:54

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : La page author

Le test

if($_ctx->users->getAuthorCN()='gilles'){ 

ne marchera pas : il faut utiliser == pour comparer les deux valeurs ;)

Hors ligne

#12 2012-02-16 17:00:13

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

Re : La page author

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

#13 2012-02-16 17:19:51

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : La page author

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

#14 2012-02-16 17:39:42

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

Re : La page author

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

#15 2012-02-16 17:51:29

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : La page author

et comme ça :

return '<?php 
$text = $_ctx->users->getAuthorCN()."youhou"; 
echo '.sprintf($f,'$text).';
 ?>';

?

Hors ligne

#16 2012-02-16 18:20:30

adjaya
Membre
Lieu : Provence - Luberon
Inscription : 2006-09-05
Site Web

Re : La page author

$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

#17 2012-02-16 18:45:57

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

Re : La page author

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

#18 2012-02-16 18:54:30

adjaya
Membre
Lieu : Provence - Luberon
Inscription : 2006-09-05
Site Web

Re : La page author

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

#19 2012-02-16 21:13:58

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

Re : La page author

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

#20 2012-02-16 21:25:19

Jean-Michel
Modérateur à ailes d'ange
Lieu : Paris
Inscription : 2006-08-22
Site Web

Re : La page author

Avec le plugin sysInfo, tu pourrais savoir à quel fichier template correspond le fichier cache, comme expliquer dans ce billet.

Hors ligne

#21 2012-02-16 21:49:02

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

Re : La page author

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

#22 2012-02-16 22:02:18

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : La page author

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.

Hors ligne

#23 2012-02-16 22:19:08

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

Re : La page author

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

#24 2012-02-16 22:51:56

adjaya
Membre
Lieu : Provence - Luberon
Inscription : 2006-09-05
Site Web

Re : La page author

je-mattarde a écrit :

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

#25 2012-02-16 23:11:48

adjaya
Membre
Lieu : Provence - Luberon
Inscription : 2006-09-05
Site Web

Re : La page author

amalgame a écrit :
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).

Pied de page des forums

Sites map