Prestashop Advanced Sitemap: v1.5 et sitemaps multiples

Posté par seiyar81 le 26 février 2014 | Laisser un commentaire (19)

Une petite news rapide pour informer de la nouvelle version du module qui passe en 1.5 avec au menu une fonctionnalité demandée depuis quelques temps :

  • Génération de sitemaps multiples
  • Compression gzip des sitemaps générés
  • Sauvegarde des paramètres sans regénérer le sitemap
  • Stabilité du code

Cette fonctionnalité permet d’éviter un refus du sitemap par Google si le nombre d’URLs dépasse 50 000 ou si la taille est supérieure à 50 Mo.
Le module fonctionne maintenant ainsi :

  • vous définissez une limite à ne pas dépasser par sitemap (10 000 par défaut, car il faut tenir compte des images)
  • une fois cette limite atteinte lors de la génération, le module sauvegarde un premier fichier et passe au second
  • et ainsi de suite jusqu’à avoir traité toutes les URLs
  • une fois la génération terminée, le module génère un Sitemap Index qui regroupe tous les sitemaps générés et le transmet aux moteurs de recherche
  • si la limite définie n’est pas atteinte, un fichier sitemap simple est généré.

Vous pouvez ensuite choisir de compresser ou non tous les fichiers générés.

La prochaine étape sera maintenant de proposer une génération par langage !

Tout ça se récupère sur GitHub.


MAJ v1.5.1 : version mineure pour corriger 2 petits bugs
– Ajout forcé d’un ‘/’ à la fin des URLs personnalisées (si non présent) pour éviter les URLs malformées
– Correction de la génération du sitemap XML pour la validation XSD

La prochaine version vera l’ajout des fournisseurs/marques et éventuellement la sélection du type d’image à ajouter et/ou la possibilité de ne pas les ajouter au sitemap.

Catégorie: Développement Web, Internet, PHP | Laisser un commentaire (19)

Prestashop Advanced Sitemap: v1.4.4 et CRON

Posté par seiyar81 le 15 juin 2013 | Laisser un commentaire (2)

Suite aux nombreuses demandes reçues en ce sens, j’ai modifié le plugin pour y ajouter une fonction CRON afin qu’il puisse être lancé automatiquement depuis n’importe quel service CRON.

Vous devrez d’abord créer une clé de sécurité via l’interface d’administration du plugin, ceci pour éviter que n’importe qui puisse faire appel au service.
Ensuite vous pourrez appeler le module via cette adresse :

[URL de la BOUTIQUE]/modules/gadvsitemap/cron.php?mode=cron&secure_key=[CLE de SECURITE]

Concernant les services CRON, si vous disposez d’un serveur sous Linux avec l’accès à crontab la configuration suivante suffira :

crontab -e
0 0 * * * wget [URL COMPLETE] 1>/dev/null 2>&1

Sinon vous pouvez faire appel à un service externe tel que :
webcron, cronless.com, easycron.com, ousetcronjob.com.

Pour télécharger la nouvelle version du module ça se passe sur GitHub.

Catégorie: Développement Web, Internet, PHP | Laisser un commentaire (2)

Google Advanced Sitemap disponible pour Prestashop 1.4

Posté par seiyar81 le 3 juin 2012 | Laisser un commentaire (36)

EDIT 15/06/2012 : J’ai créé un dépôt Github afin de pouvoir partager les modifications apportées au plugin.

https://github.com/seiyar81/prestashop-advanced-sitemap

Suites aux remarques et à plusieurs demandes, j’ai fais évoluer le support des langages.
Vous pouvez maintenant, en plus de sélectionner quels langue inclure dans le sitemap, sélectionner l’URL sur laquelle se baser pour la génération et ce pour chaque langue.

EDIT 03/06/2012 : Nouvelle version du module avec support des langages (merci à roselan sur le forum de Prestashop) et génération d’un sitemap correctement formaté.

  Google Advanced Sitemap (13,9 KiB, 751 hits)


Suite aux nombreuses demandes reçues je me suis enfin décidé à porter mon module de génération de sitemap vers Prestashop 1.4.
Depuis la version 1.4 l’équipe de développement de Prestashop a intégré le support des images des produits et des différentes langues activées sur la boutique.

Je suis donc reparti de cette base solide et stable afin de ré-inclure mes fonctionnalités de ping des moteurs de recherche.
Ainsi le module est capable de pinger les moteurs suivants :

  • Google
  • Bing (comprends Yahoo qui a fusionné avec l’index de Bing)
  • Ask.com

