Variables et conditions utiles sous Magento

Dans: Magento

11 avr 2012

Sous Magento, il n’y a pas de réelle base de connaissance. Si vous voulez détecter le cas où vous êtes sur la page d’accueil ou sur une page éditoriale, il n’y a pas de is_home(), ou is_page() comme sur un CMS comme WordPress.

De même que récupérer des variables en front-office, il est nécessaire d’aller voir dans les fichiers Mage pour découvrir certaines valeurs assez utiles :

Variables :

  1. URL de la page courante
  2. URL des images et des CSS
  3. URL des dossiers de base
    1. URL de la racine
    2. URL des liens (utile en multi-domaine)
    3. URL du dossier des JS
    4. URL du dossier des medias
    5. URL du dossier des skins
  4. URL spécifiques
    1. URL du compte client
    2. URL du panier
    3. URL du tunnel de commande
    4. URL de la page de connexion
    5. URL de la page de déconnexion
    6. URL du mot de passe perdu
  5. Catégories
    1. URL d’une catégorie (via son id)
    2. Description d’une catégorie (via son id)
    3. Nom d’une catégorie (via son id)
    4. Catégorie courante
    5. Id de la catégorie courante
    6. Id du parent d’une catégorie (via son id)
    7. Id de la catégorie principale (root)
  6. Page CMS
    1. Nom de la page CMS courante
    2. Identifiant (clef-URL) de la page CMS courante
    3. Id de la page CMS courante
    4. Contenu d’une page CMS
  7. Blocs statiques CMS
    1. Contenu d’un bloc statique
    2. Titre d’un bloc statique
  8. Listing des pages CMS et des blocs statiques
  9. Titre de la catégorie voulue
  10. Variables d’administration
    1. Le numéro de téléphone du magasin
    2. Autres
  11. Panier
    1. Récupérer le montant total du panier
    2. Récupérer le nombre d’articles différents du panier
    3. Récupérer le nombre d’articles au total du panier
    4. Parcourir tous les articles du panier
    5. Ajouter un article au panier
    6. Enlever un article du panier
    7. Ajouter un lien « Ajouter au panier »
  12. Website / Store group / Store view

Fonctions :

  1. Formater un nombre en devise
  2. Retourner la date actuelle

Conditions :

  1. Si on se trouve sur la page d’accueil
  2. Si on se trouve sur une page CMS (éditoriale)
  3. Si l’utilisateur est loggué
  4. Si un administrateur est loggué
  5. Si la catégorie courante est une catégorie de niveau 1
  6. Relatives à un produit :
    1. Si c’est un produit configurable
    2. Si c’est un produit groupé
    3. Si un produit est vendable
    4. Si un produit est visible dans le catalogue
    5. Si un produit est activé
    6. (combo) Si un produit est « vraiment » vendable

Edit :

  • 08/02/10 : Titre d’un bloc statique CMS
  • 28/02/10 : Détection page accueil @ Magento >= 1.4
  • 01/03/10 : Si un administrateur est loggué
  • 17/05/10 : URL d’une catégorie (via son identifiant)
  • 18/05/10 : Description d’une catégorie (via son id)
  • 18/05/10 : Nom d’une catégorie (via son id)
  • 07/07/10 : Catégorie courante
  • 07/07/10 : Id de la catégorie courante
  • 07/07/10 : Id du parent d’une catégorie (via son id)
  • 07/07/10 : Id de la catégorie principale (root)
  • 07/07/10 : Si la catégorie courante est une catégorie de niveau 1
  • 07/07/10 : Niveau dans l’arborescence
  • 15/09/10 :  Si c’est un produit configurable
  • 26/12/10 : Le numéro de téléphone du magasin
  • 04/01/11 : Formater un nombre en devise
  • 06/01/11 : Retourner la date actuelle
  • 23/02/11 : Contenu d’une page CMS
  • 21/11/11 : Url du tunnel de commande
  • 13/12/11 : Website / Store group / Store view
  • 11/04/12 : Re-publication de l’article, il a bien changé depuis 2009 !

Variables :

1) URL de la page courante

Retourne : http://www.monsite.com/ (si page d’accueil)
Retourne : http://www.monsite.com/mon-produit.html (si sur une page d’un produit)

