Tous les billets parus dans / Développement

Problème de traduction pour Buddypress

J’expérimente Buddypress depuis quelques jours avec les configurations suivantes :

Le but est donc d’avoir un environnement multilingue (via WPML) pour Buddypress sur une installation unique de WP (et non WPMU). Le problème? C’est que ça ne fonctionne pas. En tout cas, ça ne fonctionne pas bien puisque les URLs ne sont pas réécrites correctement pour faire passer le paramètre de langue.

J’ai trouvé sur le forum officiel de WPML que leur traduction, avec le plugin Buddypress Multilingual servant de pont avec le CMS, ne fonctionne que si Buddypress est installé sur la version WPMU (multi-users) de WordPress, et qu’ils ne prévoient pas de soutenir la compatibilité pour la single install considérant qu’en version 3.0, WordPress intègrera les composantes multi-utilisateurs.

Alors en attendant on fait quoi?

Un peu de javascript…

Voici donc ma recette pour – temporairement, le temps que WP 3.o émerge en mai prochain – forcer l’insertion du paramètre de langue dans toutes les URLs d’un site tournant sous Buddypress.

1) Il faut s’assurer que le plugin WPML est configuré de sorte que le paramètre de langue soit passé en query string, du genre : http://monsite.com/buddypress/article?lang=en et non la formule par défaut.

2) Ensuite on ajoute ce bout de code nécessitant jQuery :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//set image max width
imgMaxWidth = 150;

//define regex pattern to detect images
regexImg = /^http://(.)+.(jpg|jpeg|gif|png)$/gi;
					
//parse links
$('DIV.activity a').each(function(){
	//if a link points to an image
	if($(this).attr('href').match(regexImg)) {
		//add classes
		$(this).addClass('fetchedImgLink');
		
		//edit target
		$(this).attr('target', '_blank');
		
		//show image instead of text
		$(this).html('<img class="fetchedImg" src="' + $(this).attr('href') + '" />');
		
		//check for size
		var currentImg = $(this).find('img');
		var iw = currentImg.width();
		var ih = currentImg.height();
		var ratio = (ih!=0) ? iw/ih : 1;
		
		//resize if needed
		if(iw > imgMaxWidth) {
			currentImg.width(imgMaxWidth);
			currentImg.height(ih - ((iw-imgMaxWidth) / ratio));
		}
	}				
});

