Un loup blessé

Le blog, sous DotClear, d'un Geek Gay DVDvore. Naïf paranoïaque, utopiste désabusé.

Contenu | Menu | Sidebarre | Extra | Recherche | Bas de page

dimanche 22 février 2009

"Copyright" (ou autres licences) dans les flux (RSS et Atom) sous DotClear 1

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:

Tag(s) :  - ,  - 

Commentaires et trackbacks

1. Le mardi 24 février 2009 à 20:04, par Jeremy

:hysterique: J'aime ses posts ou je comprends rien du tout :pompom:

2. Le mardi 24 février 2009 à 23:12, par 1loup

>Jeremy: Ouais... ben tu es visiblement le seul. Tu déposes le premier commentaire sur un billet d'il y a 48 heures. Il n'a pas stimulé des masses, hein... D'habitude, il y a MarcelD qui aime aussi beaucoup ce genre mais là, il doit être occupé, je me passerais de sa blague.

On va dire qu'il servira à ceux qui en auront besoin le moment venu :rolleyes:

3. Le mercredi 25 février 2009 à 21:28, par MarcelD

Hé ho!! J'arrive, j'ai plein de trucs sur le feu, j'ai pas le temps de triturer des codes moi :hysterique: (je suis attaqué dans guerre des gangs sur facebook)
Bon j'ai pas tout compris non plus hein! Mais je croyais lire la mention qui te sert de copyright dans GoogleReader. Que dalle cher monsieur le Loup! :pasbien:

4. Le mercredi 25 février 2009 à 21:44, par MarcelD

Je suis aveugle de naissance, ça fonctionne bien. Je suis tout confusionné :redface:
Bon en même temps je dois avouer que j'adore tout ce que tu écris, même les codes je les lit! Pour dire hein! Mais surtout, surtout, ce que j'aime ici, c'est la calculette scientifique :pompom: :pompom: :pompom: :pompom: :pompom: :pompom:

5. Le jeudi 26 février 2009 à 22:35, par 1loup

>MarcelD: Personne ne t'a forcé à t'inscrire à Facebook, si ton perd ton temps, c'est de ta faute. Est-ce que je suis sur Facebook, moi ?

Tu veux que je t'offre le code de la calculette ?

6. Le jeudi 26 février 2009 à 22:55, par MarcelD

