Magento installer un module manuellement

Il y a deux façons d’installer un module magento, via la console d’aministration avec Magento Connect (il vous faudra créer un compte), copier l’url à coller dans votre console, et procéder à l’installation.

Mais si cela semble facile, en réalité on peut être confronté à beaucoup de cas d’échec.

Magento SSL Connector error

Ceci est du à une version de SSL sur certaine distributions de Linux. Vous êtes sans doute en sslv3 au lieu de tlsv1. vous ne pouvez donc pas tout simplement installer via la console. Mais pas de panique, il existe un site qui vous permet de télécharger le module sous forme zippée et de l’installer manuellement.

Aller sur http://freegento.com/ddl-magento-extension.php et collez-y la clé d’installation du module récupéré sur MagentoConnect.

 

Magento Downloader 1.9.2 unknown cipher list

Magento utilise Curl pour télécharger le module, il y a une ligne qui va setter le protocole de chiffrage, le fichier downloader/lib/Mage/HTTP/Client/Curl.php à la ligne 377 pour magento 1.9.2,

 //$this->curlOption(CURLOPT_SSL_CIPHER_LIST, 'TLSv1')

Commenter la ligne ci-dessus et c’est bon.

En fait vous allez voir cette erreur avant la première, qui résulte de la mise en commentaire de la ligne 377.

Magento module invisible après installation

Si vous n’avez pas désactivé les caches (il y en a plusieur dans Magneto), votre module peut être invisible, donc nettoyez les caches et reloadez la page d’administration. Pour activer/désactiver les modules allez dans Système / Configuration / Avancé en bas de la page.

0 comments

Magento : enlever le index.php de l’url

magento

Par défaut, si lors de l’installation de Magento, vous n’avez pas coché l’option rewrite_url, vos urls auront “index.php” juste après le nom de domaine. Pour l’enlever, car ce n’est pas très beau, il faut au préalable que mod_rewrite (un module Apache pour réécrire les urls) soit installé.

Une fois ce prérequis rempli, vous allez dans System > Configuration, puis sous General > Web, dans la section Search Engine Optimization, pour la dropdown list mettez sur ‘Yes’. Rafraichissez votre page administration et frontend.

0 comments

Les bloc statiques dans Magento

Les blocs statiques ne sont rien d’autre que des bout de code HTML qui sont utiles pour des bannières temporaires, des bloc promotion, politique de retoure, table de tailles entre autres.

 

Comment créer un bloc statique dans Magento

Dans l’onglet CMS > Static Blocks tous les blocs sont listés ici, mais les modules ou thèmes que vous installez peuvent en ajouter d’autres.

Donnez un nom évocateur, un identifiant qui doit respecter les guidelines de Magento nom_du_block, choisir la vue à laquelle le block appartient. Vous pouvez laisser l’association à toutes les vues. setter le statut à Enabled.

Dans l’éditeur WYSIWYG ou source, mettez votre code.

 

Comment faire fonctionner votre bloc statique méthode XML?

Coller le code d’insertion directement dans le fichier xml de thème. app > design > frontend > default > your_theme > layout ,

0 comments

Magento Multiboutique et multidomaines

Magento c’est bien connu vous permet d’avoir plusieurs boutiques. Mais d’abord voyons la terminologie de Magento :

 

 

Global : c’est l’installation de votre logiciel Magento, il n’y en a qu’un.

Par défaut vous n’avez qu’un site. Dans le cas où vous avez plusieurs sites, comment pouvons nous différencier dans la barre d’adresse les différents sites web?

 

0 comments

Magento méthode getModel()

La méthode getModel() est abondamment utilisée dans le code Magento, et surtout dans les modules customs.

Utiliser getModel pour lire des information d’entité

 

Elle est une des méthode statique de l’objet Mage, défini dans le fichier Mage.php, dans la classe Mage.

Elle est utile pour lire des données des entités telles customer, sales, catalog.