$this->helper('core/url')->getCurrentUrl();

2) URL des images et des CSS : Avoir une URL formaté pour éviter d’être dépendant du thème

Retourne : http://monsite.com/skin/frontend/{votre_interface}/{votre_theme}/images/zoom.gif

$this->getSkinUrl('images/zoom.gif');

3) URL des dossiers de base

1 – URL de la racine => http://monsite.com/

Mage::getBaseUrl(Mage_Core_Model_Store:: URL_TYPE_WEB)

2 – URL des liens => http://mobile.monsite.com/ (si multi-domaine, mais les images au même endroit)

Mage::getBaseUrl(Mage_Core_Model_Store:: URL_TYPE_LINK);

3 – URL du dossier des JS => http://monsite.com/js/

Mage::getBaseUrl(Mage_Core_Model_Store:: URL_TYPE_JS);

4 – URL du dossier des medias => http://monsite.com/media/

Mage::getBaseUrl(Mage_Core_Model_Store:: URL_TYPE_MEDIA);

5 – URL du dossier des skins => http://monsite.com/skin/

Mage::getBaseUrl(Mage_Core_Model_Store:: URL_TYPE_SKIN);

4) URL spécifiques

1 – URL du compte client

$this->helper('customer/data')->getAccountUrl();

2 – URL du panier

 $this->helper('checkout/url')->getCartUrl();

3 – URL du tunnel de commande

 $this->helper('checkout/url')->getCheckoutUrl();

4 – URL de la page de connexion

$this->helper('customer/data')->getLoginUrl();

5 – URL de la page de déconnexion

$this->helper('customer/data')->getLogoutUrl();

6 – URL du mot de passe perdu

$this->helper('customer/data')->getForgotPasswordUrl();

5) URL d’une catégorie (via son identifiant)

Exemple ici :

Catégorie « Mes produits » ayant l’identifiant : 2 et l’URL : « mes-produits.html » et la description « Description de la catégorie

1 – URL d’une catégorie (via son id)

Retourne « mes-produits.html »

Mage::getModel("catalog/category")->load(2)->getUrl();

2 – Description d’une catégorie (via son id)

Retourne « Description de la catégorie »

Mage::getModel("catalog/category")
			->load(2)
			->getData("description");

3 – Nom d’une catégorie (via son id)

Retourne « Description de la catégorie »

Mage::getModel("catalog/category")
			->load(2)
			->getData("name");

4 – Catégorie courante

Récupère la catégorie en courante

$_cat = Mage::registry('current_category');

5 – Id de la catégorie courante

Retourne l’identifiant de la catégorie (exemple : 13)

$_cat->getId();

6 – Id du parent d’une catégorie (via son id)

Retourne l’identifiant de la catégorie parente (Exemple : 4)

$_cat->getParentId();

7 – Id de la catégorie principale (root)

Retourne l’identifiant de la 1ère catégorie (Default Category) Exemple : 2

Mage::app()->getStore()
			->getRootCategoryId();

8 – Niveau dans l’arborescence

Retourne le niveau de la catégorie (Exemple : 2)

$_category->getLevel();

6) Page CMS

1 – Nom de la page CMS courante

Retourne : Qui-sommes-nous ? (Le nom de la page CMS)

Mage::getSingleton('cms/page')->getTitle();

2 – Identifiant (clef-URL) de la page CMS courante

Retourne : qui-sommes-nous (l’identifiant de la page)

Mage::getSingleton('cms/page')->getIdentifier();

3 – Id de la page CMS courante

Retourne : 2 (l’ID)

Mage::getSingleton('cms/page')->getId();

4 – Contenu d’une page CMS

Mage::getModel('cms/page')
		->setStoreId(
			Mage::app()->getStore()
						->getId())
						->load('id_page')
		->getContent();

7) Blocs statiques CMS

1 – Contenu d’un bloc statique

$this->getLayout()
		->createBlock('cms/block')
		->setBlockId('id_block')
		->toHtml();

2 – Titre d’un bloc statique

Mage::getModel('cms/block')
		->setStoreId(
			Mage::app()->getStore()
						->getId())
						->load('id_block')
		->getTitle();

