Prestashop Advanced Sitemap: v1.4.4 et CRON

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

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 (0)

PHPUi : Du nouveau et des examples

Posté par seiyar81 le 26 février 2013 | Laisser un commentaire (0)

PHPUi Logo

Beaucoup de changements pour PHPUi, on avance petit à petit vers une librairie utilisable pour développer et créer ses interfaces utilisateurs.

La réécriture de la librairie avec les namespaces de PHP5 a apporté entre autres une meilleur abstraction et modularité des fonctionnalités.

Le support de jQuery ( et de jQuery Ui ) est toujours d’actualité mais est complété par le support de Javascript basique.
Cela nous permet de mieux intégrer dans nos pages des fonctionnalités simples mais nécessaires telles que l’ouverture de popup ou le clic sur un bouton sans avoir besoin d’un framework complet.

Un petit exemple :

	$button = new Xhtml\Element('button', array('onClick' => PHPUi::getInstance()->js()->console->log('[OnClick] Hello world !')), true, 'Click me !');
	$button->onMouseOver = $button->js()->console->log('[MouseOver] Hello world !');
	echo $button;

        $button2 = new Xhtml\Element('button', array('onClick' => PHPUi::getInstance()->js()->window->open("http://localhost/phpui/examples/","PHPUi Examples","menubar=1,resizable=1,width=350,height=250")), true, 'Open pop-up !');
        echo $button2;

Comme vous pouvez le voir, le chaînage des appels Javascript est pleinement supporté.

Cette fonctionnalité devrait également faire son apparition dans l’adapter jQuery en plus du support des spécificités de ce dernier.
A l’heure actuelle vous pouvez déjà réaliser ceci :

        $gs = PHPUi::getInstance()->gs(array('columns' => 16));
        $gs->addChild(new Xhtml\Element('h2', null, true, '16 Column Grid - 960Gs'));
        $gs->jquery()->click( $gs->js()->console->log("Hello from the console") ); 
        $gs->jquery()->click( 
            $gs->jquery()->ajax( 
                array( 
                    'url' => 'ajax.php', 
                    'type' => 'POST', 
                    'data' => array( 'html' => $jsonString ), 
                    'dataType' => 'html',
                    'success' => 'function(data) { $(".container_16").append(data); }' 
                ) 
            ) 
        );
        echo $gs;

Le chaînage des appels Javascript dans un appel jQuery est actuellement supporté.

Pour plus d’exemples ou d’informations voyez le GitHub du projet.

Catégorie: Développement Web, Javascript, PHP | Laisser un commentaire (0)

PHPUi : créer et manipuler des interfaces utilisateurs en PHP

Posté par seiyar81 le 21 septembre 2012 | Laisser un commentaire (2)

PHPUi Logo

Je présente aujourd’hui un projet commencé pour mon mémoire de fin d’études, puis mis en pause, puis repris, puis complètement réécris …

Il s’agit d’une librairie qui permet de générer des interfaces utilisateurs en écrivant uniquement du PHP (ou presque :p).
Le but est de simplifier la vie aux développeurs qui souhaitent générer dynamiquement du code HTML/CSS ou Javascript côté serveur.
A l’heure actuelle, le support du CSS et du Javascript est en cours d’implémentation/optimisation.

La librairie se veut 100% objet PHP5, utilise les namespaces, est facilement extensible via une abstraction de la plupart de ses fonctionnalités, supporte l’autoload, utilise le pattern Observer etc …
De plus un support particulier des frameworks CSS 960gs et Blueprint a été implémenté (via le système d’abstraction, donc applicable à d’autres frameworks/librairies) afin de réellement faciliter la mise en place d’interfaces aux développeurs.

Si vous souhaitez plus d’infos sur les frameworks cités : 960gs, Blueprint.

Un petit exemple de code :

    $blue = PHPUi::getInstance()->blueprint(array('class' => 'container', 'id' => 'blueprint'));
    $blue->addChild(new Xhtml\Element('h2', array('span' => 24), true, '24 Column Grid - Blueprint'));
    $blue->addChild(new Xhtml\Element('div', array('notice' => true), true, 'This is a div with class notice'));
    $blue->addChild(new Xhtml\Element('div', array('error' => true), true, 'This is a div with class error'));
    $blue->jquery()->click( 
        $blue->jquery()->ajax( 
             array( 
                 'url' => 'ajax.php', 
                 'type' => 'POST', 
                 'dataType' => 'html',
                 'success' => 'function(data) { $("#blueprint").append(data); }' 
             ) 
        ) 
    );

On créé ici un nouvel élément utilisant l’adapter Blueprint, on peut donc directement initialiser des div de type error, notice ou alert en passant le paramètre à true. On applique ensuite un filtre jQuery qui au clic sur la div lancera un appel AJAX avec les paramètres donnés.
La librairie se charge ensuite de générer le code correspondant aux appels effectués.