Par exemple, pour lire les données du client N° 88, on fera :

$customer = Mage->getModel(‘customer/customer’);

$result = $customer->load($id);

var_dump($result);

 

Différence entre getSingleton() et getModel()

 

getSingleton() regarde si un modèle est déjà créé; si oui il va retourner le modèle déjà instancié, sinon il va créer une nouvelle instance de la classe et le retourne.

getModel() va dans toutes les situation vous retouner une nouvelle instance.

0 comments

Magento les thèmes de base,default et RWD c’est quoi?

Dans le répertoire Design de l’installation Magento, il ya 3 paquets de thèmes différents, à quoi servent-ils?

Terminologie des paquet de thème dans Magento

Un paquet (package en anglais) regroupe plusieurs thèmes, donc il ne représente pas un thème à lui tout seul, les thèmes sont dans dans un niveau en dessous.

D’ailleurs dans le panneau d’administration, il y a la page Design, le premier block est Package et en dessous il y a le bloc Thème, il vous faut changer un des deux ou les deux pour changer de thème.

Le thème Magento Base

Ce thème est vriament le Core, il ne faut pas y toucher.

 

Le package Magento Default

C’est le thème par défaut de Magento non responsif.

Le package Magento RWD

C’est aussi le thème par défaut de Magento mais il est plus récent historiquement, il est responsif (Responsive Web Design).

 

0 comments

Magento charger des données du client

Charger les données du client (customer) avec getSingleton()

$customer = Mage::getSingleton(‘customer/customer’)->load($idclient);

Lire l’email du client :

getData() permet de lire une propriété d’un objet.

$email = $customer->getData(’email’)

 

Méthode magique (en utilisant __call de Php)

 

$email = $customer->getEmail();

$entity_id = $customer->getEntityId();

dans les méthodes magiques, on passe en CamelCase pour le nom du getter.

 

Charger les données du client (customer) avec getModel()

 

$customer = Mage::getModel(‘customer/customer’)->load($idclient);

Ensuite même topo avec getData() que ci-dessus.

0 comments

Optimiser Mysql avec Mysqltuner

Une installation de base de Mysql n’est pas optimisé pour votre ou vos sites web.

Aussi après un certains temps de fonctionnement, une heure par exemple, vous devez commencer à régler les paramètres de Mysql pour que Mysql aille plus vite.

Nous allons nous aider d’un programme en Perl Mysqltuner, que vous allez télécharger depuis votre shell via la commande suivante :

$ wget http://mysqltuner.pl/ -O mysqltuner.pl

$ perl mysqltuner.pl

Au bout de quelques instants Mysqltuner va vous sortir un rapport avec des recommandation. Ce sont de réglages à faire dans votre fichier my.cnf qui est le fichier de configuration de Mysql.

Voici un exemple de rapport généré :

[!!] User ‘@localhost’ is an anonymous account.
[!!] User ‘@ns35.ovh.net’ is an anonymous account.
[!!] User ‘@localhost’ has no password set.
[!!] User ‘@ns35.ovh.net’ has no password set.
[!!] User ‘root@127.0.0.1’ has no password set.
[!!] User ‘root@ns35.ovh.net’ has no password set.
[!!] User ‘@localhost’ has user name as password.
[!!] User ‘@ns35.ovh.net’ has user name as password.
[!!] There is no basic password file list!

——– CVE Security Recommendations ————————————————————–
[–] Skipped due to –cvefile option undefined

