Il y a quelques temps, comme je l'expliquait ici, le seul moyen à ma portée de mettre un genre de "copyright" (ce n'est pas un copyright puisque mon blog est sous licence Creative Commons, c'est juste que le terme Copyright est "parlant") dans les flux était cette bidouille :

Je plaçais ce morceau de code en début de billet :


<div style="text-align:center;"><span class="coprss">Source originale : <a href="http://1loup.net" rel="nofollow"><strong>Un loup blessé</strong></a> par <strong>1loup</strong></span></div>

puis celui là à la fin :


<div style="text-align:center;"><span class="coprss">Source originale/ Original post on : <a href="http://1loup.net" rel="nofollow"><strong>Un loup blessé</strong></a> par/by <strong>1loup</strong><br /><a href="http://creativecommons.org/licenses/by-nc-sa/2.0/fr/deed.en" rel="nofollow"><img src="http://1loup.net/somerights.png" alt="Some rights reserved - Creative commons" /></a></span></div>

et en ajoutant cette règle dans le style.css de mon thème :


.coprss {
display:none;
}

cela avait pour conséquence un affichage de ce genre :

Source originale/ Original post on : Un loup blessé par/by 1loup
Some rights reserved - Creative commons

uniquement dans les flux puisque la règle CSS le rendait invisible dans les billets.

C'était un peu lourdingue, une fois sur deux j'oubliais de rajouter les codes dans mes billets, ce n'était pas très pratique.

Puis, je me suis inspiré de cette conversation pour faire autrement : Directement dans le flux, uniquement dans le flux !

Cette manipulation s'effectue aussi dans le fichier class.xblogspost.php qui se trouve dans layout. Les fonctions à modifier sont également getRSSItem et getAtomEntry (les deux dernières). La partie intéressante est par contre située au niveau du return.

  • Pour getRSSItem :

function getRSSItem($short=false)
{

...(code non touché)...
		
	return
	'<item rdf:about="'.$this->getPermURL().'">'."\n".
	'  <title>'.$this->blog->toXML($this->f('post_titre'))."</title>\n".
	'  <link>'.$this->getPermURL()."</link>\n".
	'  <dc:date>'.$this->getIsoDate()."</dc:date>\n".
	(($this->f('post_lang')) ? '  <dc:language>'.$this->f('post_lang')."</dc:language>\n" : '').
	'  <dc:creator>'.htmlspecialchars($this->getUserCN())."</dc:creator>\n".
	'  <dc:subject>'.htmlspecialchars($this->f('cat_libelle'))."</dc:subject>\n".
	'  <description>'.$this->blog->toXML($desc)."</description>\n".
	'  <content:encoded><![CDATA['.$content."]]></content:encoded>\n".
	'</item>'."\n";
}

C'est cette ligne :


'  <content:encoded><![CDATA['.$content."]]></content:encoded>\n".

que j'ai modifié en :


'  <content:encoded><![CDATA['.$content.$coprss."]]></content:encoded>\n".

(je rajoute la variable coprss)

Ensuite, juste avant le return, je défini cette variable par un :


$coprss = '<p style="text-align:center;"><sup>Source originale/ Original post on : <a href="http://1loup.net"><strong>Un loup bless&eacute;</strong></a> par/by <strong>1loup</strong> dans le billet/on : <a href="'.$this->getPermURL().'">'.$this->blog->toXML($this->f('post_titre')).'</a><br /><a href="http://creativecommons.org/licenses/by-nc-sa/2.0/fr/deed.en" rel="nofollow"><img src="http://1loup.net/somerights.png" alt="Some rights reserved - Creative commons" /></a></sup></p>';

Cela me donne donc :


function getRSSItem($short=false)
{

...ne pas toucher à la première partie de la fonction...
		
$coprss = '<p style="text-align:center;"><sup>Source originale/ Original post on : <a href="http://1loup.net"><strong>Un loup bless&eacute;</strong></a> par/by <strong>1loup</strong> dans le billet/on : <a href="'.$this->getPermURL().'">'.$this->blog->toXML($this->f('post_titre')).'</a><br /><a href="http://creativecommons.org/licenses/by-nc-sa/2.0/fr/deed.en" rel="nofollow"><img src="http://1loup.net/somerights.png" alt="Some rights reserved - Creative commons" /></a></sup></p>';

	return
	'<item rdf:about="'.$this->getPermURL().'">'."\n".
	'  <title>'.$this->blog->toXML($this->f('post_titre'))."</title>\n".
	'  <link>'.$this->getPermURL()."</link>\n".
	'  <dc:date>'.$this->getIsoDate()."</dc:date>\n".
	(($this->f('post_lang')) ? '  <dc:language>'.$this->f('post_lang')."</dc:language>\n" : '').
	'  <dc:creator>'.htmlspecialchars($this->getUserCN())."</dc:creator>\n".
	'  <dc:subject>'.htmlspecialchars($this->f('cat_libelle'))."</dc:subject>\n".
	'  <description>'.$this->blog->toXML($desc)."</description>\n".
	'  <content:encoded><![CDATA['.$content.$coprss."]]></content:encoded>\n".
	'</item>'."\n";
}

  • Pour getAtomEntry :