8) Listing des pages CMS et des blocs statiques

9) Titre de la catégorie voulue

Retourner le nom de la catégorie

$idCategorie = 8;
$_helper = $this->helper('catalog/output');
$cat_courante = Mage::getModel('catalog/category')
					->load($idCategorie);
echo $_helper->categoryAttribute(
	$cat_courante,
	$this->htmlEscape($cat_courante->getName()), 'name');

10) Variables d’administration

1 – Le numéro de téléphone du magasin

Mage::getStoreConfig('general/store_information/phone')

2 – Autres

Voir les identifiants des groups depuis Firebug par exemple. Vous pouvez retrouver l’intégralité des données de Système > Configuration.
Vous pouvez aussi chercher dans la table core_config_data (une fois que vous avez déjà enregistré une fois la page de configuration voulue)

11) Panier

Jouer avec le panier de Magento

12) Website / Store group / Store view

Récupérer les informations relatives à la vue courante (et donc au magasin et au site web courant)
Website Id : 1

Mage::app()->getWebsite()->getId();

Website Name : My Website

Mage::app()->getWebsite()->getName();

Store Group Id : 4

Mage::app()->getStore()->getGroup()->getId();

Store Group Name : My Store name

Mage::app()->getStore()->getGroup()->getName();

Store ID : 4

Mage::app()->getStore()->getId();

Store View Code : default

Mage::app()->getStore()->getCode();

Store View Name : My Store view name

Mage::app()->getStore()->getName();

Pour lister les vues (store view) :

$stores = Mage::getModel('core/store')->getCollection();
foreach($stores as $store) {
	Mage::log($store->getData()
}

Pour lister les sites (websites) :

$websites = Mage::getModel('core/website')->getCollection();
foreach($websites as $website) {
	Mage::log($website->getData()
}

Fonctions :

1) Formater un nombre en devise

Méthode 1

Mage::helper('checkout')->formatPrice(99.99);

Méthode 2

Mage::app()->getStore()
		->getBaseCurrency()
		->format(99.99, array(), true);

Juste le symbole de la devise courante

// Renvoi €
Mage::app()->getLocale()->currency(Mage::app()->getStore()->getCurrentCurrencyCode())->getSymbol()

Le symbole de la devise voulue

Mage::app()->getLocale()->currency('EUR')->getSymbol();

2) Retourner la date actuelle

Date Magento

// Renvoi 2012-03-09 15:08:52
Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT)

Date Formatée

date(
	"Y-m-d G:i:s",
	Mage::getModel('core/date')->timestamp(time()
	);

Date Timestamp

Mage::getModel('core/date')->timestamp(time());

Conditions :

1) Si on se trouve sur la page d’accueil

a) Magento < 1.4

if ($this->helper('core/url')->getCurrentUrl()
		== Mage:: getBaseUrl (Mage_Core_Model_Store:: URL_TYPE_WEB))

b) Magento => 1.4

if(Mage::getSingleton('cms/page')->getIdentifier()
		== Mage::getStoreConfig('web/default/cms_home_page'))
if ($this->getIsHomePage()):
// Depuis le template page/html/header.phtml

2) Si on se trouve sur une page CMS (éditoriale)

if(Mage::getSingleton('cms/page')->getId()):

A noter que la page d’accueil est une page CMS.

3) Si l’utilisateur est loggué

if ($this->helper('customer/data')->isLoggedIn())

4) Si un administrateur est loggué

Mage::getSingleton("core/session", array("name" => "adminhtml"));
if(Mage::getSingleton("admin/session")->isLoggedIn() ):

5) Si la catégorie courante est une catégorie de niveau 1

Une catégorie de 1er niveau pour le client n’est pas sa première étape du catalogue, mais la catégorie principale de Magento (Root Category).

Donc c’est le niveau 2.

level 1) Root

level 1) level 2) Cat 1

level 1) level 2) Cat 2

level 1) level 2) level 3) Cat 2 – 1

level 1) level 2) level 3) Cat 2-2

Retourne le niveau de la catégorie

$_category->getLevel();

Si c’est une catégorie principale

 if( $_category->getLevel() == 2 ):

