Déterminer le type de page et la page


11

J'ai un nouvel emploi où je travaille strictement sur Magento tous les jours maintenant. Je n'ai aucune expérience préalable avec Magento, donc ça a été un défi pour le moins que je sache!

Permettez-moi d'expliquer brièvement l'extension que nous construisons.

Cela nous permettra d'afficher une fenêtre Popup / Modal. Le contenu HTML du Modal sera stocké dans
unStatic Block


PAGE ADMIN

Ainsi, le panneau d'administration se compose d'un nouvel onglet sous System/Confuration/NEW TAB

Le panneau d'administration vous permet de sélectionner dans une liste déroulante sur cette NOUVELLE PAGE D'ONGLET la valeur par défaut Static Blockà utiliser pour ces sections ...

HOME PAGEou HOME PAGE w/Items in Shopping Cart
ALL CATEGORY PAGESou ALL CATEGORY PAGES w/Items in Shopping Cart
ALL PRODUCTS PAGESou ALL PRODUCTS PAGES w/Items in Shopping Cart
ALL CMS PAGESou ALL CMS PAGES w/Items in Shopping Cart
SHOPPING CART PAGEou SHOPPING CART PAGE w/Items in Shopping Cart


SURVOLS PAR DÉFAUT

Ensuite, les pages CMS , CATÉGORIE et PRODUITS réelles autorisent toutes les mêmes paramètres que la page du panneau d'administration, sauf qu'elles vous permettent de définir STATIC BLOCKun par article et de remplacer le paramètre par défaut que nous avions dans les paramètres d'administration ci-dessus. .


Jusqu'à présent, le côté administrateur de l'extension est terminé. Nous avons tous les onglets d'administration pour chaque section ... produit, catégorie, CMS et page de configuration.

La prochaine étape sera d'ajouter à la même extension et de faire un Static Blockinsert dans la page. Ce Static Blocksera responsable de ... Afficher le correct Static Blocksur chaque page en fonction des paramètres qui ont été définis dans les zones mentionnées ci-dessus .....

  • Déterminer la page sur laquelle nous nous trouvons et le type de page (cms, produit, accueil, catégorie)
  • Il devra ensuite lire tous les paramètres personnalisés qui ont été définis dans les zones mentionnées ci-dessus.
  • S'il est déterminé que nous sommes sur une Categorypage, nous devrons alors obtenir la catégorie spécifique sur laquelle nous nous trouvons. Par exemple Category 3. Nous verrons ensuite s'il existe un paramètre spécifique pour cette catégorie spécifique. S'il indique que Enablednous chercherons alors ce qui Static Blockest enregistré pour cette catégorie et l'afficherons dans notre Static Blockpage principale sur la page!
  • Si la catégorie spécifique ci-dessus est définie comme Disabledpour notre, Modal Windownous allons chercher plus haut dans les paramètres plus globaux pour le modal et voir si un modal est activé pour toutes les catégories. Si oui, alors nous verrons lequel Static Blockdoit être affiché dans toutes les catégories.
  • En plus de tout cela, il effectuera ce processus pour chacun des types de page principale (produit, catégories, cms, accueil, panier)
  • Nous devrons également vérifier si le panier est vide ou non. SI pas vide ... alors nous devrons prendre cela en considération ci-dessus lorsque nous vérifierons lequel Static Blockafficher pour cette page car chaque paramètre permet de Static Blockdéfinir un pour le panier vide et 1 pour le panier non vide! (Je sais que c'est une entreprise énorme et difficile, mais nous avons surtout le côté administrateur. Il suffit de faire la partie qui tient compte de tous ceux-ci pour déterminer lequel Static Blockafficher sur quelle page particulière.

Donc, pour me mettre dans la bonne direction, j'ai quelques petites questions ...

  • Comment puis-je à l'intérieur de mon Static Blockcode (la partie PHP) déterminer sur quel TYPE de PAGE je suis. Comme je l' ai mentionné que je dois savoir si je suis sur .... PAGE HOME , une PAGE CMS , une page de catégorie , une fiche produit , ou la page de panier ?
  • En plus du TYPE DE PAGE, j'ai besoin d'obtenir la page réelle. Donc, si je suis sur l' ID de produit 1234, je dois pouvoir obtenir le paramètre (bloc statique défini pour cette page) pour cette page particulière.

Je sais que cela a été un poste long et peut-être déroutant. Si vous êtes arrivé jusqu'ici, merci d'avoir pris le temps de lire ceci =)

Si vous pouvez répondre à ma question, chaque petit morceau me rapprochera de l'objectif final


Voici un organigramme que j'ai fait de la façon dont mon module devra fonctionner pour déterminer le bloc statique à insérer dans la page

entrez la description de l'image ici


2
Vous vous rendez compte que vous avez effectivement recréé des fonctionnalités qui existent dans le Mage_Widgetmodule, non?
benmarks

Idem ce qu'a dit @benmarks. OMI, vous feriez mieux d'essayer de profiter des widgets et de partir de là.
davidalger

