Astuce jQuery : resizable avec scrollbar
Récemment, je me suis retrouvé face à un petit problème lors de l’utilisation du plugin resizable de jQuery. Pour mes besoins, il fallait que je puisse redimensionner une div à taille bornée en overflow:auto, contenant un certain nombre d’éléments. Or durant mes tests, je me suis rapidement rendu compte que l’élément html utilisé pour le redimensionnement (le resizable-handle), se déplaçait lui aussi pendant l’utilisation de la scrollbar … pas super ! Du coup il a fallu un peu ruser pour arriver à mes fins…
HTLM:
<div class="list">
<div class="child">
<div>toto</div>
<div>aime</div>
</div>
</div>
Javascript:
$(document.body).ready (function () {
$('div.list').resizable ({
alsoResize: '.child',
handles: 's',
minHeight: 150,
maxHeight: 300,
minWidth: 230,
maxWidth: 230
});
});
div.list est correctement redimensionnable, c’est div.child qui va contenir mes éléments en overflow:auto. Si vous avez bien regardé la portion de javascript ci-dessus, la propriété alsoResize permet de définir un autre élément à redimensionner en même temps que div.list… ouf!
Migration sous wordpress
Pour des raisons techniques, il fallu migrer le contenu de mon blog qui était sous dotclear v2, vers du wordpress.
En effet, dotclear n’est apriori pas compatible avec la version 5.3 de PHP. Après quelques recherches sur le net, j’ai appris à ma grande surprise que cela venait d’un problème lié aux paramètres passés par référence dans une fonction.
Le passage par référence, évite la copie du contenu d’une variable lorsque cette dernière est utilisée dans une fonction.
function incr_1 ($a) {++$a;}
$v1 = 1;
incr_1 ($v1);
echo $v1; // Affiche 1.
function incr_2 (&$a) {++$a;}
$v2 = 1;
incr_2 ($v2);
echo $v2; // Affiche 2.
Si vous avez bien analysé le code ci-dessus, vous comprenez que le paramètre de incr_1 est passé par copie, et celui de incr_2 par référence. En d’autres termes, dans incr_2 c’est la variable $a en mémoire qui est bien incrémentée.
Or en PHP, il était aussi possible de faire ceci:
function incr_1 ($a) {++$a;}
$nb = 1;
incr_1 (&$nb);
echo $nb; // Affiche 2.
Le procédé était identique, sauf que le passage par référence se réalisait au moment de l’appel de la fonction incr_1, ce qui désormais, depuis la version 5.3 de PHP est interdit! Donc ne fonctionne plus sous dotclear.
Bien entendu, un correctif va très prochainement être apporté si ce n’est pas déjà le cas au moment où je rédige cet article. D’ailleur, j’ai eu le droit à un tweet d’un certain Noé Cendrier, me conseillant d’installer une nightly build de dotclear … des fois que … mais en production, je préfère travailler sur du stable plutôt que sur du béta. Mais ça n’engage que moi!
Pour ce qui est de mes anciennes URL sous dotclear qui commençaient à être relativement bien référencées par google, j’ai dû patcher wordpress afin qu’il réalise une redirection permanente de mes anciennes URL. Et oui, les url sous wordpress sont différentes!
$redirect_http_patch = true;
switch ($_SERVER['REQUEST_URI']) {
case 'ancienne_adresse':
header ('Location: nouvelle_adresse');
break;
// ... etc ...
default: $redirect_http_patch = false;
}
if ($redirect_http_patch) {
header ('HTTP/1.0 301 Moved Permanently');
exit;
}
Un peu barbare je l’avoue, surtout s’il y a une 50aines d’articles, fort heureusement, j’en suis encore loin! Désormais, il ne me reste plus qu’à Françiser le thème que j’ai installé … une autre histoire!


