Archives pour la catégorie ‘ Trucs et astuces’

Créer un utilisateur mysql avec PhpMyAdmin

( Cet article suppose que vous avez phpmyadmin d’installé sur le serveur, et les accès pour vous identifier en root a PhpMyAdmin, si PhpMyAdmin n’est pas installé vous pouvez consulter le tutoriel suivant : installer phpmyadmin

– Par défaut lors de l’installation de votre serveur, seul un utilisateur root avec des accès complets est créé.
Si vous souhaitez installer de multiples sites sur votre serveur, il n’est donc pas sécurisé d’utiliser le compte root par défaut pour tous vos sites.

Nous allons donc voir comment créer un utilisateur supplémentaire avec uniquement les droits nécessaires au bon fonctionnement d’un site web via l’interface PhpMyadmin

Connectez vous à PhpMyAdmin avec l’utilisateur root

Puis rendez-vous dans l’onglet « Utilisateurs »
phpmyadmin-utilisateur

Cliquer ensuite le bouton « Ajouter un utilisateur »

phpmyadmin-utilisateur-2

Le formulaire de création de compte apparait :

phpmyadmin-utilisateur-3

Renseignez :

  • nom d’utilisateur
  • mot de passe
  • confirmation mot de passe
  • client : local ( pour des raisons de sécurité, n’authorise que les connexions depuis le serveur lui-même )

Au niveau des droits d’accès, comme nous souhaitons une utilisation web :

  • Tous les droits sur la section « Données « 
  • Les droits suivants sur la section « Structure » : CREATE, ALTER, INDEX, DROP, CREATE TEMPORARY TABLES
  • Aucun droits sur la section « administration »

Concernant les limites de ressources, libre à vous de les configurer en fonction de l’utilisation de votre serveur.…

2 commentaires

Bonnes pratiques : Mise en place d’un environnement de développement normalisé avec NetBeans

Avec leur multiples contributeurs, la maintenabilité des solutions open-source est relativement complexe.
C’est pourquoi celles-ci instaurent des normes de développement qui garantissent la qualité et l’apparence du code.
Ces normes peuvent avoir pour nom « PSR-1 », « PSR-2 » etc..

Je vais vous détailler comment mettre en place un environnement de développement qui vous permettra de suivre au mieux ces normes.
Selon les développeurs, l’éditeur peut varier, pour ma part j’utilise NetBeans au quotidien et j’en suis vraiment très satisfait.

Je vais donc vous détailler comment procéder pour tout configurer avec cet éditeur 🙂 sous Windows
( Certains points sont communs à l’ensemble des éditeurs // Cette méthode ne prétends pas être la meilleure mais détaille l’ensemble des étapes nécessaires à la mise en place)

Installation de Wampserver

Télécharger le fichier d’installation en 32 ou 64 bits en fonction de votre ordinateur depuis le site : http://www.wampserver.com/
Procéder à l’installation standard de Wampserver dans sa dernière version.
( Nous partirons du postulat que Wamp sera installé dans le dossier c:/wamp/ )

Une fois l’installation de wampserver effectuée, il faut se connecter à la console Windows ( Touches Windows + R / puis cmd )
Puis il faudra se rendre dans le dossier c:/wamp/bin/php/php.x.x.x/bin/ ( la valeur de php varie en fonction de la version de Wamp que vous avez sur votre poste, remplacer les x par les bonnes valeurs )

Installation de pear avec Wampserver

La procédure étant assez complexe je vous renvois directement vers un tutoriel très bien réalisé sur le sujet :

http://baudet.me/2013/05/installer-pear-sur-son-wamp/

Installation de PHP_CodeSniffer

– Nous allons utiliser pear

pear install PHP_CodeSniffer

Installation de PHP_MD

– Nous allons également utiliser pear

pear channel-discover pear.pdepend.org
pear install pdepend/PHP_Depend
pear channel-discover pear.phpmd.org
pear install phpmd/PHP_PMD

Installation du Plugin phpMD / Php Code sniffer pour Netbeans

Je ne suis pas parvenu à trouver le plugin via la recherche standard de Netbeans, il est donc nécessaire de le télécharger depuis l’adresse suivante :
http://sourceforge.net/projects/phpmdnb/

– Ouvrir Netbeans et installer le plugin ( via outil / plugins / ) dans l’onglet « Téléchargés ».…

Pas de commentaires

Prestashop 1.4 : Afficher le prix produit sans l’écotaxe

Par défaut l’affichage du prix des produits sous Prestashop ( version 1.4 ) inclus l’écotaxe dans son montant.
Si pour différentes raison il vous est nécessaire de modifier cet affichage voici comment l’afficher sans l’écotaxe.

Pour commencer il est nécessaire de surcharger la classe Product dans le fichier override/classes/Product.php
Dans cette classe nous allons ajouter 2 fonctions qui vont récupérer les prix sans l’écotaxe.

<?php
 
/**
 * Surcharge de la classe produits
 *
 */
class Product extends ProductCore {
 
 
    /**
     * Reprise de la fonction getPrice mais en appellant la fonction getProductPriceStatic avec le paramètre ecotaxe à false
     *
     * @param boolean $tax With taxes or not (optional)
     * @param integer $id_product_attribute Product attribute id (optional)
     * @param integer $decimals Number of decimals (optional)
     * @param integer $divisor Util when paying many time without fees (optional)
     * @return float Product price in euros
     */
    public function getPriceWithoutEcotax($tax = true, $id_product_attribute = NULL, $decimals = 6, $divisor = NULL, $only_reduc = false, $usereduc = true, $quantity = 1) {
        return Product::getPriceStatic((int) ($this->id), $tax, $id_product_attribute, $decimals, $divisor, $only_reduc, $usereduc, $quantity,false, NULL, NULL, NULL, $this ,false);
    }
    
    /**
     * Reprise de la fonction getPrice mais en appellant la fonction getProductPriceStatic avec le paramètre ecotaxe à false
     *
     * @param boolean $notax
     * @param intege $id_product_attribute
     * @return float Product price in euros
     */
    public function getPriceWithoutReductWithoutEcotax($notax = false, $id_product_attribute = false)
    {
        return Product::getPriceStatic((int)($this->id), !
2 commentaires

Prestashop 1.4 : Créer un controller Front Office pour un module

Dans sa version 1.4, la gestion des controllers front office des modules n’est pas aussi optimisée que sur les versions suivantes.
Malgré tout cette version reste encore assez utilisée sur des anciennes boutiques.

Voici donc comment créer « proprement » un module qui disposera d’un controller front office.
Par proprement j’entends un module qui déposera les fichiers nécessaires aux bons emplacements, et qui peut être désinstallé sans laisser de traces 🙂

Le nom du module sera « sample » et sa structure sera la suivante :

Structure du module sample

Les contenus des fichiers css,js et tpl n’ayant pas d’importance je ne détaillerais pas leur contenu. ( il s’appelleront respectivement sample.css , sample.js et sample.tpl )

Voici le contenu du fichier de gestion du module « sample.php »
C’est dans ce fichier via les fonction _installModuleController et _uninstallModuleController que le controller Front office du module est bien installé ou supprimé

<?php
 
if (!defined('_PS_VERSION_'))
exit;
 
class Sample extends Module {
 
/** Nom de la page Front Office du module */
private $_module_page_name = 'sample_front_office_page';
 
 
public function __construct() {
 
$this->name = "sample";
$this->tab = "others";
$this->version = '0.1.0';
$this->author = "Hennes Herve";
$this->need_instance = 0;
 
parent::__construct();
$this->displayName = $this->l("Sample Module");
$this->description = $this->l("Sample module with front controller");
}
 
/**
* Installation du module
*/
public function install() {
 
//Installation Standard du module
if (!
5 commentaires

Magento : Importer / Exporter les produits complémentaire ( upsell , crossell , related ) via les profils avancés

Suivant la même méthodologie que l’import export des commentaires clients, nous allons voir à présent comment importer/ exporter les produits complémentaires.

Nous partons du postulat que nous créons un nouveau module « Module_Dataflow »
( les étapes de création du module ne seront pas détaillées )

Cette méthode fonctionne pour les éléments suivants :

  • Produits apparentés
  • Ventes incitatives
  • Ventes croisées

 

Voici le xml pour l’export des produits complémentaires

<action type="mymodule_dataflow/convert_parser_LinkedProducts" method="unparse">
<!-- Filtrage par produit <var name="product_id" >157</var> -->
<!-- Filtrage par type export ( upsell|crossel|related) defaut : upsell ) <var name="type">upsell</var> -->
</action>
<action type="dataflow/convert_mapper_column" method="map">
</action>
<action type="dataflow/convert_parser_csv" method="unparse">
<var name="delimiter"><![CDATA[;]]></var>
<var name="enclose"><![CDATA["]]></var>
<var name="fieldnames">true</var>
</action>
<action type="dataflow/convert_adapter_io" method="save">
<var name="type">file</var>
<var name="path">var/export</var>
<var name="filename"><![CDATA[exports-produits-complementaires.csv]]></var>
</action>

Voici le xml d’import des produits ( Le type d’import est déterminé par le nom des colonnes du fichier )

<action type="dataflow/convert_adapter_io" method="load">
<var name="type">file</var>
<var name="path">var/import</var>
<var name="filename"><![CDATA[produits complementaires.csv]]></var>
<var name="format"><![CDATA[csv]]></var>
</action>
<action type="dataflow/convert_parser_csv" method="parse">
<var name="delimiter"><![CDATA[;]]></var>
<var name="enclose"><![CDATA["]]></var>
<var name="fieldnames">true</var>
<var name="number_of_records">1</var>
<var name="decimal_separator"><![CDATA[.]]></var>
<var name="adapter">mymodule_dataflow/convert_parser_LinkedProducts</var>
<var name="method">parse</var>
</action>

Voici le code qui gère l’import

<?php
 
/**
* Import des produits apparentés
* Import des ventes incitatives
* Import des ventes croisées
*
*/
class MyModule_DataFlow_Model_Convert_Parser_LinkedProducts extends Mage_Eav_Model_Convert_Parser_Abstract {
 
 
 
public function parse() {
 
$batchModel = Mage::getSingleton('dataflow/batch');
 
$batchImportModel = $batchModel->getBatchImportModel();
$importIds = $batchImportModel->getIdCollection();
 
foreach ($importIds as $importId) {
$batchImportModel->load($importId);
$importData = $batchImportModel->getBatchData();
$this->saveRow($importData);
}
}
 
/**
* Import des données
* @param type $importData
*/
public function saveRow($importData) {
 
//En fonction du nom de la colonne  ( upsell_1 | related_1 | crossel_1 ) on détermine quel import doit être exécuté
if (array_key_exists('related_1', $importData)){
$mode = 'related';
$method = 'setRelatedLinkData';
}
else if (array_key_exists('crossel_1', $importData)) {
$mode = 'crossel';
$method = 'setCrossSellLinkData';
}
else {
$mode = 'upsell';
$method = 'setUpSellLinkData';
}
 
//Chargement du produit
$productId = Mage::getModel('catalog/product')->getIdBySku($importData['sku']);
 
if (!
3 commentaires

Magento : Traductions multilingues dans un même fichier

Voici un code qui vous permettra de traduire un template dans l’ensemble des langues du site dans une seule fonction.
C’est pratique notamment pour l’envoi de contenus emails traduits.

Dans le snippet ci-dessous la langue du template sera basé sur le store_id de la commande

foreach ( $orders as $order ) {
 
//Pour bien gérer la traduction on change le store en fonction de la commande
Mage::app()->setCurrentStore($order->getStoreId());  //Changement de store
$locale  = Mage::getModel('core/locale')->getLocaleCode(); // Récupération de la locale du store
Mage::app()->getTranslator()->setLocale($locale); // Définition de la locale pour la traduction
Mage::app()->getTranslator()->init('frontend', true);   //Réinitialisation du cache  de traduction
 
//Création du block qui sera traduit dans la  langue du store et stockage de son contenu dans une variable
$layout = Mage::getSingleton('core/layout');
$contenu =  $layout->createBlock('core/block')
->setTemplate('order.phtml')
->setData('order',$order)
->toHtml();
 
...
Pas de commentaires

Magento : Importer / Exporter les commentaires et les notes des produits via les profils avancés

Voici comment importer / exporter facilement les avis clients et leur notes associées sur la plateforme magento.
Nous partons du postulat que nous créons un nouveau module « Module_Dataflow »
( les étapes de création du module ne seront pas détaillées )

Pour réaliser nos actions nous allons utiliser les profils avancés d’import disponibles en standard sur la plateforme Magento.
Note : Cette version ne gère pas pour l’instant la mise à jour des commentaires existants

Voici le xml d’action pour l’export des commentaires

<action type="mymodule_dataflow/convert_parser_CustomerReviews" method="unparse">
<!--<var name="product_id"><![CDATA[21]]></var>-->
</action>
 
<action type="dataflow/convert_mapper_column" method="map">
</action>
 
<action type="dataflow/convert_parser_csv" method="unparse">
<var name="delimiter"><![CDATA[;]]></var>
<var name="enclose"><![CDATA["]]></var>
<var name="fieldnames">true</var>
</action>
 
<action type="dataflow/convert_adapter_io" method="save">
<var name="type">file</var>
<var name="path">var/export</var>
<var name="filename"><![CDATA[myCsvExportFile.csv]]></var>
</action>

Rien de très compliqué dans celui-ci :

dans le premier nœud « action » nous allons mettre en type notre modèle personnalisé et en méthode la méthode qui sera exécutée.…

Pas de commentaires

Prestashop : Installer des modules sans passer par l’administration

Voici un module Prestashop qui vous permettra d’installer un module en appelant directement une page web ( depuis un navigateur ou la ligne de commande )

Ceci peut être pratique dans le cas ou il est nécessaire de déployer un module sur de nombreux sites différents

Une fois les fichiers déposé par ftp sur l’hébergement concerné , il vous suffit d’appeller la page http://www.site.com/modules/eiinstallmodulescli/install_module.php?module_name=module_name et le module sera automatiquement installé.

Le code exécuté est des plus basiques :-p , mais de mon côté cela m’a déjà permis de gagner pas mal de temps 🙂

require_once(dirname(__FILE__).'/../../config/config.inc.php');
 
//Nom du module à installer
$module_name = Tools::getValue('module_name');
 
if ( $module_name ) {
 
	//Inclusion de la classe du module
	if ( ! is_file(dirname(__FILE__).'/../'.$module_name.'/'.$module_name.'.php' ) )
		die (' Erreur : Impossible d\'inclure le fichier du module');
 
	include_once ( dirname(__FILE__).
Pas de commentaires

Magento 1.4.1.1 : Correction de la recherche des promotions par identifiant

Voici un correctif pour un bug de la version 1.4.1.1 de Magento ( Oui je sais c’est une vieille version mais il existe des sites qui l’utilisent encore … )
Lorsque vous souhaitez rechercher une règle de promotion par identifiant, vous obtenez une belle erreur fatale.
Donc le message d’erreur est le suivant :

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'rule_id' in where clause is ambiguous

Pour corriger cette erreur nous allons copier le fichier app/code/core/Mage/Adminhtml/Promo/Quote/Grid.php dans le dossier app/code/local/Mage/Adminhtml/Promo/Quote/Grid.php

Puis dans la fonction _prepareColumns éditer les paramètres du champ rule id

 $this->addColumn('rule_id', array(
            'header'    => Mage::helper('salesrule')->__('ID'),
            'align'     =>'right',
            'width'     => '50px',
            'index'     => 'rule_id',
            'filter_index' => 'main_table.rule_id', // Ajout d'un filtre index pour corriger la recherche
        ));

La recherche est à présent corrigée 🙂…

Pas de commentaires

Mantis Bugtracker : Changer rapidement l’état de bugs

Petit rappel pratique sur Mantis Bugtracker voici comment changer rapidement l’état de plusieurs bugs de « public » à « privé » via les actions de masse.

Pour commencer rendez-vous sur la page « Mon Affichage »

Sélectionner les bugs pour lesquels vous souhaitez changer l’état
Dans le menu des actions sélectionner « Mettre à jour l’état de l’affichage »

mantis-maj-etat-1

Sélectionner ensuite l’état que vous souhaiter appliquer à ces bugs ( Public / Privé )

mantis-maj-etat-2

Et voila le statut de l’ensemble des bugs est bien changé 🙂…

Pas de commentaires


Compte Github