Freelance Magento Toulouse – Entrepreneur
Dans: Magento
17 août 2009Sous 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 :
Edit :
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();
Retourne : http://monsite.com/skin/frontend/{votre_interface}/{votre_theme}/images/zoom.gif
$this->getSkinUrl('images/zoom.gif');
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);
$this->helper('customer/data')->getAccountUrl();
$this->helper('checkout/url')->getCartUrl();
$this->helper('checkout/url')->getCheckoutUrl();
$this->helper('customer/data')->getLoginUrl();
$this->helper('customer/data')->getLogoutUrl();
$this->helper('customer/data')->getForgotPasswordUrl();
Exemple ici :
Catégorie « Mes produits » ayant l’identifiant : 2 et l’URL : « mes-produits.html » et la description « Description de la catégorie
Retourne « mes-produits.html »
Mage::getModel("catalog/category")->load(2)->getUrl();
Retourne « Description de la catégorie »
Mage::getModel("catalog/category")
->load(2)
->getData("description");
Retourne « Description de la catégorie »
Mage::getModel("catalog/category")
->load(2)
->getData("name");
Récupère la catégorie en courante
$_cat = Mage::registry('current_category');
Retourne l’identifiant de la catégorie (exemple : 13)
$_cat->getId();
Retourne l’identifiant de la catégorie parente (Exemple : 4)
$_cat->getParentId();
Retourne l’identifiant de la 1ère catégorie (Default Category) Exemple : 2
Mage::app()->getStore() ->getRootCategoryId();
Retourne le niveau de la catégorie (Exemple : 2)
$_category->getLevel();
Retourne : Qui-sommes-nous ? (Le nom de la page CMS)
Mage::getSingleton('cms/page')->getTitle();
Retourne : qui-sommes-nous (l’identifiant de la page)
Mage::getSingleton('cms/page')->getIdentifier();
Retourne : 2 (l’ID)
Mage::getSingleton('cms/page')->getId();
Mage::getModel('cms/page')
->setStoreId(
Mage::app()->getStore()
->getId())
->load('id_page')
->getContent();
$this->getLayout()
->createBlock('cms/block')
->setBlockId('id_block')
->toHtml();
Mage::getModel('cms/block')
->setStoreId(
Mage::app()->getStore()
->getId())
->load('id_block')
->getTitle();
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');
Mage::getStoreConfig('general/store_information/phone')
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)
Jouer avec le panier de Magento
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()
}
Méthode 1
Mage::helper('checkout')->formatPrice(99.99);
Méthode 2
Mage::app()->getStore() ->getBaseCurrency() ->format(99.99, array(), true);
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]
if ($this->helper('core/url')->getCurrentUrl()
== Mage:: getBaseUrl (Mage_Core_Model_Store:: URL_TYPE_WEB))
if(Mage::getSingleton('cms/page')->getIdentifier()
== Mage::getStoreConfig('web/default/cms_home_page'))
if ($this->getIsHomePage()): // Depuis le template page/html/header.phtml
if(Mage::getSingleton('cms/page')->getId()):
A noter que la page d’accueil est une page CMS.
<?php if ($this->helper('customer/data')->isLoggedIn()): ?>
Mage::getSingleton("core/session", array("name" => "adminhtml"));
if(Mage::getSingleton("admin/session")->isLoggedIn() ):
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() ):
Les méthodes de conditions importantes se trouvant dans : « app/code/core/Mage/Catalog/Model/Product.php
if( $_product->isConfigurable() ):
if( $_product->isGrouped() ):
Pour Magento, un produit est vendable si :
if( $_product->isSaleable() ):
Si l’attribut « Visibilité » est sur « Catalogue » (ou « Catalogue, Recherche »)
if( $_product->isVisibleInSiteVisibility() ):
Si l’attribut « Statut » est sur « Activé »
if( $_product->VisibleInCatalog() ):
Donc un produit est vraiment vendable si :
public function isAvailable($_product) {
$available = (
$_product->isVisibleInSiteVisibility() &&
$_product->isVisibleInCatalog() &&
$_product->isSaleable()
);
return $available;
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.
7 Commentaires pour Variables et conditions utiles sous Magento
Philippe
janvier 3rd, 2010 à 14 h 41 min
Très bon article, très complet : Merci!
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?
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!^^
Thomas
juillet 8th, 2010 à 12 h 18 min
Très très bon article, en effet.
Merci.
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
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 :
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')->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).
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 !