Voici comment – après quelques heures de bidouillage – j’ai pu arriver à intégrer correctement le bouton Facebook Like dans le flux d’activités de BuddyPress.

Ce qu’il faut savoir c’est que le loop de BP nous renvoie un tableau assez volumineux contenant toutes les entrées du flux d’activités sans égard à son type (à moins que l’utilisateur ait fait sélectionné une méthode de tri).

Ainsi, chaque type (mise à jour, inscription à un groupe, publication sur un forum, etc.) a sa propre façon de gérer ses URLs et cette dernière n’est malheureusement pas passée en argument dans le Loop : il faut donc la construire.

Le bout de code qui suit ajoutera automatiquement le iFrame de vote pour Facebook à la droite des boutons de réponse en se suppléant au marqueur do_action(‘bp_activity_entry_meta’); présent dans le thème par défaut à l’endroit souhaité.

Vous remarquerez que personnellement, j’ai choisi d’exclure du processus (en ne leur attribuant pas d’URL) les types tels que : joined_group, new_member, friendship_accepted, et friendship_created pour une raison évidente : on s’en fou de signaler notre intérêt (like) pour ces éléments!!

Voici donc quoi ajouter dans le fichier functions.php de votre thème BuddyPress :

<?php
/*
 * FACEBOOK LIKE
 *   ajouter le bouton Facebook Like dans le flux des activités
 *   utilise le listener 'bp_activity_entry_meta' du thème par défaut de BP
*/

add_action( 'bp_activity_entry_meta' , 'facebookLikeActivity');
function facebookLikeActivity()
{
	global $bp,$activities_template;
	// si objet inexistant
	if(!is_object($activities_template)) return;
	// current ID
	$id = $activities_template->current_activity;
	// trouver le bon lien
	switch($activities_template->activities[$id]->type) {
		case 'activity_update' :
			$link = $activities_template->activities[$id]->primary_link;
			$link .= 'activity/' . $activities_template->activities[$id]->id.'/';
			break;		
		case 'new_forum_topic' :
		case 'new_blog_comment' :
		case 'new_blog_post' :
		case 'new_forum_post' :
			$link = $activities_template->activities[$id]->primary_link;
			break;
		case 'created_group' :
			preg_match_all('/href="([^"]*)"/i', $activities_template->activities[$id]->action, $matches);
			$link = $matches[1][1];
			break;
		case 'joined_group' :
		case 'new_member' :
		case 'friendship_accepted' :
		case 'friendship_created ':
		default :
			$link = NULL;
			break;
	}
	//ajouter le bouton
	if($link) : ?>
        <iframe src="http://www.facebook.com/plugins/like.php?href=<?php echo urlencode($link); ?>&amp;layout=button_count&amp;show_faces=false&amp;width=90&amp;action=like&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="position:relative;top:7px;border:none; overflow:hidden; width:90px; height:21px;" allowTransparency="true"></iframe>
    <?php endif;
}
?>

Voici un petit bout de code jQuery bien utile pour convertir tout lien pointant vers une image à une miniature de celle-ci pointant vers l’originale. Très utile pour un blogue ou un forum!

//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));
		}
	}
});

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 :

//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('');
		//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.

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?

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.

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

Merci encore, Smashing Magazine!

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 :

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

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 :

tweetCount($post->permalink);

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

Un petit truc bien utile découvert aujourd’hui pour modifier les informations utilisées dans vos fils RSS de WordPress.

En fait, je n’ai jamais compris pourquoi on ne pouvait pas modifier le format des fils RSS avec une page d’un thème et que tout était bien ancré dans le coeur de WP ( dans /wp-includes/feed-rss2.php)… mais bon, j’ai constaté que c’était presque aussi simple de le faire avec un hook dans le fichier functions.php de votre thème préféré.

Pour ce faire, il suffit d’ajouter les fonctions de modification suivantes pour chacun des éléments à modifier :

function nouveau_titre_RSS() {
	$txt = get_the_title();
	return $txt . ' / estrade.ca';
}
function nouveau_texte_RSS() {
	$txt = get_the_excerpt();
	return $txt . '<br /><br />Plus de nouvelles sur <a href="http://estrade.ca/">estrade.ca</a>';
}