Sachez qu’il est également possible de charger/décharger un ensemble d’éléments via un système d’adapter.
Exemple avec notre élément $blue de tout à l’heure :

     $dump = Xhtml\Dumper\DumperJson::dump( $blue );
     $loaderJson = new Xhtml\Loader\LoaderJson(array('content' => $dump));
     echo $loaderJson->load();

Ici on dump et on load un élément en JSON mais à terme il sera possible d’exporter/charger via n’importe quel format puisqu’il est possible de définir ses propres classes.

Si vous souhaitez regarder les exemples ou bien le code de la librairie, un dépôt Github existe :
https://github.com/seiyar81/phpui

La librairie est toujours en cours de développement, je suis donc ouvert aux propositions d’améliorations ou aux fonctionnalités à implémenter.

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

Google Advanced Sitemap disponible pour Prestashop 1.4

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

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, 712 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 (33)

Réaliser une requête POST en PHP avec cURL

Posté par seiyar81 le 10 mai 2012 | Laisser un commentaire (0)

Voici un snippet d’une fonctionnalité que l’on ne trouve pas facilement dans la documentation de PHP : uploader un fichier avec la librairie cURL.

Cette dernière nous offre en effet de nombreuses possibilités pour gérer nos requêtes et ce qui nous intéresse plus particulièrement ici : les requêtes HTTP à l’instar de wget par exemple.


function curlUploadFile($url, $fileName) {

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_VERBOSE, 0);
  curl_setopt($ch, CURLOPT_USERAGENT, "MY_USER_AGENT");
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, true);

  $post = array(
    "upload_file"=>"@".str_replace("\\", "/", $fileName),
  );
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
  $response = curl_exec($ch);

  if(!curl_errno($ch))
  {
    return $response;
  }
  else
  {
    return curl_error($ch);
  }

}

Voilà en espérant que cela dépanne certains !

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

QtBlogger : QtAmbassador et futur du projet

Posté par seiyar81 le 5 février 2012 | Laisser un commentaire (1)

Qt Ambassador

Logo QtBlogger

Cela fait plusieurs mois que le projet n’a pas avancé, on peut même dire qu’il était en pause.
Il faut dire que beaucoup d’évènements se sont enchaînés et qu’il n’a pas été facile pour moi de poursuivre les développements : déménagement, mémoire de fin d’études, entrée dans la vie active etc…

Toutefois le projet n’est pas mort ! Je compte bien poursuivre les développements et fournir un jour une première version de QtBlogger au téléchargement.

Pour rappel QtBlogger permet de gérer via une seule et même interface tous vos Blogs et CMS en s’interfaçant avec les différentes plates-formes existantes telles WordPress, Joomla, Drupal etc…
Ajoutez à cela une API permettant le développement de plugins, de nombreuses fonctionnalités présentes de base comme l’édition ou la recherche directe d’images sur le Web et vous obtenez un logiciel polyvalent.

De plus QtBlogger a eu l’honneur de rejoindre le programme QtAmbassador offert par Nokia ce qui est d’ores et déjà une première reconnaissance du travail effectué jusqu’à présent.

J’espère être en mesure de pouvoir fournir une première Beta très rapidement cela dépendra toutefois du temps que je pourrai consacrer au projet !

Catégorie: Geek, Qt, Yriase | Laisser un commentaire (1)

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, 712 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)

Zend Framework : Une feuille de style par action

Posté par seiyar81 le 19 juillet 2010 | Laisser un commentaire (1)

Je partage une petite astuce qui m’est venue en développant aujourd’hui. Quand on travaille sur des applications plutôt importantes, on peut être amené à vouloir segmenter le CSS.

En effet un seul gros fichier avec toutes les classes dedans, c’est pas beau et c’est beaucoup plus difficile à maintenir que plusieurs fichiers, chacun contenant les classes et styles utilisées dans la vue.

Pour ajouter automatiquement une feuille de style correspondante à une action,  rien de plus simple, il suffit de placer le code suivant dans le(s) contrôlleur(s) souhaités :

  public function init()
  {
    $this->view->headLink()->appendStylesheet('/css/'.$this->getRequest()->getActionName().'.css');
  }

Ainsi, l’action index aura son fichier index.css et ainsi de suite !

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

ZendX_JQuery : view helper pour les bouttons

Posté par seiyar81 le 13 avril 2010 | Laisser un commentaire (4)

Après le view helper pour la progressbar de jQuery UI, je me suis amusé à coder un view helper pour les bouttons. Le principe reste le même, cependant j’ai ajouté un paramètre pour gérer le passage des évènements à la création du boutton.