Potentiellement tous les moteurs de recherche peuvent être ajoutés, n’hésitez donc pas à me faire part de vos requêtes.

Sachez également qu’à chaque ajout, édition ou suppression de produit, le sitemap est ré-généré automatiquement.

Je reste bien évidemment ouvert aux propositions d’améliorations, de nouvelles fonctionnalités etc… et disponible s’il y a des problèmes.
Encore merci à tous pour vos remarques et suggestions.

Catégorie: Développement Web, Internet, PHP | Laisser un commentaire (36)

Plugin pour Prestashop : Google Advanced Sitemap

Posté par seiyar81 le 17 février 2011 | Laisser un commentaire (26)

EDIT 16/02/2012 : Une nouvelle version du module, compatible 1.4 vient de sortir ici.

EDIT 23/11 : Pas de nouveaux articles depuis un moment, le temps libre me manque, toutefois j’ai reçu beaucoup de demandes concernant des mises à jour où des évolutions pour le module. Il faut savoir que le module de base de Prestashop 1.4 (Google Sitemap) intègre de base le support des images, d’une manière plus stable que mon module ce qui le rend obsolète.
Si je trouve un jour le temps, je le mettrai peut-être à jour pour la version 1.4 avec le ping des autres moteurs et sûrement d’autres fonctionnalités.
Merci à tous pour vos retours et suggestions.

EDIT 17/02 : Mise à jour du module : ajout du ping des moteurs Bing et Yahoo.

Ayant travaillé récemment sur la solution e-commerce Prestashop, proposé par la société éponyme, j’ai cherché à mettre en place le classique fichier sitemap.

Il existe un module, intégré de base à la solution qui permet de générer un fichier avec tous les liens du sites : produits, catégories, CMS etc…
Mais bizarrement, ce module appelé Google Sitemap ne gère pas les images, pourtant partie intégrante d’une boutique en ligne.

Qu’à cela ne tienne, j’ai modifié le module afin d’ajouter :

  • le support des balises <image:image>
  • quelques statistiques en plus lors de la génération du fichier
  • la possibilité de pinger Google directement

et ainsi est né Google Advanced Sitemap !

L’archive zip du module est téléchargeable via le lien ci-dessous. Il est bien évidemment distribué sous la licence GPL.

  Google Advanced Sitemap (13,9 KiB, 751 hits)

Je le mettrai peut-être à jour avec quelques fonctionnalités en plus d’ici quelques temps.

Catégorie: Développement Web, Internet, PHP | Laisser un commentaire (26)

Utiliser Google Font API pour ajouter des polices à ses pages Web

Posté par seiyar81 le 2 août 2010 | Laisser un commentaire (1)

Parmis les nombreuses API disponibles dans ses Code Labs, Google a mis en place une API particulièrement intéressante : Google Font API !

Cette dernière nous permet très simplement d’inclure une ou plusieurs polices hébergées sur les serveurs de Google via un simple fichier CSS.

Un petit exemple pour illustrer le tout, dans la balise head :

<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css' />

Et plus loin dans le corps de la page :

<span style="font-family: 'Lobster', arial, serif; font-size: 16px;">Hello World !</span>

Ce qui donne le résultat suivant :

Hello World

Tout de même bien pratique cette API ! Vous pouvez consulter la liste des polices disponibles sur cette page.

Sachez qu’il est aussi possible d’utiliser un script Javascript co-développé par Google et TypeKit : WebFont Loader.

Rien de bien compliqué ici non plus, si ce n’est que vous pouvez mieux contrôler le chargement des polices via WebFont Loader :


      WebFontConfig = {
        google: { families: [ 'Lobster', 'Nobile' ] }
      };
      (function() {
        var wf = document.createElement('script');
        wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
            '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
        wf.type = 'text/javascript';
        wf.async = 'true';
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(wf, s);
      })();

Vous pouvez ensuite définir vos styles comme ceci :

<style>
      .wf-inactive p {
        font-family: serif
      }
      .wf-active p {
        font-family: 'Lobster', serif
      }
      .wf-inactive h1 {
        font-family: serif;
        font-size: 18px
      }
      .wf-active h1 {
        font-family: 'Nobile', serif;
        font-size: 18px
      }
</style>

