Tous les billets parus dans Développement

php.ini : forcer des options spécifiques pour chaque site

Petit truc très utile si jamais vous disposiez d’un serveur mutualisé hébergeant plusieurs sites et que vous souhaitiez – par exemple – augmenter le POST_MAX_SIZE pour un de vos clients afin de lui permettre de téléverser des photos de haute qualité via l’admin de WordPress.

À la racine de votre dossier public, ajoutez un .htaccess contenant :

suPHP_ConfigPath /home/public_html/

et au même endroit, un fichier nommé php.ini contenant les configs à surpasser (override), par exemple:

upload_max_filesize=10M
post_max_size=10M
max_execution_time=200
max_input_time=200

MÀJ : Merci au collègue Éric qui me souligne au passage la nécessité d’avoir installé le module suPHP pour que cette astuce fonctionne.


Corriger les apostrophes dans WordPress

Vous le savez sûrement, WordPress s’amuse souvent à modifier certains caractères de vos textes par des entités html/unicode ou même d’autres caractères qu’ils juge équivalents. C’est pire encore si vous êtes un adepte du copier/coller pour remplir le formulaire de publication.

C’est surtout vrai pour les apostrophes…

Pour régler ça une fois pour toutes il vous suffit d’ajouter ces quelques lignes au fichier functions.php de votre thème :

1
2
3
4
5
6
7
8
9
10
11
// IMPORTANT : j'ai dû 'casser' les entités avec un espace pour qu'elles s'affichent correctement
// n'oubliez donc pas de les enlever pour que le script fonctionne (ex: & #2019 devient &#2019)

function cleanApostrophes($content)
{
	$content = str_replace(array("'","`","’", "& 146;", "& #2019;", "& #8217;", "& apos;", "& amp;apos;","& #039;"), "'", $content);
	return $content;
}
add_filter('the_title', 'cleanApostrophes');
add_filter('the_content', 'cleanApostrophes');
add_filter('the_excerpt', 'cleanApostrophes');

Avec ça, ciao bye pour les apostrophes étranges et les conversions douteuses dans les titres (the_title), le contenu (the_content) et les résumés (the_excerpt).

Évidemment vous pouvez modifier la fonction à votre gré pour ajouter d’autres règles de remplacement…


HTML5 – Gabarit de test/demo

Je suis tombé sur ça ce matin.

http://fr.html5boilerplate.com/

Vraiment intéressant comme base d’expérimentation pour HTML5.

Vivement des temps libres pour que je puisse m’amuser avec ça un peu…

AJOUT :

Y a aussi le pendant mobile de ce truc.

http://html5boilerplate.com/mobile/

Vraiment incroyable!


WordPress : Afficher une entrée sur plusieurs colonnes

Voici un petit bout de code très utile que j’ai développé afin de permettre très simplement de gérer des billets s’affichant sur plusieurs colonnes via l’interface de WordPress.

Pour ce faire, j’ai choisi d’utiliser à mon avantage le séparateur d’introduction, à savoir la balise <!–more–> qui s’insère facilement en cliquant sur le bouton de l’éditeur.

Ainsi, le script suivant permet de détourner son utilisation pour enrober chaque élément de contenu séparé par <!–more–> d’un DIV permettant ultimement d’afficher le tout sur plusieurs colonnes.

Lire la suite →


[résolu] Problème d’installation d’iTunes causé par Windows Installer

Bon! Après je ne sais pas combien d’heures passées à chercher une solution, voilà comment j’ai réussi – ridiculement simplement – à corriger un bug qui semble affecter beaucoup d’utilisateurs d’une version de Windows 64 bits (Vista ou Seven).

Le problème en question faisait en sorte qu’à chaque fois que j’essayais de mettre à jour iTunes et Quicktime, je me retrouvais avec ce message d’erreur :

Cependant, Windows Installer fonctionne sans aucun problème pour tous les types d’installation. Donc pour installer iTunes, je n’avais pas d’autre solution que de faire une image de mon filesystem, formater l’ordi et réinstaller Windows. Je réussissais donc à avoir la dernière version d’iTunes sur une “fresh install” mais rien d’autre. VRAIMENT frustrant…

Or j’ai tout essayé pour corriger ce problème. TOUT.

J’ai testé au moins 50 solutions suggérées çà et là sur divers forum sans succès… jusqu’à ce que je tombe sur ce billet qui m’a littéralement sauvé la vie. Voici donc comment faire pour régler ce fâcheux problème :

1) Du menu DÉMARRER, exécutez “regedit”

2) Naviguez jusqu’à  :
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesmsiserver

3) Vous devriez voir quelque chose ressemblant à ça :

4) Faites une sauvegarde de votre base de registre (juste au cas)

5) Cliquez sur la clé “WOW64″ et attribuez-lui la valeur 0 plutôt que 1

6) Redémarrez l’ordi

7) Lancez l’installation d’iTunes (avec succès!)

… bonne vie!


Buddypress : Ajouter Facebook Like dans le flux d’activités

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 :

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?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;
}
?>

Convertir un lien vers une image en une miniature (thumbnail)

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!

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