——– Performance Metrics ———————————————————————–
[–] Up for: 4d 12h 12m 30s (89M q [228.694 qps], 20M conn, TX: 582G, RX: 4G)
[–] Reads / Writes: 78% / 22%
[–] Binary logging is disabled
[–] Physical Memory     : 1.9G
[–] Max MySQL memory    : 449.2M
[–] Other process memory: 518.0M
[–] Total buffers: 34.0M global + 2.7M per thread (151 max threads)
[–] P_S Max memory usage: 0B
[–] Galera GCache Max memory usage: 0B
[OK] Maximum reached memory usage: 141.2M (7.12% of installed RAM)
[OK] Maximum possible memory usage: 449.2M (22.64% of installed RAM)
[OK] Overall possible memory usage with other process is compatible with memory available
[OK] Slow queries: 0% (22/89M)
[OK] Highest usage of available connections: 25% (39/151)
[OK] Aborted connections: 0.00%  (65/20403660)
[!!] name resolution is active : a reverse name resolution is made for each new connection and can reduce performance
[!!] Query cache is disabled
[OK] Sorts requiring temporary tables: 0% (1K temp sorts / 4M sorts)
[!!] Joins performed without indexes: 296569
[OK] Temporary tables created on disk: 9% (90K on disk / 958K total)
[!!] Thread cache is disabled
[!!] Table cache hit rate: 0% (64 open / 299K opened)
[OK] Open file limit used: 12% (127/1K)
[OK] Table locks acquired immediately: 99% (32M immediate / 32M locks)

 

Remove Anonymous User accounts – there are 2 anonymous accounts.
Set up a Password for user with the following SQL statement ( SET PASSWORD FOR ‘user’@’SpecificDNSorIp’ = PASSWORD(‘secure_password’); )
Set up a Secure Password for user@host ( SET PASSWORD FOR ‘user’@’SpecificDNSorIp’ = PASSWORD(‘secure_password’); )
Enable the slow query log to troubleshoot bad queries
Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=1
Adjust your join queries to always utilize indexes
Set thread_cache_size to 4 as a starting value
Increase table_open_cache gradually to avoid file descriptor limits
Read this before increasing table_open_cache over 64: http://bit.ly/1mi7c4C
Beware that open_files_limit (1024) variable
should be greater than table_open_cache (64)
Variables to adjust:
query_cache_size (>= 8M)
join_buffer_size (> 128.0K, or always use indexes with joins)
thread_cache_size (start at 4)
table_open_cache (> 64)
innodb_file_per_table=ON
innodb_log_file_size should be equals to 1/4 of buffer pool size (=2M) if possible.

Regardez les point d’exclamations, ce sont les point à travailler ! Mais tous les point n’ont pa s la même importance selon ce que vous recherchez. Moi je cherche la performance, voici ce que je regarde de ce rapport :

Ce qui saute aux yeux c’est query cache qui n’est pas activé !! Le cache stocke les requêtes qui sont les plus utilisée, afin de ne pas taper dans le moteur de base de données Mysql, mais sur un résultat déjà calculé donc on gagne du temps.

Voyons comment on peut soigner ce point :

Vous aurez remarqué qu’une des recommandations est de logger les requêtes lents via le slow query log. Pour ce faire, on va mettre en action le slow query log .

Ensuite nous allons donner une taille au cache de 8 Mo comme suggéré.

D’abord il faut se connecter à Mysql en ligne de commande.

Ensuite pour connaitre l’existence d’un query cache :

mysql > SHOW VARIABLES LIKE ‘have_query_cache’;

+——————+——-+
| Variable_name    | Value |
+——————+——-+
| have_query_cache | YES   |
+——————+——-+

Selon la documentation officielle ce n’est pas parce que c’est à YES qu’il existe !

mysql> SHOW VARIABLES LIKE ‘query_cache_size’;

+——————+——-+
| Variable_name    | Value |
+——————+——-+
| query_cache_size | 0     |
+——————+——-+

Enfin il existe mais est à zéro. Donnons lui une taille :

mysql> SET GLOBAL query_cache_size = 8000000;

 

+——————+———+
| Variable_name    | Value   |
+——————+———+
| query_cache_size | 7999488 |
+——————+———+

voilà c’est en place ! Attendre un petit peu suivant le traffic de votre site web.

 

Attention ! ceci est à faire dans le fichier my.cnf, sinon quand vous allez redémarrer mysql, ça va disparaitre. Voilci quelques valeur recommandées :

query_cache_type = 1 // pour activer le cache
query_cache_size = 256M
query_cache_limit = 2M
query_cache_strip_comments =1

 

 

 

 

0 comments

Les sous modules dans Git

UPDATE :

N’utilisez pas les sous module GIT, ils sont d’un usage délicat, googlez le sujet, vous verrez des blogs qui votent contre. Préférez cloner dans un sous répertoire et ignorer ce sous-répertoire.

 

Lorsque vous développez un module pour Prestashop ou Magento, les fichiers se logent dans un sous répertoire de la solution. Si en même temps vous devez versionner la solution globale, et le module, mais que vous voulez gérer deux dépôts Git différent, pour pouvoir par exemple distribuer le module indépendamment plus tard, la solution qui s’offre est la gestion des sous-modules de git.

 

Vous avez votre module dans une répertoire quelconque, et vous avez déjà versionné les scripts.

Vous allez dans un sous-répertoire de la solution globale, et vous clonez le dépôt du module :

$ git clone git@github.com:gituser/module.git

 

0 comments

Apache logs, et Logrotate

Qu’est ce que c’est que les logs Apache?

 

Les logs ou fichiers de journalisation en français sont des fichiers texte qui enregistrentent des événements d’une application. On enregistre les événement de type erreur dans les errors log, les événement de démarrage (bootlog), et d’autres dans des fichiers plus spécifiques.

Dans le cas de notre serveur Apache, nous avons les logs des visites sur notre site web.

Qu’est ce qu’on enregistre comme information dans les visites sur Apache?

Il y a deux types de visiteurs,  les visiteurs humains et les robots des moteurs de recherche (et parfois d’autres robots de services plus spécifique).

Vous pouvez paramétrer ce que vous enregistrez dans les logs, dans le dossier de configuration httpd.conf, deux types de logs sont proposés, combined et common.

Voici un extrait :

LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
LogFormat “%h %l %u %t \”%r\” %>s %b” common

Une fois que les logs sont paramétrés, il faut indiquer lequel vous voulez utiliser, le combined ou le common.

C’est avec la direective CustomLog :

CustomLog “c:/wamp/logs/access.log” combined

 

Pour les sites web en général, on utilise la combined, ce dernier a la particularité d’enregistrer le Refere (qui est le site web d’origine de la visite juste avant sur votre site web), et le user agent qui donne le type de logiciel qui vous rend visite (un navigateur classique comme Firefox, Chrome pour un humain, et si c’est un moteur de recherche, vous aurez un nom de bot).

Attention aux fichiers de logs Apache qui grossissent !

Chaque visite sur votre site génère une ou plusieurs lignes de texte, et le fichiers peut grossir très vite en fonction de  l’audience de votre site web. Et quand le fichier atteint plusieurs giga octets, c’est problématique.  La solution c’est de générer un  nouveau fichier régulièrement pour éviter ce problème. Par exemple on peut généer un nouveau fichier toutes les semaine, ou tous les jours, afin d’avoir des fichiers d’une taille raisonnable.

Pour ce faire on déclarer une “rotation” des logs, avec le programme logrotate. Si vous développez sous WAMP sous Windows, le programme s’appelle toujours logrotate (rotatelogs.exe plus exactement).

Voici un exemple de configuration pour WAMP de logrotate :

ErrorLog “|bin/rotatelogs.exe -l C:/Wamp/www/votresite.com/errorlog.%Y-%m-%d.txt 86400”
CustomLog “|bin/rotatelogs.exe -l C:/Wamp/www/votresite.com/accesslog.%Y-%m-%d.txt 86400” combined
CustomLog “|bin/rotatelogs.exe -l C:/Wamp/www/votresite.com/deflatelog.%Y-%m-%d.txt 86400” deflate

 

 

 

0 comments