function getAtomEntry($short=false)
{

...(code non touché)...
		
	return
	'<entry' .
	(($this->f('post_lang')) ? ' xml:lang="'.$this->f('post_lang').'"' : '').
	'>'."\n".
	'  <title>'.$this->blog->toXML($this->f('post_titre'))."</title>\n".
	'  <link rel="alternate" type="text/html" href="'.$this->getPermURL().'" />'."\n".
	'  <updated>'.$this->getIsoDate()."</updated>\n".
	'  <id>'.$id."</id>\n".
	'  <author><name>'.htmlspecialchars($this->getUserCN())."</name></author>\n".
	'  <category term="'.$this->f('cat_libelle_url').'" label="'.$this->blog->toXML($this->f('cat_libelle')).'"'."/>\n".
	'  <summary>'.$this->blog->toXML($desc)."</summary>\n".
	'  <content type="html">'.htmlspecialchars($content)."</content>\n".
	'</entry>'."\n";
}

idem, je remplace la ligne :


'  <content type="html">'.htmlspecialchars($content)."</content>\n".

par :


'  <content type="html">'.htmlspecialchars($content).htmlspecialchars($copatom)."</content>\n".

(je rajoute la variable copatom) puis juste avant le return de la fonction, j'inscris la définition :


$copatom = '<p style="text-align:center;"><sup>Source originale/ Original post on : <a href="http://1loup.net"><strong>Un loup bless&eacute;</strong></a> par/by <strong>1loup</strong> dans le billet/on : <a href="'.$this->getPermURL().'">'.$this->blog->toXML($this->f('post_titre')).'</a><br /><a href="http://creativecommons.org/licenses/by-nc-sa/2.0/fr/deed.en" rel="nofollow"><img src="http://1loup.net/somerights.png" alt="Some rights reserved - Creative commons" /></a></sup></p>';

Cela me donne donc :


function getAtomEntry($short=false)
{

...ne pas toucher à la première partie de la fonction...
		
$copatom = '<p style="text-align:center;"><sup>Source originale/ Original post on : <a href="http://1loup.net"><strong>Un loup bless&eacute;</strong></a> par/by <strong>1loup</strong> dans le billet/on : <a href="'.$this->getPermURL().'">'.$this->blog->toXML($this->f('post_titre')).'</a><br /><a href="http://creativecommons.org/licenses/by-nc-sa/2.0/fr/deed.en" rel="nofollow"><img src="http://1loup.net/somerights.png" alt="Some rights reserved - Creative commons" /></a></sup></p>';
		
	return
	'<entry' .
	(($this->f('post_lang')) ? ' xml:lang="'.$this->f('post_lang').'"' : '').
	'>'."\n".
	'  <title>'.$this->blog->toXML($this->f('post_titre'))."</title>\n".
	'  <link rel="alternate" type="text/html" href="'.$this->getPermURL().'" />'."\n".
	'  <updated>'.$this->getIsoDate()."</updated>\n".
	'  <id>'.$id."</id>\n".
	'  <author><name>'.htmlspecialchars($this->getUserCN())."</name></author>\n".
	'  <category term="'.$this->f('cat_libelle_url').'" label="'.$this->blog->toXML($this->f('cat_libelle')).'"'."/>\n".
	'  <summary>'.$this->blog->toXML($desc)."</summary>\n".
	'  <content type="html">'.htmlspecialchars($content).htmlspecialchars($copatom)."</content>\n".
	'</entry>'."\n";
}

Et voilà ! Dans les flux RSS et Atom, le texte que je voulais qui apparaisse est présent dans les billets sans avoir besoin de rajouter quoi que ce soit, c'est "automatique" :evil: