"Copyright" (ou autres licences) dans les flux (RSS et Atom) sous DotClear 1
Par 1loup, dimanche 22 février 2009 à 17:27 :: Blog (technique) :: #1299 :: rss
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 :
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é</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é</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é</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é</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" 


![[T]](http://static.technorati.com/pix/icn-talkbubble.gif)












![Validate my RSS feed [Valid RSS]](/valid-rss.png)
![Validate my Atom 1.0 feed [Valid Atom 1.0]](/valid-atom.png)



Commentaires
1. Le mardi 24 février 2009 à 20:04, par Jeremy
2. Le mardi 24 février 2009 à 23:12, par 1loup
3. Le mercredi 25 février 2009 à 21:28, par MarcelD
4. Le mercredi 25 février 2009 à 21:44, par MarcelD
5. Le jeudi 26 février 2009 à 22:35, par 1loup
6. Le jeudi 26 février 2009 à 22:55, par MarcelD
7. Le jeudi 26 février 2009 à 23:05, par 1loup
8. Le jeudi 26 février 2009 à 23:17, par MarcelD
9. Le dimanche 8 mars 2009 à 11:24, par fiuuu
10. Le dimanche 8 mars 2009 à 18:49, par 1loup
Les commentaires de ce billet peuvent être suivis sur ce fil RSS
Ajouter un commentaire