Ou alors, vous avez une autre méthode plus stricte :

if( $_category->getParentId() == Mage::app()->getStore()->getRootCategoryId() ):

6) Relatives à un produit :

Les méthodes de conditions importantes se trouvant dans : « app/code/core/Mage/Catalog/Model/Product.php

1 – Si c’est un produit configurable

if( $_product->isConfigurable() ):

2 – Si c’est un produit groupé

if( $_product->isGrouped() ):

3 – Si un produit est vendable

Pour Magento, un produit est vendable si :

  • Le produit est activé
  • Le produit est en stock (Quantité)
  • Le produit n’a pas l’attribut « disponibilité » à « épuisé »
if( $_product->isSaleable() ):

4 – Si un produit est visible dans le catalogue

Si l’attribut « Visibilité » est sur « Catalogue » (ou « Catalogue, Recherche »)

if( $_product->isVisibleInSiteVisibility() ):

5 – Si un produit est activé

Si l’attribut « Statut » est sur « Activé »

if( $_product->VisibleInCatalog() ):

6 – (combo) Si un produit est « vraiment » vendable

Donc un produit est vraiment vendable si :

  • Le produit est « vendable » (point 3)
  • Le produit est visible (point 4)
  • Le produit est activé (point 5)
  public function isAvailable($_product) {
        $available = (
                $_product->isVisibleInSiteVisibility() &&
                $_product->isVisibleInCatalog() &&
                $_product->isSaleable()
                );
        return $available;

21 Commentaires pour Variables et conditions utiles sous Magento

Avatar

Philippe

janvier 3rd, 2010 à 14 h 41 min

Très bon article, très complet : Merci!

Avatar

Quentin

juin 1st, 2010 à 17 h 40 min

Comment pourrais-je utiliser la condition « utilisateur logué » dans un bloc statique à partir du backend de Magento?

Avatar

Quentin

juin 2nd, 2010 à 10 h 05 min

Je viens de trouver ma réponse, il ne faut pas s’embêter avec le backend!^^

Avatar

Thomas

juillet 8th, 2010 à 12 h 18 min

Très très bon article, en effet.

Merci.

Avatar

mendes

janvier 26th, 2011 à 19 h 10 min

Bonjour,

Comment faire pour adresser un email par « Email Reminder Rule » ?
Ma segmentation a bien été effectuée ainsi que ma règle de prix panier…
Merci d’avance pour votre retour,
Cordialement,
Johanna

Avatar

martin

décembre 28th, 2011 à 13 h 44 min

Avant tout merci pour votre site qui m’est très utile dans mon travail,

Pour détecter la page d’accueil, l’inconvénient de :

if ($this->getIsHomePage()):

est qu’il n’est utilisable uniquement dans header.phtml.

et pour

if($this->helper('core/url')->getCurrentUrl()==Mage::getBaseUrl(Mage_Core_Model_Store:: URL_TYPE_WEB)):

je pense que c’est incomplet car l’url de la page d’accueil peut être :
exemple.com
exemple.com/
exemple.com/index.php
exemple.com/index.php/
exemple.com/home
exemple.com/home/ (ou autre que « home » si la « clé URL » a été modifiée).

personnellement pour détecter la page d’accueil j’utilise :

if(Mage::getSingleton('cms/page')->getIdentifier()=="home"){
echo "je suis sur la page d'accueil";
}
else{
echo "je ne suis pas sur la page d'accueil";
}

Simple et efficace à mon avis ;
on compare si la « clé URL » de la page CMS ouverte est égale à « home » (« home » est la clé URL par défaut de la page d’accueil il me semble), et cela marche dans les autres fichiers que header.phtml.

ou encore :

if(Mage::getSingleton('cms/page')-&gt;getId()==2){
echo "je suis sur la page d'accueil";
}
else{
echo "je ne suis pas sur la page d'accueil";
}

on compare si l’ID de la page CMS ouverte est égale à 2 (2 est l’id de la page d’accueil il me semble).

Avatar

Frédéric Martinez

janvier 4th, 2012 à 20 h 09 min

Il est exact que la fonction indiquée ne fonctionne que dans un template appelé par Mage_Page_Block_Html_Header.

Vous pouvez appeler votre template par ce block, ou par votre block qui hérite (extends) celui-là, ou recréer la fonction dans votre block, ou carrément dans un helper afin de l’utiliser aussi dans vos controllers.

La fonction normalement appelée est celle-ci :

if($this->getUrl('') ==
	$this->getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true)))