@benmarks En regardant l'organigramme que j'ai ajouté à ma question, diriez-vous qu'il est toujours réalisable à 100% avec le Mage_Widget? Je dois aussi examiner cela
JasonDavis

Non. Les blocs de widgets principaux ne comprennent pas les combinaisons telles que celles indiquées dans votre graphique. Vous allez vouloir une logique de bloc pour cela.
benmarks

Réponses:


12

En plus de ce que @benmarks a répondu :

Voici un petit code pour vérifier certaines des conditions que vous avez mentionnées:

// Check if it's a CMS page:
$page = Mage::getSingleton('cms/page');
if ($page->getId()) {
    // The current page is a CMS page

    if ($page->getIdentifier() == Mage::getStoreConfig('web/default/cms_home_page')) {
        // The current page is the CMS home page
    }
}

$product = Mage::registry('current_product');
$category = Mage::registry('current_category');
if ($product && $product->getId()) {
    // The current page is a product page.
    // If you only want the main product detail page, also check for 
    // Mage::app()->getFrontController()->getAction()->getFullActionName() == 'catalog_product_view'
    // Be aware that a current_product and a current_category can be set at the same time.
    // In that case the visitor is viewing a product in a category.
} elseif ($category && $category->getId()) {
    // The current page is a category page
    // If you only want the category list page, also check for 
    // Mage::app()->getFrontController()->getAction()->getFullActionName() == 'catalog_category_view'
}

// Check for cart page
if (Mage::app()->getFrontController()->getAction()->getFullActionName() == 'checkout_cart_index') {
    // The current page is the cart
}

Pour vérifier si le panier est vide ou non utilisé

$isEmpty = Mage::getSingleton('checkout/session')->getQuote()->getItemsCount() > 0

Vous avez également demandé si vous pouvez vérifier la page actuelle dans un bloc CMS.
Ce n'est probablement pas une bonne approche (vous devrez inclure des blocs personnalisés, ce qui irait à l'encontre de l'utilisation des blocs CMS dans la première page).
Au lieu de cela, il est préférable de vérifier d'abord la page actuelle, puis de choisir le bloc CMS à afficher en fonction de cela.

EDIT : fixé Mage::app()->getRequest()->getFullActionName()à Mage::app()->getFrontController()->getAction()->getFullActionName()comme mentionné par @Joseph dans les commentaires. Merci!


Merci beaucoup, cela va vraiment m'aider à démarrer!
JasonDavis

1
Juste à noter: l'utilisation Mage::app()->getRequest()->getFullActionName()d'un modèle de panier entraîne une erreur fatale ou du moins, c'est le cas pour moi sur 1.7.0.2. $this->getAction()->getFullActionName()a parfaitement fonctionné!
Joseph Leedy

Euh, oui, vous êtes sur la bonne voie. Ma faute! Merci!
Vinai

FYI, Mage :: getSingleton ('cms / page') -> getId () donne une valeur nulle dans l'événement controller_action_predispatch.
MagePsycho du

7

Beaucoup d'approches que vous pourriez adopter. Je recommanderais d'ajouter votre bloc via la <default>poignée de mise à jour de la mise en page, qui le rendrait disponible sur toutes les pages. Dans la _prepareLayout()méthode de votre bloc , vous pouvez déterminer la portée en obtenant le nom de l'action complète actuelle à partir de l'objet de demande ( $this->getRequest()->getFullActionName()) et en l'utilisant pour déterminer le contexte.

Les produits et catégories seront enregistrés dans le registre. Votre bloc pourrait également consulter les poignées de mise à jour de la mise en page, qui comprendront les poignées d'ID de produit ou d'ID de catégorie.


3

Pour détecter la page d'accueil, vous devez utiliser la chaîne d'identifiant (par exemple "home") pour faire correspondre la valeur de configuration, plutôt que l'ID numérique:

if ($ page-> getIdentifier () == Mage :: getStoreConfig ('web / default / cms_home_page')) {
    // Page d'accueil
}

En voici d'autres:

$ fullActionName = Mage :: app () -> getFrontController () -> getAction () -> getFullActionName ();
if ('checkout_onepage_index' == $ fullActionName) {
    // Check-out
}

if ('checkout_onepage_success' == $ fullActionName) {
    // Succès de paiement
}

if ('customer_account_login' == $ fullActionName) {
    // S'identifier
}

if ('customer_account_logoutSuccess' == $ fullActionName) {
    // Succès de déconnexion
}

if ('customer_account_create' == $ fullActionName) {
    // Création d'un compte client
}
if (0 === strpos ($ fullActionName, 'catalogsearch_')) {
    // Chercher
}

if (0 === strpos ($ fullActionName, 'customer_account_')
 || 0 === strpos ($ fullActionName, 'customer_address_')
 || 0 === strpos ($ fullActionName, 'wishlist_')
 || 0 === strpos ($ fullActionName, 'newsletter_manage_')
 || 0 === strpos ($ fullActionName, 'review_customer_')
 || 0 === strpos ($ fullActionName, 'sales_order_')
) {
    // Page de compte client (il y en a probablement d'autres)
}

Merci pour les informations utiles à tous!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.