Un loup blessé

Aller au contenu | Aller au menu | Aller à la recherche

vendredi 12 février 2010

Les commentaires par mail, c'est fini

Entre les désincriptions que je dois faire manuellement via PhpMyAdmin parce que le plugin est déficient et les personnes qui utilisent des mails jetables (et que je reçois moi ensuite des "Mail delivery failed: returning message to sender"), ben cela me saoule GRAVE.

J'ai donc désactivé le plugin et nettoyé toutes les tables des personnes qui étaient abonnées.

Apu, terminé, finished !

Apprenez à vous servir des flux RSS des commentaires : Il y a des flux pour l'intégralité des commentaires et individuellement, chaque billet possède son propre flux de commentaires (sous le titre et avant le formulaire).

samedi 7 novembre 2009

Twitter

Je viens d'ouvrir mon Twitter !

Si par exemple vous avez un iPhone ou un iPod Touch mais que vous n'avez pas le temps de vous tenir au courant, "mes" bons plans y seront publiés.

Je viens de commencer avec la sortie de Pmessenger en version Lite, qui je l'espère sera un sérieux concurrent de Ping! / Ping! Lite et de WhatsApp Messenger.

Pourquoi ? Parce que les auteurs de Pmessenger ne comptent pas se limiter à l'iPhone mais faire des versions BlackBerry, Android, Symbian et Windows Mobile...

( Mon PMiD est : CE6F0A34 )

vendredi 6 mars 2009

Comment mobloguer sur DotClear via flickr

Les essais d'hier sont concluants. J'arrive à "moblogguer" en passant par flickr. Mais... c'est comment qu'on fait ?

J'ai plus ou moins suivi un tutoriel bien fait, je vous explique ce que j'ai fait :

  • J'ai rajouté une catégorie : Moblogging (Pour la différencier du reste)
  • J'ai créé un nouveau rédacteur dans DotClear :

- Identifiant : mob1loup
- Nom : 1loup mobile
- Niveau : Rédacteur avancé
- Format : HTML
- Statut de publication par défaut : En ligne
- Catégorie préférée : Moblogging
- Mot de passe : différent de mon compte principal

Comme cela, s'il y a une faille chez flickr, personne n'obtient le mot de passe d'administrateur du blog.

  • Ayant un compte Yahoo, je me suis logué sur flickr, j'ai suivi le tutoriel, j'ai rajouté mon blog, obtenu le mail permettant de publier et fait quelques paramétrages.

(L'important est de retenir que le type est MetaWeblogAPI et que pour DotClear 1, on a accès via http://url-du-blog/ecrire/xmlrpc.php tandis que pour DotClear 2, il faut d'abord activer l'interface XML/RPC dans les paramètres du blog pour obtenir l'url.)

Attention : Il y a 2 mails pour les envois. L'un juste pour uploader ses photos sur flickr et l'autre pour publier sur son blog !

  • J'ai testé l'envoi via mon téléphone mobile d'une photo avec un court texte. Erreur. Marche pas.
  • J'ai alors testé l'envoi via MMS. Cela fonctionne mais le texte du mail est remplacé par "Vous avez reçu un MMS provenant d'un abonné Orange" comme vous pouvez le voir sur ce billet. La présentation est du coup aussi à revoir dans flickr sinon mon blog n'est plus valide XHTML.
  • J'ai fouiné dans le paramétrage de mon téléphone, je croyais que les mails avaient été paramétré correctement et non, le mail d'envoi d'expédition était resté à "mail@orange.fr" alors qu'il fallait le mettre à "mon-numéro-de-tel@orange.fr".
  • Test d'envoi d'un mail contenant en objet le titre du billet, comme destinataire le mail fourni par flickr, l'image jointe et le corps du mail contenant le billet à publier. Cela fonctionne, j'ai peaufiné le paramétrage et adopté celui là :

<div style="text-align:center; margin-bottom: 1em;">
<a href="{photo_url}" title="Photo Moblogging via flickr"><img src="{photo_src_m}" alt="Photo flickr - Moblogging - {photo_title}" style="border: solid 2px #C3A758;" /></a>
<br />
<span style="font-size: 0.8em; font-style : italic; margin-top: 0px;">
<a href="{photo_url}">{photo_title}</a> (par mail)
</span>
</div>
<div class="moblog">
{description}
<br style="clear:both;" />
</div>

J'obtiens ainsi un billet valide avec un résultat visible sur ce billet.

C'est pas mal, non ?

jeudi 5 mars 2009

Un loup blessé - Versions mobiles

Je ne pouvais décemment pas adapter le thème de Fiuuu à l'iPhone et laisser mon blog en l'état. Alors j'ai essayé de vous faire un truc sympa...

Mon thème en version mobile, sur le même principe, est disponible sur http://mob.1loup.net et http://1loup.net/iphone, pour obtenir quelque chose de ce genre là (images cliquables) :

Version Smartphone/iPhone de mon blog

Je vous propose également une version "moche" obtenu par ipheeds : http://wap.1loup.net

Version de mon blog fournie par ipheeds

(pour obtenir ce même genre d'un autre site, il suffit de taper http://ipheeds.org/?ipheed=url-du-flux-RSS-du-site)

et également la version "moche" obtenu par Google : http://1loup.net/wap

Version de mon blog fournie par Google

(pour obtenir ce même genre d'un autre site, il suffit de taper http://www.google.com/gwt/n?u=URL-du-site)

A vous de choisir ce qui vous convient le mieux avec le matériel que vous possédez !

Par exemple, avec mon Nokia N70 qui est tout petit et pas du tout adapté à ce genre là, la version iPhone et celle fournie par ipheeds plantent le navigateur tandis que la version fournie par Google est lisible.

Je compte sur vous pour me donner votre avis sur la version iPhone, la seule que je peux modifier, qui est actuellement en redirection automatique en cas de détection de smartphone. Je ne l'ai testé qu'avec un simulateur d'iPhone donc je ne sais pas trop ce que cela donne en vrai.

dimanche 1 mars 2009

Feedburner en erreur (ou pas)

J'ai normalement, grosso-modo, 150/160 lecteurs sur les billets et une vingtaine sur les commentaires avec une baisse de 20% le week-end.

D'où ma surprise, aujourd'hui, un dimanche :

Snapshot Statistiques Feedburner du 01/03/09

Que se passe-t-il ?

146 + 29 = 175 sur les billets

37 + 32 = 69 sur les commentaires

Il n'y aurait pas comme un couac quelque part ?

Non, parce qu'une telle augmentation, c'est très flatteur mais je n'ai jamais vu cela, j'augmente tout au plus d'une dizaine lorsque je fais un billet super intéressant, pas d'autant !

Ou alors les stats n'avaient pas été vraiment mise à jour à cause de la migration des serveurs Feedburner vers Google ?

Quelqu'un d'autre aurait-il noté une augmentation subite et non expliquée de ses stats Feedburner ?

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:

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:

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 ?

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...

- page 2 de 22 -