L’avantage de WebFont Loader est qu’il supporte le chargement de polices via plusieurs fournisseurs. Ainsi vous pouvez charger des polices provenant des serveurs de Google mais aussi de TypeKit, Ascender, et même de n’importe quel fournisseur via un loader dit “custom” :

WebFontConfig = {
  custom: { families: ['OneFont', 'AnotherFont'],
    urls: [ 'http://www.yriase.fr/mystylesheet1.css',
      'http://www.weblike.me/stylesheet2.css' ] }
};
Catégorie: Développement Web, Javascript | Laisser un commentaire (1)

Auditer son site web avec skipfish

Posté par seiyar81 le 8 avril 2010 | Laisser un commentaire (1)
skipfish

La sécurité est une des principales préoccupations des entreprises concernant leurs données. La sécurité passe par la protection des données, la capacité à se protéger contre les attaques, les intrusions etc…

De nombreuses applications payantes existent et permettent d’auditer des sites web comme Nikto ou Nessus. Ces logiciels sont puissants mais skipfish possède un avantage sur ses concurrents :

“Il est rapide et consomme très peu de ressources !”

En effet la documentation annonce plus de 500 requêtes par secondes sur Internet, 2000 via un LAN et 7000 en local, tout ceci avec un processeur apparemment modeste. Tout ceci grâce à une bonne gestion du protocole HTTP 1.1, aux appels réseaux asynchrones et enfin grâce l’implémentation en C du logiciel.

On peut lui passer un bon nombre d’options comme refuser les cookies, ne pas scanner tel sous-domaine, le nombre maximum de connexions TCP etc…
Skipfish génère ensuite un fichier HTML très simple et agréable à utiliser. On repère ainsi facilement les erreurs, qui sont d’ailleurs plutôt bien détaillées.

Concernant le logiciel lui-même, il est développé par Michal Zalewski, un développeur polonais pour le compte de Google, et il est disponible sous license Apache 2.0

Pour l’installer, il suffit de récupérer l’achive tarball puis ensuite :

tar -xzf skipfish-1.29b.tgz
// On compile
make
// Si vous obtenez des erreurs c'est probablement qu'il vous manque des paquets
sudo apt-get install libidn11 libidn11-dev libssl0.9.8 libssl-dev zlib1g zlin1g-dev

// Si l'installation se déroule bien vous obtenez ce message
See dictionaries/README-FIRST to pick a dictionary for the tool.

Having problems with your scans? Be sure to visit:

http://code.google.com/p/skipfish/wiki/KnownIssues

Une fois ceci fait, vous pouvez examiner la doc et surtout l’aide pour les différentes options.

Catégorie: Internet, Linux | Laisser un commentaire (1)

Programmer un envoi de SMS avec le Zend Framework et Google Agenda

Posté par seiyar81 le 22 mars 2010 | Laisser un commentaire (5)
Google Agenda

Si vous développez déjà avec le Zend Framework vous devez connaître ou avoir entendu parler de Zend_Gdata. C’est, comme son nom l’indique, un ensemble de classes qui permettent l’accès aux services en ligne de Google (Google Data API). On a ainsi accès à :

Aujourd’hui je vais expliquer comment se servir de Zend_Gdata pour communiquer avec Google Agenda. Si vous en connaissez le fonctionnement, vous savez qu’on peut définir des rappels pour les rendez-vous de trois façons : Email, Pop-up ou SMS.

C’est au SMS que nous nous intéresseront, en effet, utiliser Google Agenda pour l’envoi de SMS ne vous coutera pas un centime !

Pré-requis

Vous devez avant tout disposer de :

  • Un compte Google
  • Un agenda activé dans Google Agenda
  • Un numéro de portable associé au compte Google Agenda et vérifié
  • La dernière version du Zend Framework disponible ici
  • Un serveur HTTP avec le support de PHP (peut-être pas besoin de le préciser mais on ne sait jamais :p )

Mise en situation (enfin essai ^^)

C’est bien joli d’écrire ce tutoriel mais sans un exemple pratique il peut être difficile d’en voir l’intérêt.

Imaginez que vous développez pour une entreprise qui installe et gère le fonctionnement de panneaux solaires (vous pouvez remplacer panneaux solaires par chaudières, fenêtres, voire même par l’adoption de poissons rouges birmans, si si ça marche aussi !).

Imaginez maintenant que vos clients aient la possibilité via une interface web de créer des “tickets”, ou “alertes” comme vous le sentez, dès lors qu’ils rencontrent un problème auquel ils ne peuvent faire face seuls !

