Determina il tipo di pagina e la pagina


11

Ho un nuovo lavoro in cui lavoro rigorosamente su Magento ogni giorno. Non ho precedenti esperienze con Magento, quindi finora è stata una sfida a dir poco!

Lasciatemi spiegare brevemente l'estensione che stiamo costruendo.

Ci permetterà di mostrare una finestra popup / modale. Il contenuto HTML di Modal verrà archiviato in
aStatic Block


PAGINA AMMINISTRAZIONE

Quindi il pannello di amministrazione è costituito da una nuova scheda in System/Confuration/NUOVA SCHEDA

Il pannello di amministrazione consente di selezionare in un elenco a discesa in quella NUOVA PAGINA TAB il valore predefinito Static Blockda utilizzare per queste sezioni ...

HOME PAGEoppure HOME PAGE w/Items in Shopping Cart
ALL CATEGORY PAGESoppure ALL CATEGORY PAGES w/Items in Shopping Cart
ALL PRODUCTS PAGESoppure ALL PRODUCTS PAGES w/Items in Shopping Cart
ALL CMS PAGESoppure ALL CMS PAGES w/Items in Shopping Cart
SHOPPING CART PAGEoppure SHOPPING CART PAGE w/Items in Shopping Cart


OVER-RIDES DI DEFAULT

Successivamente, le pagine CMS , CATEGORIA e PRODOTTO effettive consentono tutte le stesse impostazioni della pagina del Pannello di amministrazione, tranne per il fatto che consentono di impostare STATIC BLOCKuna per elemento e superare l'impostazione predefinita che avevamo nelle impostazioni dell'amministratore sopra .


Finora abbiamo finito il lato amministrativo dell'estensione. Abbiamo tutte le schede di amministrazione per ogni sezione ... prodotto, categoria, CMS e pagina di configurazione.

Il prossimo passo sarà aggiungere alla stessa estensione e fare un Static Blockinserimento nella pagina. Questo Static Blocksarà responsabile per ... Mostrare il corretto Static Blocksu ogni pagina in base alle impostazioni che sono state impostate nelle aree sopra menzionate .....

  • Determinare la pagina in cui ci troviamo e il tipo di pagina (cms, prodotto, home, categoria)
  • Dovrà quindi leggere tutte le impostazioni personalizzate che sono state impostate nelle aree sopra menzionate.
  • Se viene stabilito che siamo su una Categorypagina, dovremo quindi ottenere la Categoria specifica specifica in cui ci troviamo. Per esempio Category 3. Vedremo quindi se esiste un'impostazione specifica per quella specifica categoria. Se dice Enabledche cercheremo quindi quale Static Blockè salvato per quella categoria e lo mostreremo nella nostra Static Blockpagina principale !
  • Se la categoria specifica sopra è impostata come Disabledper la nostra Modal Window, cercheremo più in alto nelle impostazioni più globali per il modale e vedremo se un modale è abilitato per tutte le categorie. Se sì, vedremo quale Static Blockè impostato per essere mostrato a tutte le categorie.
  • Oltre a tutto ciò, eseguirà questo processo per ciascuno dei tipi di pagina principale (prodotto, categorie, cms, home, carrello)
  • Dovremo anche verificare se il carrello è vuoto o meno. Se non vuoto ... allora dovremo prendere in considerazione questo sopra quando stiamo controllando quale Static Blockmostrare per quella pagina poiché ogni impostazione consente Static Blockdi impostare un carrello vuoto e 1 per carrello non vuoto! (So ​​che si tratta di una grande impresa difficile ma di grandi dimensioni, ma il lato amministrativo è svolto principalmente. Ho solo bisogno di fare la parte che tiene conto di tutti quelli nel determinare quale Static Blockmostrare su quale particolare pagina.

Quindi per portarmi nella giusta direzione ho un paio di domande più piccole ...

  • Come posso all'interno del mio Static Blockcodice (la parte PHP) determinare su quale TIPO di PAGINA mi trovo. Come ho già detto, devo sapere se sono su ... HOME PAGE , PAGINA CMS , PAGINA CATEGORIA , PAGINA PRODOTTO o PAGINA CARRELLO ?
  • Oltre al TIPO DI PAGINA ho bisogno di ottenere la pagina effettiva. Quindi, se utilizzo ID prodotto 1234, allora devo essere in grado di ottenere l'impostazione (blocco statico impostato per quella pagina) per quella particolare pagina.

So che questo è stato un post lungo e forse confuso. Se sei arrivato così lontano, grazie per aver dedicato del tempo a leggere questo =)

