Catégories
Bricolage Non classé Petits bouts (de code)

Passer de BlogSpirit à WordPress : nouvelle version de l’importeur !

Suite à un commentaire de Capripot, j’ai découvert son travail sur l’importeur BlogSpirit vers WordPress que j’avais moi-même repris à l’époque. Il a notamment corrigé les problèmes suivants :

* importation des article se basant sur la page complète de la liste des articles par catégorie
* « / » en trop à la fin de l’adresse ce qui empêchait l’import des articles d’une catégorie
* bug de version lors de l’import dans wordpress)
* script un peu plus bavard
* choix du nom au départ ou écriture du nom du blog dans NOM_SITE.txt
* dialog.rb renommé en import.rb pour plus de clareté
* non blocage du script à la fin
* correction de l’import des commentaires
* ajout d’un fichier LISEZ-MOI

Télécharger nouvelle version importeur BlogSpirit vers WordPress

Son site : http://www.capripot.com/

Et vous pouvez retrouver l’outil pour passer d’OverBlog à WordPress sur la page dédiée

Catégories
Bricolage D'utilité publique Photo Prestashop

Rajouter un nouveau hook dans Prestashop 1.4 grace à l’override

Prestashop, dans sa dernière version (de mars 2011), propose une vraie amélioration (parmi beaucoup d’autres) : l’override.

Avant de rentrer dans les détails de ce système, rappelons comment est architecturé Prestashop :

  • Les classes, dans /classes, définissent le comportement des fonctionnalités principales (Cart, Order, Customer, etc)
  • Les modules, dans /modules, permettent d’étendre les possibilités de base (newsletter, alertes email, paiement, etc)

Parallèlement, il existe à de nombreux endroits dans Prestashop des hooks (“crochets”) qui sont des points dans le code sur lesquels les modules peuvent se brancher (dans les classes, ou même dans les fichiers à la racine, qui gèrent le panier, le compte-client, etc).

Une bonne manière de comprendre le fonctionnement de ces “hooks” est de les comparer au déroulement d’une vie : vous pouvez intervenir à des moments stratégiques de celle-ci, pour modifier ou non le comportement d’une personne. C’est un peu pareil avec les hooks : ils permettent aux modules de déclencher des actions à des moments-clés du fonctionnement de Prestashop (à l’affichage de l’en-tête, mais aussi au passage d’une commande ou lors de son annulation, etc). Autre exemple : un développeur peut décider d’utiliser le hook “panier” et d’afficher à cet emplacement du contenu (par exemple la météo ou des produits associés).

Certains hooks sont “invisibles” et sont plus des hooks de calcul ou de traitement (génération de PDF, envoi de mail).

Le problème avec ces hooks est qu’ils sont pré-existants dans l’application : en clair, il peut arriver qu’il en manque un précisément là où il serait nécessaire.

Jusqu’à Prestashop 1.3.7, le seul moyen était de le rajouter à la main dans le code, mais avec le risque qu’à la mise à jour suivante, ces modifications disparaîtraient.

Depuis Prestashop 1.4, il existe un dispositif qui permet de résoudre ce problème : l’override.

Derrière cet anglicisme se cache tout simplement la possibilité de “surcharger” Prestashop, c’est à dire de redéfinir ce que fait l’application, et sans craindre de perdre ces changements à la prochaine évolution.

En effet, ces “surcharges” se situent dans un répertoire /override, vide par défaut dans les versions téléchargeables de l’outil, donc qui ne sera pas écrasé par une mise à jour.


Prenons un exemple pratique, pour voir comment tout cela se décompose.

Pitch : On désire rajouter du contenu avant le footer, dans une zone qu’on appellera “surfooter”, indépendante du bas de page.

– 1ère étape : Créer le hook dans la base de données

En effet, pour que Prestashop puisse déclencher une action sur un hook, il faut que celui-ci soit référencé dans la liste des choix possibles.

On va ici utiliser PHPMyAdmin pour l’insérer. Rendez-vous dans la table ps_hook (ou toute table finissant par “_hook”, selon le préfixe que vous avez utilisé). Cliquez sur Insérer, et complétez comme suit l’écran qui apparaît :

Et cliquez sur Exécuter.

Pour les fans du SQL, la commande suivante est équivalente :

INSERT INTO ps_hook (name,title,position,live_edit) VALUES ('surfooter', 'Hook surFooter', '1', '0')

– 2ème étape : Positionner le hook dans le code de l’application