/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category    ZendX
 * @package     ZendX_JQuery
 * @subpackage  View
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license     http://framework.zend.com/license/new-bsd     New BSD License
 * @version     $Id: Slider.php 20165 2010-01-09 18:57:56Z bkarwin $
 */

/**
 * @see ZendX_JQuery_View_Helper_UiWidget
 */
require_once "ZendX/JQuery/View/Helper/UiWidget.php";

/**
 * jQuery Button View Helper
 *
 * @uses 	   Zend_Json
 * @package    ZendX_JQuery
 * @subpackage View
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class ZendX_JQuery_View_Helper_Button extends ZendX_JQuery_View_Helper_UiWidget
{
    /**
     * Create a jQuery button
     *
     * @link   http://docs.jquery.com/UI/Button
     * @param  string $id
     * @param  string $value
     * @param  array  $params
     * @param  array  $attribs
     * @param  array  $events
     * @return string
     */
    public function button($id, $value, array $params = array(), array $attribs = array(), array $events = array())
    {
        if(!isset($attribs['id'])) {
            $attribs['id'] = $id;
        }

        $jqh = ZendX_JQuery_View_Helper_JQuery::getJQueryHandler();
        $params = ZendX_JQuery::encodeJson($params);
        $events = $this->getEvents($events);

        $js = sprintf('%s("#%s").button(%s)%s;', $jqh, $attribs['id'], $params, $events);
        $this->jquery->addOnLoad($js);
 
        $html = "<button ".$this->_htmlAttribs($attribs)." >";
        $html .= $value;
        $html .= '</button>';

        return $html;
    }

    public function getEvents($events)
    {
        if(!count($events)) return '';
        else {
            $retour = '';
            foreach ($events as $event => $function) {
                $retour .= '.'.$event.'('.$function.')';
            }
            return $retour;
        }
    }

}

Pour l’utiliser on place le fichier Button.php (avec le code ci-dessus) dans le dossier ZendX/JQuery/View/Helper/ et pour l’utiliser :

echo $this->button("button1", "Mon Button", array('icons' => new Zend_Json_Expr("{primary: 'ui-icon-gear'}")),
        array(), array('click'=> "function(){ alert('Hello World !'); }" ));

Enjoy !

Catégorie: Javascript, PHP, Zend Framework | Laisser un commentaire (4)

Zend Framework / jQuery : Exemple de « view helper »

Posté par seiyar81 le 29 mars 2010 | Laisser un commentaire (0)

Dans la continuité du précédent billet sur le Zend Framework et jQuery, j’ai codé un view helper pour la ProgressBar de jQuery UI.

Je suis tout simplement parti du code du slider que j’ai bien rogné et un peu modifié pour arriver à un code fonctionnel.

Sans plus attendre le voici :

/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category    ZendX
 * @package     ZendX_JQuery
 * @subpackage  View
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license     http://framework.zend.com/license/new-bsd     New BSD License
 * @version     $Id: Slider.php 20165 2010-01-09 18:57:56Z bkarwin $
 */

/**
 * @see ZendX_JQuery_View_Helper_UiWidget
 */
require_once "ZendX/JQuery/View/Helper/UiWidget.php";

/**
 * jQuery ProgressBar View Helper
 *
 * @uses 	   Zend_Json
 * @package    ZendX_JQuery
 * @subpackage View
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class ZendX_JQuery_View_Helper_ProgressBar extends ZendX_JQuery_View_Helper_UiWidget
{
    /**
     * Create a jQuery progressbar
     *
     * @link   http://docs.jquery.com/UI/Progressbar
     * @param  string $id
     * @param  string $value
     * @param  array  $params
     * @param  array  $attribs
     * @return string
     */
    public function progressBar($id, $value, array $params = array(), array $attribs = array())
    {
        if(!isset($attribs['id'])) {
            $attribs['id'] = $id;
        }

        $jqh = ZendX_JQuery_View_Helper_JQuery::getJQueryHandler();

        if(count($params) <= 0) {
            $params = ZendX_JQuery::encodeJson(array('value'=>$value));
        } else {
            $params = ZendX_JQuery::encodeJson($params);
        }

        $js = sprintf('%s("#%s").progressbar(%s);', $jqh, $attribs['id'], $params);
        $this->jquery->addOnLoad($js);
 
        $html = "<div ".$this->_htmlAttribs($attribs)." >";
        $html .= '</div>';

        return $html;
    }
}

C’est simple et ça fonctionne !
Il suffit de créer le fichier : « ZendX/JQuery/View/Helper/ProgressBar.php » et d’y placer ensuite le code ci-dessus.

Ensuite pour l’utiliser c’est très simple dans vos vues :

echo $this->progressBar("progressBarId", 65);

Voilà en espérant que cela serve :)

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