Se puoi aiutarmi con la mia domanda, ogni piccolo pezzo mi avvicinerà all'obiettivo finale


Di seguito è riportato un diagramma di flusso di come il mio modulo dovrà funzionare per determinare quale blocco statico inserire nella pagina

inserisci qui la descrizione dell'immagine


2
Ti rendi conto di aver ricreato in modo efficace la funzionalità esistente nel Mage_Widgetmodulo, giusto?
— benmark

Idem quello che ha detto @benmarks. IMO starai meglio cercando di sfruttare i widget e andare da lì.
— davidalger,

@benmarks Guardando il diagramma di flusso che ho aggiunto alla mia domanda, diresti che è ancora realizzabile al 100% con il Mage_Widget? Devo esaminare anche quello
— Jason David

No. I blocchi widget principali non comprendono le combinazioni come quelle indicate nel grafico. Per questo vorrai un po 'di logica a blocchi.
— benmark

Risposte:


12

Oltre a ciò che ha risposto @benmarks :

Ecco un piccolo codice per verificare alcune delle condizioni che hai menzionato:

// 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
}

Per verificare se il carrello è vuoto o non utilizzare

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

Inoltre hai chiesto se puoi controllare la pagina corrente all'interno di un blocco CMS.
Questo probabilmente non è un buon approccio (dovresti includere blocchi personalizzati, il che vanificherebbe lo scopo dell'uso dei blocchi CMS nella prima pagina).
Invece è meglio controllare prima la pagina corrente, quindi scegliere il blocco CMS da visualizzare in base a quello.

EDIT : corretto Mage::app()->getRequest()->getFullActionName()per essere Mage::app()->getFrontController()->getAction()->getFullActionName()come menzionato da @Joseph nei commenti. Grazie!


Grazie mille questo mi aiuterà davvero ad iniziare!
— JasonDavis l'

1
Solo per notare: l'utilizzo Mage::app()->getRequest()->getFullActionName()in un modello di carrello provoca un errore fatale o almeno lo ha fatto per me in 1.7.0.2. $this->getAction()->getFullActionName()ha funzionato perfettamente!
— Joseph Leedy,

Uh, si, sei sulla buona strada. Colpa mia! Grazie!
— Vinai,

Cordiali saluti, Mage :: getSingleton ('cms / page') -> getId () fornisce un valore nullo nell'evento controller_action_predispatch.
— MagoPsycho,

7

Molti approcci che potresti adottare. Consiglio di aggiungere il blocco tramite l' <default>handle di aggiornamento del layout, che lo renderebbe disponibile su tutte le pagine. Nel _prepareLayout()metodo del blocco , è possibile determinare l'ambito ottenendo il nome completo dell'azione corrente dall'oggetto richiesta ( $this->getRequest()->getFullActionName()) e utilizzandolo per determinare il contesto.

I prodotti e le categorie saranno registrati nel registro. Il blocco potrebbe anche esaminare gli handle di aggiornamento del layout, che includeranno handle di ID prodotto o ID categoria.


3

Per rilevare la home page, è necessario utilizzare la stringa identificativa (ad esempio "home") per la corrispondenza con il valore di configurazione, anziché con l'id numerico:

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

Eccone alcuni altri:

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

if ('checkout_onepage_success' == $ fullActionName) {
    // Verifica riuscita
}

if ('customer_account_login' == $ fullActionName) {
    // Accesso
}

if ('customer_account_logoutSuccess' == $ fullActionName) {
    // Disconnessione riuscita
}

if ('customer_account_create' == $ fullActionName) {
    // Creazione dell'account cliente
}
if (0 === strpos ($ fullActionName, 'catalogsearch_')) {
    // Ricerca
}

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_')
) {
    // Pagina dell'account cliente (probabilmente ce ne sono altri)
}

Grazie per le informazioni utili a tutti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.