Dans l’exemple qu’on a choisi, le “surfooter” doit se déclencher juste avant le “footer”. Comment se déclenche le hook “footer” ? Regardons dans le fichier footer.php (logique, non?) :

$controller = new FrontController();
$controller->displayFooter();

Depuis la 1.4, on utilise dans Prestashop des contrôleurs, réunis dans un dossier /controllers, qui contiennent les fonctions utilisées dans les différentes pages.

Regardons le code de la fonction displayFooter dans /classes/FrontController.php :

public function displayFooter()
	{
		global $cookie;
		if (!self::$initialized)
			$this->init();

		self::$smarty->assign(array(
			'HOOK_RIGHT_COLUMN' => Module::hookExec('rightColumn', array('cart' => self::$cart)),
			'HOOK_FOOTER' => Module::hookExec('footer'),
			'content_only' => (int)(Tools::getValue('content_only'))));
		self::$smarty->display(_PS_THEME_DIR_.'footer.tpl');
		//live edit
		if (Tools::isSubmit('live_edit') AND $ad = Tools::getValue('ad') AND (Tools::getValue('liveToken') == sha1(Tools::getValue('ad')._COOKIE_KEY_)))
		{
			self::$smarty->assign(array('ad' => $ad, 'live_edit' => true));
			self::$smarty->display(_PS_ALL_THEMES_DIR_.'live_edit.tpl');
		}
		else
			Tools::displayError();
	}

La ligne HOOK_FOOTER’ => Module::hookExec(‘footer’) permet de déclencher “les fonctions hookfooter situés dans les modules installés sur la boutique”. Parallèlement, on retrouve dans le template un bloc {$HOOK_FOOTER} qui affichera là ou il est inséré le contenu généré par les fonctions qu’on vient évoquer.

Pour notre “surfooter”, il suffirait donc de rajouter :

HOOK_SURFOOTER' => Module::hookExec('surfooter'),

Mais (il y a un “mais”), comme on l’a précisé au début de l’article, ces fichiers du coeur de Prestashop seront écrasés à la prochaine mise à jour. On va donc “dupliquer” cette fonction, et créer un fichier /override/classes/FrontController.php, contenant :

//La classe d'origine située dans /classes/FrontController.php s'appelle FrontControllerCore, on utilise donc ici FrontController
class FrontController extends FrontControllerCore
{
	//Copie de la fonction displayFooter située dans /classes/FrontController.php, mais avec le "surfooter" en +
	//C'est la copie qui prendra la main sur la fonction d'origine appelée dans /footer.php
    public function displayFooter()
	{
		global $cookie;
		if (!self::$initialized)
			$this->init();

		self::$smarty->assign(array(
			'HOOK_RIGHT_COLUMN' => Module::hookExec('rightColumn', array('cart' => self::$cart)),
			//On rajoute l'appel à notre nouveau hook
			'HOOK_SURFOOTER' => Module::hookExec('surfooter'),
			'HOOK_FOOTER' => Module::hookExec('footer'),
			'content_only' => (int)(Tools::getValue('content_only'))));
		self::$smarty->display(_PS_THEME_DIR_.'footer.tpl');
		//live edit
		if (Tools::isSubmit('live_edit') AND $ad = Tools::getValue('ad') AND (Tools::getValue('liveToken') == sha1(Tools::getValue('ad')._COOKIE_KEY_)))
		{
			self::$smarty->assign(array('ad' => $ad, 'live_edit' => true));
			self::$smarty->display(_PS_ALL_THEMES_DIR_.'live_edit.tpl');
		}
		else
			Tools::displayError();
	}
}

– 3ème étape : “greffer” un module sur notre hook

Que l’on souhaite être directement connecté au “surfooter”, ou qu’on souhaite les relier ensuite par “Greffer un module”, la procédure est la même : il faut déclarer au début du fichier du module que l’on souhaite s’y connecter.

Prenons l’exemple de “Bloc newsletter”, (/modules/blocknewsletter/blocknewsletter.php) et de sa fonction install() (présente dans toutes les extensions Prestashop) :

if (parent::install() == false OR $this->registerHook('leftColumn') == false OR $this->registerHook('header') == false)
	return false;

On voit qu’est utilisée plusieurs fois la fonction registerHook, qui permet de se “référencer” sur un hook précis. On va donc modifier cette ligne ainsi :

if (parent::install() == false OR $this->registerHook('leftColumn') == false
OR $this->registerHook('header') == false  OR $this->registerHook('surfooter') == false) {
	return false;
}