Ce que ce code fait, c’est qu’il détecte si on est dans une version linguistique autre que celle par défaut (donc on a un paramètre de langue initialement). Si tel est le cas, le paramètre est ajouté à chaque lien de la page, mais pas à ceux de la boîte de sélection de langue de WPML (DIV#lang_sel).

Et ça dépanne, en attendant.


iPhone : problème de positionnement absolu

Voilà que je me bute à un problème : réussir à attacher à la fenêtre de Safari un menu de navigation rappelant une application iPhone.

Rien de plus facile avec la propriété CSS position:fixed; n’est-ce pas?

Eh bien non justement. Et pourquoi donc?

Parce qu’Apple, dans sa version mobile de Safari uniquement, a décidé de ne pas supporter cette propriété question d’empêcher quiconque (moi en particulier) de faire un site mobile qui ressemblerait trop à une Application.

Autre solution : créer deux zones (#content et #footer) qui se partagent la fenêtre du iPhone (320×240). On positionne le #footer collé au bas, le #content prend le reste de la hauteur et on lui ajoute un overflow:auto; pour permettre la navigation dans le conteneur principal. Rien de plus simple encore une fois, mais est-ce que ça fonctionne?

NON PLUS!

Encore une fois, notre ami Safari Mobile empêche la navigation à l’intérieur d’un DIV avec overflow:auto; autrement qu’en utilisant ses 2 doigts pour faire le défilement. Pratique et intuitif non? D’ailleurs je gage vous ne le saviez même pas…

Mon prochain test sera de passer par un IFRAME, mais vous vous doutez certainement que je n’en ai pas du tout envie de m’aventurer là-dedans…

Comme solution alternative existe cependant ce script très intéressant que j’ai déniché et qui émule les actions de navigation en javascript. Toutefois ce dernier donne une expérience utilisateur plutôt désagréable et très saccadée.

Il y a toutefois un peu de lumière au bout du tunnel avec jQTouch, une librairie HTML5 reprenant toutes les animations et interfaces propre au iPhone dans une version compatible avec le webkit mobile.

Reste à voir si ça marchera correctement.

Mais dans l’intervalle Apple, je suis extrêmement déçu.


BuddyPress n’a plus besoin de WordPress MU

Voilà une excellente nouvelle que cette annonce à l’effet que BuddyPress pourra maintenant rouler comme un plugin de WordPress, et n’aura plus (nécessairement) besoin de WordPress MU.

J’ai toujours été extrêmement septique à l’endroit de MU – dont on annonce déjà la mort lors du passage en version 3.0 de WP – et de savoir qu’on pourra utiliser les fonctionnalités incroyable de BuddyPress sur une installation simple m’emballe.

Amis développeurs, avez-vous eu l’occasion de le tester un peu?


Images vectorielles pour Noël

11treevector_r2_c1J’aime toujours les trouvailles de Smasing Magazine et celle-ci ne fait pas exception à la règle.

Voici donc une série d’images vectorielles pour agrémenter vos designs pour la période des fêtes.

Les chanceux qui auront pour tâche de réaliser la carte de Noël du bureau auront donc l’air un peu plus brillants et/ou un tantinet moins crevés lors de la conception.

Voici en bonus quelques références pertinentes pour :

Et finalement, voici 60 tutoriels pour créer des éléments de design du temps des Fêtes.


WordPress P2 revu et corrigé

Le thème P2 de WordPress – qui émule l’interface d’un hybride Twitter/Facebook imaginaire – vient enfin d’être corrigé de [la plupart de] ses nombreuses faiblesses.

La principale lacune était au niveau de son intégration à un environnement déjà existant. Jadis, un site voulant l’utiliser devait s’en contenter puisque sa surcharge de scripts et la lourdeur de son code le rendait VRAIMENT trop complexe/long/impossible à extraire et à insérer dans un autre thème. Impossible donc de se créer une section “P2″ fonctionnant parallèlement à un blogue traditionnel évoluant sur la même installation de WordPress. C’est maintenant corrigé :

We also decided to go a step further and rework P2 so that it could easily be used as a parent theme and extended with child themes. This will allow theme designers to create awesome new theme designs without having to duplicate all of the existing P2 features.

De plus, de nouvelles options s’offrent à nous au niveau de la personnalisation du thème via l’admin de WordPress, de même que la venue de nouveaux types attribuables au contenu qu’on y envoie : status, billet de blogue, citation ou lien externe. Pas bête!

Je ne penserais pas renvoyer ce blogue sur P2, mais pour se monter une sorte de HUB SOCIAL, ça m’apparait être vraiment une avenue à considérer…

- Merci à Carl pour le tuyau.


40 splendides thèmes pour WordPress

Y a du beau, très beau thème ici…

Merci encore, Smashing Magazine!


Afficher le nombre de Tweets d’un billet de blogue

Voici une petite astuce qui vient bien compléter mon script pour raccourcir une URL avec l’API de http://bit.ly.

Tout ceci part avec l’API de Tweetmeme cette fois, laquelle permet d’obtenir le nombre de fois qu’un billet de votre blogue a été affiché sur Twitter soit en insérant leur nom dans le tweet (@tweetmeme) ou encore en ayant passé par http://bit.ly pour raccourcir l’URL (les deux entités partagent leurs données).

Il suffit tout simplement de récupérer les données XML issues de cette ressource : http://api.tweetmeme.com/url_info?url=##votre-URL##, ce qui renvoie quelque chose ressemblant à ceci :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<result>
	<status>success</status>    
	<story>        
		<title>Google Wave : et si… / Publicité | Gérant d'estrade</title>        
		<url>http://www.estrade.ca/blogue/web/reseaux-sociaux/google-wave-et-si.html</url>
		<media_type>news</media_type>
		<created_at>2009-11-09 20:34:54</created_at>
		<url_count>1</url_count>
		<tm_link>http://tweetmeme.com/story/264195236</tm_link>
		<comment_count>0</comment_count>        
		<excerpt>
			Sur mon blogue : Google Wave : et si… http://bit.ly/10xaQW
		</excerpt>
	</story>
</result>

Pour le récupérer très simplement (avec PHP 5) vous pouvez utiliser cette fonction, à ajouter dans la page functions.php de votre thème :

1
2
3
4
5
function tweetCount($url) {
	$fichier = file_get_contents("http://api.tweetmeme.com/url_info?url=".$url);
	$xml = new SimpleXmlElement($fichier);
 	echo 'Ce billet a <a href="'.$xml->story->tm_link.'" target="_blank">'.$xml->story->url_count.' tweets</a>!';
}

Ensuite dans votre thème – probablement dans la page single.php pour affecter uniquement les billets – ajoutez un simple appel à la fonction en passant votre permalien en paramètre :

1
tweetCount($post->permalink);

Ceci affichera le nombre de tweets contenant l’URL en même temps qu’un lien pour les consulter.