Votre idée par les singletons marche aussi, mais il vaut mieux vérifier avec la clef d’URL, et non l’ID, car dans une configuration multilangue basique, vous aurez vos pages d’accueil qui auront le même identifiant mais des ID différents.

Le mieux du coup est de se baser sur l’identifiant, et encore mieux sur le champ en back-office où nous pouvons choisir notre page d’accueil : Système > Configuration > Général > Web > Page par défaut > Page d’accueil CMS.

Ainsi vous pouvez comparer votre singleton avec la configuration « web/default/cms_home_page » comme ceci :

if(Mage::getSingleton('cms/page')->getIdentifier() ==
	Mage::getStoreConfig('web/default/cms_home_page'))

Ainsi vous êtes sûr de savoir si vous êtes sur la page d’accueil ou non !

Avatar

Jordan

juin 6th, 2012 à 15 h 43 min

Bonjour à tous,

je souhaiterai savoir si il était possible et si oui comment, modifier le texte par défaut de magento « Ce champ est obligatoire. » j’ai modifier Mage_Adminhtml.csv, Mage_Api.csv et Mage_Core.csv

Malheureusement rien ne change, avez-vous une idée pour modifier le texte par défaut de magento ?

Merci à vous.

Avatar

Variables et conditions utiles sous Magento | Blog Cercle-ecommerce

novembre 14th, 2012 à 21 h 43 min

[...] Variables et conditions utiles sous Magento This entry was posted in Infos E-Commerce and tagged base, cas, CMS, condition, front-office, [...]

Avatar

Olivier

février 6th, 2013 à 15 h 15 min

Bonjour, je souhaiterai recuperer si un paiement à été effectué ou annuler, par exemple

Si paiement effectué : une action
Sinon une autre

Mais je n’arrive pas à trouver cette info, avez vous une idée?

Merci ;-)

Avatar

Frédéric Martinez

février 6th, 2013 à 15 h 23 min

@Olivier
Je dirais dans le model de l’order.
Quand tu as ton order chargée :

$order = Mage::getModel('order/order')->load(1234);

tu peux récupérer son statut avec je pense :

$order->getStatus();

Vu que je n’ai pas la colonne en tête, affiche tout avec :

$order->getData();

Avatar

Olivier

février 6th, 2013 à 19 h 31 min

En fait, j’ai des actions qui se font par dans un observer au moment ou le client quitte le site pour aller sur celui de paypal, donc même si le paiement est refusé, il beneficit de ces action alors que j’aimerais qu’elle ce produisent apres avoir payé

Avatar

Olivier

février 6th, 2013 à 19 h 31 min

merci, mais en fait, j’ai des actions qui se font par dans un observer au moment ou le client quitte le site pour aller sur celui de paypal, donc même si le paiement est refusé, il beneficit de ces action alors que j’aimerais qu’elle ce produisent apres avoir payé

Avatar

Frédéric Martinez

février 6th, 2013 à 19 h 34 min

@Olivier
Après ce traitement, tu dois l’appliquer toutes les X heures ou minutes.
Pour cela tu mets ton traitement dans un model (ton Observer par exemple), et tu appelles cette method via un cron :

<config>
...
    <crontab>
        <jobs>
            <catalogrule_apply_all>
                <schedule><cron_expr>0 1 * * *</cron_expr></schedule>
                <run><model>catalogrule/observer::dailyCatalogUpdate</model></run>
            </catalogrule_apply_all>
        </jobs>
...
    </crontab>
...
</config>

Avatar

Olivier

février 6th, 2013 à 19 h 47 min

à ce que j’en comprend, ca utilise l’observer « sales_order_place_after », donc le comportement est normal mais ne me convient pas parce que je voudrait que l’event ce produise si le paiement est passé, pas si la commande est passé.