Désormais, à la prochaine installation de ce module (donc par exemple si on le désinstalle/réinstalle), il se branchera sur “surfooter” et cherchera à éxécuter sa propre fonction hooksurfooter(), qu’on va créer pour l’occasion (toujours dans le même fichier /modules/blocknewsletter/blocknewsletter.php) :

function hooksurfooter($params)
	{
		//Mettre ici du code à exécuter dans le surfooter
	}

Il faudra bien sur rajouter le bout de code nécessaire dans notre template, par exemple:

{$HOOK_SURFOOTER}

(merci à Jérémy Kleinclaus pour la remarque à ce sujet là)
Bien sur, comme toute modification importante sur un template et sur la boutique, il peut être nécessaire de vider le cache Prestashop si les changements n’apparaissent pas.

On peut également utiliser ce procédé pour modifier le fonctionnement d’une fonction du core de Prestashop, sans nécessairement vouloir rajouter un hook, ou “surcharger” un contrôleur, en utilisant le répertoire /override/controllers.

Catégories
Bricolage

Activer le Bureau à distance sur Windows 7 Home Premium

Depuis sa version 2000, Windows est équipé d’une fonctionnalité très pratique : le Bureau à distance, qui permet de se connecter à distance sur l’ordinateur, comme si on se trouvait devant.

Mais dans sa dernière édition (Windows 7), seules les versions Professionel et Ultimate en sont équipées, ce qui empêche l’immense majorité des utilisateurs (utilisant la version Home Premium) d’en bénéficier.

Un bidouilleur a donc eu l’idée de créer un patch permettant d’activer cette fonctionnalité.

Pour télécharger le fichier : Patch d’activation du Bureau à distance sur Windows 7 Home Premium

Catégories
Bricolage

DropBox se ferme au lancement sous Ubuntu 9.04

Ayant récemment découvert DropBox, un système pratique de disque dur en ligne, j’ai entrepris de l’installer sur un ordinateur Ubuntu 9.04 de l’équipe FrenchBirds (présente aux JDLL 2009).
Cependant, même si DropBox se lançait bien, dès qu’on essayait de cliquer sur son icône, il se plantait lamentablement.
Après quelques recherches sur le forum dédié, j’ai trouvé une solution très simple :
– couper la connexion réseau via un clic droit sur l’icône correspondante dans la zone de notification d’Ubuntu
– lancer DropBox et le paramétrer
– relancer la connexion réseau

Catégories
Bricolage

Scripts d’import BlogSpirit et OverBlog vers WordPress

Suite à la volonté de notre chère Véro de migrer son blog chez Over-Blog vers une version tournant sous WordPress, j’avais cherché un moyen d’importer les billets entre les deux plate-formes.

J.R. Courtois avait développé il y a quelques mois un script Ruby d’import Over-Blog vers WordPress, mais celui-ci ne fonctionnait plus correctement : il a donc fallu réadapter le code aux modifications apportées aux squelettes OB.

Parallèlement, à l’occasion de “l’affaire Fadila Brahimi” (sur laquelle je ne reviendrais pas ici), j’avais adapté le script ci-dessus aux articles hébergés par BlogSpirit.

Vous retrouverez désormais cet outil sympathique sur une page dédiée, Importer un blog (Over-Blog ou BlogSpirit) dans WordPress.

Catégories
Bricolage

Plugin “Pages Connexes ” (related) pour Dotclear 1.2.x

Sur Lyon-Blog, on utilisait depuis très longtemps le plugin “Pages connexes” de Dotclear pour afficher notre liste des blogs.

Mais pour sécuriser notre serveur, nous avons du désactiver certaines fonctions comme parse_ini_file(). Or celle-ci est à la base de “Pages connexes” !

Voici donc un patch du plugin pour contourner ce problème : version 0.56 du plugin Related – Pages connexes pour Dotclear 1.2.x.

Catégories
Bricolage

Ultramon 3.0.5 en français !

Le double-écran, pour un geek comme moi, c’est très pratique…mais avoir une seule barre des tâches pour gérer les deux moniteurs, ca l’est moins …

Mais heureusement RealTime Soft a créé Ultramon, qui, entre autres fonctionnalités avancées, permet de générer une barre des tâches sur chaque écran, de dupliquer un écran sur un autre, etc.

Et accessoirement, Ultramon 3.0.5 est maintenant traduit en français (programme et aide)!

Pour le récupérer : page des packs de langue.

Catégories
Bricolage Tests