C’est alors que par malheur, vous n’êtes pas joignable au bureau et le client n’a pas votre numéro de portable (si si c’est possible) ! Drâme ! Horreur ! Comment faire ?

Et bien tout simplement en créant un évènement sur votre Google Agenda avec l’option “reminder by SMS” !

Formulaire

Vous créez donc un formulaire pour que vos clients puissent expliquer en quelques lignes ce qui se passe avec en bonus une liste pour choisir la priorité du ticket.

class Default_Form_Ticket extends Zend_Form
{
    public function __construct($sitesList, $options = null)
    {
        parent::__construct($options);
        $this->setName('ticket_form');
        $this->setAction('/tickets/new')
     	->setMethod('post');
     	$this->setDecorators(array(
	    'FormElements',
	    array('HtmlTag', array('tag' => 'table')),
	    'Form',
		));

        $title = new Zend_Form_Element_Text('title');
        $title->setLabel('Sujet : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->setAttrib('size', '50')
        ->addValidator('NotEmpty');
        $title->setDecorators(array(
	    'ViewHelper',
	    'Errors',
	    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element-input')),
	    array('Label', array('tag' => 'td'), array('tag' => 'td', 'placement' => 'prepend')),
	    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
		));

        $priority = new Zend_Form_Element_Select('priority');
        $priority->setLabel('Priorité : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');
        $priority->addMultiOptions(array('Basse'=>'Basse', 'Normale'=>'Normale', 'Haute'=>'Haute', 'Urgente'=>'Urgente'));
        $priority->setDecorators(array(
	    'ViewHelper',
	    'Errors',
	    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element-input')),
	    array('Label', array('tag' => 'td'), array('tag' => 'td', 'placement' => 'prepend')),
	    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
		));

        $message = new Zend_Form_Element_Textarea('message');
        $message->setLabel('Message : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->setAttrib('cols', '50')->setAttrib('rows', '15')
        ->addValidator('NotEmpty');
        $message->setDecorators(array(
	    'ViewHelper',
	    'Errors',
	    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element-input')),
	    array('Label', array('tag' => 'td'), array('tag' => 'td', 'placement' => 'prepend')),
	    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
		));



        $submit = new Zend_Form_Element_Submit('Soumettre');
        $submit->setAttrib('id', 'submitbutton');
        $submit->setValue('Soumettre');
        $submit->setDecorators(array(
	    'ViewHelper',
	    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element-submit')),
	    array(array('label' => 'HtmlTag'), array('tag' => 'td', 'placement' => 'prepend')),
	    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
		));

        $this->addElements(array($title, $priority, $message, $submit));
    }
}

Ensuite dans le contrôlleur on instancie le formulaire et on l’ajoute à la vue et dans le même temps on met en place le code pour la création de l’évènement.

    public function newAction() {
        $form = new Default_Form_Ticket($sitesList);

        if($this->_request->isPost() && $form->isValid($_POST)) {
            try {
	    /*
		Vous pouvez enregistrer le ticket dans une base de données.
		Nous nous contenterons simplement de l'ajout de l'évènement.
	    */

            $title = 'New Ticket - '.$this->view->user->mail.' - ' . $_POST['title'];
            $message = $_POST['message'];
            
            $this->createAgendaEvent($title, $message);

            $this->_redirect('/tickets');
            } catch(Exception $e) {
                $this->view->error = 'Une erreur est survenue pendant la création du ticket.';
            }
            
        }
        $form->populate($_POST);
        $this->view->form = $form;
    }

Il ne nous reste plus qu’à implémenter la fonction createAgendaEvent. Un petit détail toutefois avant de commencer, le reminder se déclenche au minimum 5 min avant le début de l’évènement. Nous créerons donc un évènement à H+6min.

    public function createAgendaEvent($title, $message) {
	// On charge toutes les classes qui vont nous servir
        Zend_Loader::loadClass("Zend_Gdata");
        Zend_Loader::loadClass("Zend_Gdata_ClientLogin");
        Zend_Loader::loadClass("Zend_Gdata_Calendar");
        // On récupère le nom du service
        $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;

        // On s'authentifie
        $client = Zend_Gdata_ClientLogin::getHttpClient('IDENTIFIANT_COMPTE_GOOGLE', 'PASSWORD_COMPTE_GOOGLE', $service);

        // On crée un nouvel objet Calendar
        $calendar = new Zend_Gdata_Calendar($client);

        // On lui ajoute un évènement
        $event = $calendar->newEventEntry();

        // On met en place le reminder
        $reminder = $calendar->newReminder();
        $reminder->method = "sms";
        $reminder->minutes = "5";

        // Date de début à H+6min
        $startDate     = date("Y-m-d");
        $startTime     = date("H:i", time() + 6*60);
        // Date de fin à H+7min
        $endDate     = date("Y-m-d");
        $endTime     = date("H:i", time() + 7*60);
        // Offset GMT+01 pour Paris
        $tzOffset     = "+01";

        // On assigne tout ça au calendrier
        $when = $calendar->newWhen();
        $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
        $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
        $when->reminders = array($reminder);
        $event->when = array($when);

        // Enfin on ajoute le titre et le message
        $event->title = $calendar->newTitle($title);
        $event->content = $calendar->newContent($message);

        // Et on envoit le tout à Google Calendar
        $newEvent = $calendar->insertEvent($event, "http://www.google.com/calendar/feeds/IDENTIFIANT_COMPTE_GOOGLE/private/full");
    }

Et là, comme par magie vous recevrez une minute plus tard (oui H+6min – 5min = 1min !) un gentil SMS de Google avec le titre de l’évènement.
Si c’est pas beau ça :)

J’espère que ce tutoriel vous aura plu et/ou servi, je continue avec d’autres articles sur le Zend Framework très bientôt.

Catégorie: Développement Web, PHP, Zend Framework | Laisser un commentaire (5)

Le nouveau design de Google !

Posté par seiyar81 le 26 novembre 2009 | Laisser un commentaire (0)

Confirmation que Google travaille activement à mettre en place un nouveau design pour sa page d’accueil, il est possible de l’activer grâce à un simple cookie.

Tout d’abord se rendre sur Google.com.

Ensuite copier-coller le code javascript suivant dans la barre d’adresse de votre navigateur et validez.

javascript:void(document.cookie="PREF=ID=20b6e4c2f44943bb:
U=4bf292d46faad806:TM=1249677602:
LM=1257919388:S=odm0Ys-53ZueXfZG;path=/; domain=.google.com");

Rafraîchissez la page de Google.com, repassez sur la version anglaise si vous êtes en français par défaut et ‘admirez’ le résultat.

Les nouveaux logos :

Google

GMail

Catégorie: Brèves, Internet | Laisser un commentaire (0)

Chrome OS : la présentation

Posté par seiyar81 le 19 novembre 2009 | Laisser un commentaire (0)

Google a rendu public le code source de Chromium OS, système d’exploitation open-source destiné à devenir Chrome OS.

Le code source est disponible au téléchargement ici : Code Source
ou via un dépôt Git.

Tout est expliqué sur le blog de Google : Blog

Enfin un article résume la sortie de l’OS : Article

Au premières nouvelles donc et en vrac :

– Les disques durs seraient écartés au profit d’autre(s) type(s) de stockage : in the cloud, mémoire flash ? On ne sait pas encore pour l’instant.

– Toutes les applications sont des applications en ligne, tout se passe donc via la navigateur, aucune application de bureau

– Conséquence directe de ceci et pour des raisons de sécurité évidentes, Chrome OS ne fera pas confiance par défaut aux applications

– A chaque redémarrage, Chrome OS vérifiera l’intégrité de son code, et s’il a été compromis par un virus ou autre il sera à même de se réparer tout seul.

– Lorsque l’utilisateur voudra se connecter, Chrome OS va tenter de récupérer le compte Google associé, sinon il cherchera un compte local et à chaque connexion réussie en ligne, les identifiants seront mis en cache.

– Les plugins du navigateur auront un processus dédié.

– Mises à jour automatiques sans intervention de l’utilisateur, via HTTPS et signés par le serveur de mises à jours.

Et plein de choses très intéressantes et qui nous laissent présager que Chrome OS sera un système d’exploitation très intéressant !

Pour plus de lecture, plusieurs documents sont en ligne pour expliquer le fonctionnement de l’OS : Chromium OS.

Et pour les plus anglophone une petite vidéo de 3 minutes présentant Chrome OS :

Le lien direct : http://www.youtube.com/watch?v=0QRO3gKj3qw

Catégorie: Internet, Linux | Laisser un commentaire (0)