Non c'est vrai personne ne m'a forcé à aller rejoindre facebook, mais un point positif tout de même (si, si, ça parait incroyable mais c'est vrai) j'ai repris contact avec des amis perdus de vue depuis longtemps dont un depuis dix sept ans :pompom:
Merci beaucoup pour le code la calculette scientifique mais je n'ai pas besoin d'anti-spam, trop peu d'activité sur mon blog ma brave dame. :bisou:

7. Le jeudi 26 février 2009 à 23:05, par 1loup

>MarcelD: Non mais ce n'était pas pour que tu installes un captcha. Tu me dis que tu aimes lire mes codes et que tu aimes ma calculette, alors je te l'offrais de bon coeur. Tu peux bien installer juste une calculette histoire d'avoir une calculette hein... :hysterique:

8. Le jeudi 26 février 2009 à 23:17, par MarcelD

Okay! balance le code de la calculette je vais frimer à mort avec ça. Je l'installerai demain ou samedi. Ce soir, je cuve :banane:

9. Le dimanche 8 mars 2009 à 11:24, par fiuuu

ca sert à quoi ce truc creative common chépakoi ?

10. Le dimanche 8 mars 2009 à 18:49, par 1loup

C'est une licence. Moins restrictive que le "copyright". Jette un oeil ici :
fr.creativecommons.org/co...

Mon blog est sous Creative Commons. J'ai choisi la licence (une des 6) qui permet de recopier/distribuer/modifier ce que je fais à condition de citer mon nom, de ne pas en faire le commerce et d'utiliser une licence identique.

Exemple: Tu trouves un de mes tutoriels génial, tu peux le reproduire (et le modifier mais en donnant mon nom) mais si tu veux le publier dans un bouquin, là, il faut me contacter.


Rajouter un commentaire

Chapô (extrait) et flux (RSS/Atom) sous DotClear 1

Attention : Étant resté sous DotClear 1.2.6, il y a quelques petites différences avec DotClear 1.2.7 et suivants (1.2.7.1 et 1.2.8) mais si vous comprenez le principe sous 1.2.6, c'est très facilement transposable ! - Je fais des approximations dans mes explications, le principal c'est de comprendre ce qui se passe.

Le comportement de DotClear 1.2 ne me satisfaisait pas au niveau de la publication de l'extrait (Chapô) et des flux (RSS et Atom). J'ai donc changé cela, je vous explique...

Le comportement par défaut de DotClear, c'est quoi ?

  • En page d'accueil, si le billet contient un extrait (chapô), on n'affiche que l'extrait
  • A l'intérieur du billet, on affiche l'extrait + le corps du billet

Pour les flux, c'est plus compliqué suivant que les flux sont tronqués ou pas :

  • Flux tronqués, présence d'un chapô : Publication du chapô
  • Flux tronqués, pas de chapô : Publication des 300 premiers caractères du billet
  • Flux non tronqués (Chapô ou pas) : Publication du chapô + intégralité du billet

C'est cette dernière possibilité qui ne me convenait pas. Lorsque le billet n'a pas de chapô, il me parait normal de publier l'intégralité du billet mais pas en présence d'un chapô ! Je voulais donc qu'en présence de chapô, lorsque les flux ne sont pas tronqués, il n'y a publication que du chapô dans les flux. Voyons comment faire cela :

Les modifications sont à effectuer dans le fichier class.xblogspost.php qui se trouve dans layout. Les deux fonctions qui nous intéressent sont getRSSItem et getAtomEntry (les deux dernières). Je vais expliquer sur getRSSItem puisque c'est la même chose pour getAtomEntry.

Un coup d'oeil d'abord sur la fonction d'origine (rappel : de DotClear 1.2.6, hein...) :


function getRSSItem($short=false)
{
	if ($this->f('post_chapo') != '') {
		$desc = strip_tags($this->f('post_chapo'));
	} else {
		$desc = util::cutString(strip_tags($this->f('post_content')),300).'...';
	}
		
	if ($short) {
		$content = $desc;
	} else {
		$content = $this->f('post_chapo').' '.$this->f('post_content');
	}
		
	return...

Je ne recopie pas toute la fonction, c'est la partie avant le "return" qui nous intéresse.


if ($this->f('post_chapo') != '') {
	$desc = strip_tags($this->f('post_chapo'));

=> Si le chapô n'est pas vide, on place dans la variable desc le contenu de ce chapô


} else {
	$desc = util::cutString(strip_tags($this->f('post_content')),300).'...';
}

=> Sinon (pas de chapô donc), on place dans desc les 300 premiers caractères du billet.


if ($short) {
	$content = $desc;

=> Si le flux est tronqué, on place dans la variable content ce qui est dans desc


} else {
	$content = $this->f('post_chapo').' '.$this->f('post_content');
}

=> Sinon (flux non tronqué donc), on place dans la variable content le chapô + le billet.

C'est donc cette dernière partie que je vais adapter. Je vais remplacer ce qu'il y a à l'intérieur du "else" par ceci :


if ($this->f('post_chapo') != '') {
	$content = $this->f('post_chapo').'<p><strong>Pour lire le reste du billet, venez sur le blog</strong></p>';
} else {
	$content = $this->f('post_chapo').' '.$this->f('post_content');
}

=> Si le chapô n'est pas vide, publication du chapô et d'une phrase invitant à venir lire le reste sur le blog. Sinon publication du chapô + billet.

La fonction devient donc :


function getRSSItem($short=false)
{
	if ($this->f('post_chapo') != '') {
		$desc = strip_tags($this->f('post_chapo'));
	} else {
		$desc = util::cutString(strip_tags($this->f('post_content')),300).'...';
	}
		
	if ($short) {
		$content = $desc;
	} else {
	
		if ($this->f('post_chapo') != '') {
			$content = $this->f('post_chapo').'<p><strong>Pour lire le reste du billet, venez sur le blog</strong></p>';
		} else {
			$content = $this->f('post_chapo').' '.$this->f('post_content');
		}
			
	}
		
	return...

Voilà, c'est tout. Un petit test conditionnel supplémentaire et les flux non tronqués ne contiennent plus l'intégralité du billet lorsqu'il y a un chapô.

(J'avais absolument besoin de ce comportement lors de la publication de mon billet des tests des sextoys. Je ne voulais en aucun cas que le billet passe dans le flux afin que des enfants ne puissent le lire par erreur. En venant sur le blog, le tag ICRA fait son office.)

Pour la fonction getAtomEntry, on remplace exactement la même portion de code au même endroit.

Pour DotClear 1.2.7 et suivants, il y a une portion différente :


$content = $this->f('post_chapo').' '.$this->f('post_content');

est remplacé par :


$content = util::relToAbsURL($this->f('post_chapo').' '.$this->f('post_content'));

dans la fonction d'origine. Ce n'est pas la mer à boire à adapter, si ? :evil:

Tag(s) :  - ,  - 

Commentaires et trackbacks

1. Le lundi 23 février 2009 à 15:03, par P'tit Loup

Wordpress, mon loup. Wordpress :)
xoxoxox

2. Le lundi 23 février 2009 à 15:08, par 1loup

>P'tit Loup: Jamais de la vie. J'ai des WordPress de tests pour aider des copains qui galèrent et tester mes plugins mais WordPress ne me convient absolument pas !

3. Le dimanche 31 mai 2009 à 01:57, par Metal kids

Avec wordpress, ya pas ce problème.

4. Le dimanche 31 mai 2009 à 05:21, par 1loup

>Metal kids:

1 - Ce n'est pas un problème
2 - J'ai écrit juste au-dessus ce que je pensais de Wordpress mais je peux rajouter que je n'aime pas cette usine à gaz et que j'estime même que c'est une grosse bouze :evil:


Rajouter un commentaire

samedi 21 février 2009

Flux total

J'avoue qu'il y a un truc que je n'ai toujours pas compris : Pourquoi dans les flux (RSS ou Atom), les billets et les commentaires sont-ils séparés ?

Vous ne trouveriez pas cela plus pratique d'avoir un seul flux qui contient à la fois les billets et les commentaires ?

Alors j'ai essayé de vous bidouiller un flux total. Il contient, à l'abonnement, les 3 derniers billets et les 9 derniers commentaires.

Ce n'est pas mieux de n'avoir qu'un seul flux (quand on est intéressé par les discussions) ? Qu'en pensez-vous ?

Commentaires et trackbacks

1. Le dimanche 22 février 2009 à 08:40, par Milo

oh que si !

2. Le dimanche 22 février 2009 à 10:00, par fiuuu


A tester

Tout comme je teste ton theme eeephone :)
BiZzzz

3. Le dimanche 22 février 2009 à 12:35, par 1loup

>Milo: Ah... donc je ne suis pas complètement fou 8-) Mais pourquoi personne ne le fait alors ? Depuis le temps, je n'ai encore jamais vu nulle part cette fonctionnalité, ni sur DotClear, ni sur WordPress. Allez, hop, je lance la mode :ange:
>Fiuuu: Oui, il faut tester et me dire si c'est bien ou ce qui ne va pas, hein...

4. Le lundi 23 février 2009 à 14:54, par P'tit Loup

Salut,
Disons que certains ne suivent pas les commentaires et préfèrent en rester aux billets. Il serait dommage pour eux de "noyer" les billets au milieu d'un flot de commentaires. Le mieux serait sans doute de proposer 3 flux: billet, comms, billet+comms; ainsi chacun y trouve son compte :)

5. Le lundi 23 février 2009 à 15:06, par 1loup

>P'tit Loup: Je fais donc tout bien comme il faut alors puisque je propose :

- flux billets par RSS
- flux commentaires par RSS

- flux billets par Atom
- flux commentaires par Atom

- flux billets + commentaires


Rajouter un commentaire

mardi 3 février 2009

Attention : PlayVidZik ne fonctionne pas correctement avec Dailymotion

Il semblerait que j'ai fait une bourde ! Manuellement, vous pouvez supprimer le signe underscore '_' qui apparait en trop dans les codes après insertion ou alors en attendant que je modifie les plugins, vous pouvez faire une petite modification dans le code :

Vous allez modifier le fichier quicktags.js qui se trouve dans le dossier wp-includes

Vous allez modifier le fichier toolbar.js qui se trouve dans le dossier /ecrire/js/

Dans les deux cas, sous DotClear et Wordpress, cherchez cette ligne :


case "2": var inter = permalien.split("/video/"); var stock = inter[1]; var vpID = stock.substr(0,6); break;

et remplacez là par :


case "2": var inter = permalien.split("/video/"); var stock = inter[1]; var vpID = stock.substr(0,5); break;

Avec cette modification, cela devrait fonctionner à nouveau.

Je mettrais les plugins à jour lorsque j'aurais un peu de temps...

Tag(s) :  - ,  - ,  - ,  - 

QUoi ?

Bah, un blog... c'est un avis personnel qui n'engage QUE moi (et encore!), purement subjectif etc...

Mon sapin de Noël

Logo Blogging accompagné
Recommandé par des Influenceurs.

Full RSS Blog
Recommandé par des Influenceurs.

Logo Free Hugs - Câlins gratuits

Logo Blog sans Pub

Logo Mon blog se nourrit de vos commentaires

Abonnez-vous gratuitement à mon fil RSS

Quelques infos sur mon Twitter

Derniers blablas

Images aléatoires

Le choupinou Jake Gyllenhall
cheesum006.jpg
Photos Persos
DSCN0180.JPG
Des choupinous sexy
I54-20.jpg
Fractales
PlaneZ-Gnarl.jpg

Syndication / Autres

Début | Contenu | Menu | Sidebarre | Extra | Recherche
Trombinoscopes