FreeWifi : l’activer et s’y connecter

Le fournisseur d’accès Proxad / Free a activé en cette fin de mois de mai 2009 une fonctionnalité spéciale sur ses Freebox v5 : un réseau Wifi public ouvert à tous les abonnés Free.

En clair, ceci permet, comme chez SFR / FON, de se connecter, avec un identifiant unique, sur n’importe quelle box (du FAI) en France.

L’activation de ce nouveau réseau Wifi se fait automatiquement par mise à jour de votre Freebox (en clair, la débrancher/rebrancher).

Génération du couple identifiant / mot de passe

Cette opération nécessite d’être branché sur la Freebox en filaire ou via Wifi directement (sans routeur).

Ouvrez http://wifi.free.fr :

_1243415810029

Comme indiqué sur la capture d’écran, un code de confirmation va défiler sur l’afficheur de la box : il vous suffit de le saisir dans l’interface.

L’écran suivant vous permettra de définir un mot de passe (bon ok, là c’est l’écran de modification, mais ils sont identiques 🙂 :

modification_mdp

Une fois ces manipulations, vous aurez en main un couple identifiant / mot de passe vous permettant de vous connecter à n’importe quelle Freebox.

Connexion au réseau FreeWifi

Comme son nom l’indique, il suffit de se connecter à un réseau nommé FreeWifi (vous en apercevrez quand une Freebox v5 sera à proximité). Ce réseau étant non sécurisé (c’est à dire sans mot de passe pour la connexion initiale), il vous suffira de le sélectionner pour y accèder.

Une fois la connexion à FreeWifi activée, ouvrez votre navigateur sur n’importe quelle URL (un portail captif étant en place, il s’affichera quelque soit la page demandée) :

connexion_freewifi

Saisissez alors vos identifiants (cf les étapes précédentes), et vous pourrez surfer 🙂

Notes

– il s’agit d’un véritable accès à Internet, non bridé en terme de fonctionnalités (par exemple, non limité au surf)
– au niveau débit, apparement, le “visiteur” prendra le pourcentage de bande passante non utilisé par le possesseur de la Freebox

Catégories
Bricolage

“Zone morte” non cliquable sur un écran de portable Asus

On m’a récemment soumis “ce problème à la noix”, dont je n’avais jamais entendu parler : sur un portable Asus, même après reformatage, une partie de l’écran n’est pas cliquable, on ne peut y déposer d’îcones, etc.

Croyant à “un bug utilisateur”, j’ai quand même cherché un petit peu sur le Nain Ternette et c’est apparement un problème rare mais connu…

Solution :

Mettre à jour l’utilitaire ATKOSD2, disponible sur le site Asus (une version par système d’exploitation).

J’espère que ca vous servira !

Catégories
Bricolage

Afficher le commentaire de la table dans PhpMyAdmin

Lorsqu’une application comporte plus d’une centaine de tables, il est toujours difficile de s’y retrouver…

Phpmyadmin permet de rajouter un commentaire sur chaque table, mais celui-ci n’est visible qu’à l’affichage de la table :

phpmyadmin_commentaire_table1

Vu que rentrer dans chaque table pour se souvenir à quoi elle correspond n’est pas faisable (ni logique), je me suis bricolé un petit hack pour l’afficher directement au bon endroit :

phpmyadmin_commentaire_table2

Il suffit de modifier le fichier db_structure.php, cherchez ce bloc (vers la ligne 320) :

$alias = (!empty($tooltip_aliasname) && isset($tooltip_aliasname[$each_table['TABLE_NAME']])) ? str_replace(' ', ' ', htmlspecialchars($tooltip_truename[$each_table['TABLE_NAME']])) : str_replace(' ', ' ', htmlspecialchars($each_table['TABLE_NAME']));

$truename = (!empty($tooltip_truename) && isset($tooltip_truename[$each_table['TABLE_NAME']])) ? str_replace(' ', ' ', htmlspecialchars($tooltip_truename[$each_table['TABLE_NAME']])) : str_replace(' ', ' ', htmlspecialchars($each_table['TABLE_NAME']));

Ajoutez juste après :

if ((isset($each_table['Comment'])) && ($each_table['Comment']!=$each_table['TABLE_NAME']))
        $truename .= " ( ".$each_table['Comment'].")";

J’ai rajouté ici une classe personnalisée histoire de donner une taille différente au commentaire.

Note : le commentaire de chaque table est accessible via le menu Opérations dans la vue Table