Ensuite, vous appelez ces filtres et les appliquez aux routines d’affichage du fil RSS :

add_filter('the_excerpt_rss', 'nouveau_texte_RSS');
add_filter('the_title_rss', 'nouveau_titre_RSS');

Dans cet exemple, on ne fait qu’ajouter un peu de texte aux éléments TITLE et DESCRIPTION d’un fil RSS… mais vous voyez un peu tout ce qui peut être possible de faire avec ça!

Voici un truc tout simple pour créer autant de barres latérales (sidebars) que vous le souhaitez, afin de les équiper de widgets et les afficher dans diverses sections.

Ça devient très utile quand, par exemple, on veut créer une sidebar différente pour une page d’accueil (index.php), une page d’accueil de catégorie (archive.php) et un article seul (single.php).

Tout d’abord, il faut initialiser les barres latérales. Dans le fichier functions.php ajoutez :

if ( function_exists('register_sidebar') ) {
	register_sidebar(array(
		'name' => 'Droite - Accueil',
		'before_widget' => '<div id="%1$s" class="widgetContainer %2$s">',
		'after_widget' => '</div>',
		'before_title' => '<h3 class="widgetTitle">',
		'after_title' => '</h3>'
	));
	register_sidebar(array(
		'name' => 'Droite - Billet',
		'before_widget' => '<div id="%1$s" class="widgetContainer %2$s">',
		'after_widget' => '</div>',
		'before_title' => '<h3 class="widgetTitle">',
		'after_title' => '</h3>'
	));
	register_sidebar(array(
		'name' => 'Droite - Categorie',
		'before_widget' => '<div id="%1$s" class="widgetContainer %2$s">',
		'after_widget' => '</div>',
		'before_title' => '<h3 class="widgetTitle">',
		'after_title' => '</h3>'
	));
}

Vous verrez donc à ce moment les trois barres latérales apparaître dans le panneau d’administration, sous Apparence / Widgets.

Par la suite, il suffit d’inclure la bonne barre latérale dans le bon contexte. Pour ce faire, créez – si ce n’est pas déjà fait – un fichier sidebar.php contenant ceci :

if(is_home()) {
	//accueil
	if (function_exists('dynamic_sidebar')) dynamic_sidebar('Droite - Accueil');			
} elseif( is_category('nom-categorie') ) {
	//catégorie spécifique
	if (function_exists('dynamic_sidebar')) dynamic_sidebar('Droite - Categorie');
} elseif( is_single() ) {
	//dans un billet
	if (function_exists('dynamic_sidebar')) dynamic_sidebar('Droite - Billet');
}

Je profite de cette tribune pour vous poser une question :

Avez-vous déjà trouvé (ou mieux, réalisé) des études de cas ou études comparatives traitant de mise en cache pour un blogue roulant sous WordPress?

Je viens d’installer WP Super Cache sur quelques sites à fort trafic, la réponse côté serveur semble très bonne, mais je ne sais pas si cette solution est la plus optimale possible. Il y a tant d’alternatives (à commencer par DB Cache qui m’intrigue, ou encore W3 Total Cache qui paraît toutefois un peu instable) que je peine à me brancher définitivement.

Aussi, ces plugins comportent nombre de configurations (mise en cache de toutes les pages, uniquement pour les visiteurs non-connectés, définition de zones dynamiques, etc.) et je voulais chercher à savoir si des configurations optimales existent pour maximiser le bien-être de la machine autant que du visiteur.

Alors?

Une idée? Un témoignage? Une référence?

développement / Catégories

Twitter @Molaram

RSS Liens partagés

Mots-clefs

appartement blogosphère blogues branchez-vous buddypress canadiens cinéma design délire Développement eBay entraînement facebook fanatique fanatiqueca google hockey humour image internet iphone maths molson musique nostalgie personnel PHP politique pub radio société spam sport techno technologie twitter télé télévision utopie viral voyage Web Wordpress youtube yulblog

Ailleurs

Méta