Par quoi je pourrait remplacer ça pour que ca ce déclenche lorsque le paiement est reçu?

J’ai essayé « sales_order_payment_pay » mais ça n’est pas concluant, mes commandes restent en pending.

Avatar

Frédéric Martinez

février 6th, 2013 à 22 h 39 min

@Olivier

Justement, moi je ne me cable sur aucun évènement.

C’est le Cron qui mouline et qui traite tes informations, cela permet de toujours prendre les commandes même si le client a fermé le navigateur après avoir payé sur la page de la banque.

Si event (je ne les connais pas tous ;-)), tu peux aussi essayer les events universels qui existent sur tous les objets Magento.
Tu prends : « sales_order_save_after » (un truc dans le genre). Ensuite, tu pourras sans douter identifier le changement causé par la banque. (sales_order_save_before existe aussi).

Avatar

Paulo

février 21st, 2014 à 17 h 39 min

Super tuto, bravo ! Je pense que ça en a aidé plus d’un.

Je me demandais s’il existait une condition pour retourner si le produit possede un attribut ou pas ?

Ex : Si l’attribut « color » est sur « Red »

Je n’ai pas trouvé en cherchant.

Merciiii !

Avatar

Frédéric Martinez

février 21st, 2014 à 20 h 25 min

@Paulo : Pour l’existence d’un attribut, tout simplement un :

<?php if($_product->getColor()): ?>

Pour la comparaison, un simple « == » suffit.
Ensuite bien sûr, il ne faut pas comparer ton attribut avec la « valeur » Red qui dépend de ta locale, il faudrait plutôt le comparer avec l’identifiant de l’option voulue.
Ensuite, savoir quel identifiant, le stocker en store config par exemple.

Dans tous les cas, il est très rare de comparer un attribut en liste déroulante administrable en Back-office. Plus avec des listes déroulantes qui utilisent des modèles personnalisés.

Avatar

Jordan

janvier 9th, 2015 à 15 h 46 min

Bonjour,

Encore une fois je suis bloqué par une petite erreur qui m’agace…
J’aimerai récupérer la méthode d’expédition d’une facture dans une variable.

Pour l’instant je suis bloqué ici :

$methode_exp = Mage::getModel('sales/order')->loadByIncrementId($idcommande);

Un petit conseil ou lien? :)

Avatar

Jordan

janvier 9th, 2015 à 17 h 32 min

Re!

Apres une demi journée de recherche je viens de réussir.

$methode_exp= Mage::getModel('sales/order')->loadByIncrementId($idcommande)->getShippingMethod();

PS : J’en connais certain qui vont se moquer x’)

Avatar

Frédéric Martinez

janvier 9th, 2015 à 19 h 02 min

J’ai pas eu le temps de voir votre commentaire ;-)
Mais oui c’est bien ça pour récupérer l’information.

L’idée est la même pour tous les objets Magento.
Il faut aller récupérer les informations dans le bon Model, ici c’est Mage_Sales_Model_Order.

Formulaire pour Commenter

Si vous en avez besoin, entourez votre code :

PHP : [php]echo $variable[/php]
XML : [xml]<default></default>[/xml]

Je m'appelle Frédéric Martinez.

Je suis Freelance Magento, fondateur de l'agence web e-commerce PH2M et anciennement étudiant en Master MIAGE à Toulouse.

Ce site présente mes réalisations professionnelles, personnelles et universitaires.

Magento Certified Developer Plus

rss_32 twitter_32 Magento

  • Vincent MARMIESSE: Bonjour, Attention depuis Magento 1.9.2.0, les blocs CMS sont en cache ! Cela ne pose pas de pro [...]
  • Java2dev: Bonjour, pour l'Etape 1 a quel niveau on met les codes? dans quel folder et c'est un fichier a edit [...]
  • manuel: Bonjour Frédéric, j'aimerais savoir comment enlever l'option de ( signature obligatoire ) de mon m [...]
  • Arsene: Bonjour a tous, j'aimerais savoir comment créer un module qui propose des options d'assurance su [...]
  • Frédéric Martinez: @Thomas : Il y aura toujours de la perte sur les personnes ne retournant pas sur la page de success. [...]