Variables et conditions utiles sous Magento

Dans: Magento

17 août 2009

Sous Magento, il n’y a pas de réel Codex comme sous WordPress. 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().

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/2011 : Website / Store group / Store view

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::log( 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);

2) Retourner la date actuelle

Date Formatée

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

Date Timestamp

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

[/php]

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é

<?php 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;

7 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 !

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 et anciennement étudiant en Master MIAGE à Toulouse.

Ce site présente mon CV ainsi que mes réalisations professionnelles, personnelles et universitaires.

rss_32 twitter_32 Magento

  • alexandre: Merci, c'est exactement ce dont j'avais besoin ! [...]
  • Frédéric Martinez: De base, non ce n'est pas possible. Cependant, cela doit se jouer dans les configurations JS de cal [...]
  • Peter: le tuto est génial, il est tres utile pour les débutants comme moi. Mais j'ai une petite que [...]
  • Frédéric Martinez: @martin : Non cela ne marche pas avec un Magento 1.6.2.0 par exemple car la table sales_order n'exis [...]
  • martin: Bonjour, ce code marche -t-il toujours sur les nouvelles version de magento ? merci [...]