Sayfa Türünü ve Sayfasını Belirleme


11

Şimdi her gün kesinlikle Magento üzerinde çalıştığım yeni bir işim var. Magento ile önceden deneyimim yok, bu yüzden şimdiye kadar en azını söylemek zor oldu!

Yaptığımız uzantıyı kısaca açıklayayım.

Bir Popup / Modal penceresi göstermemize izin verecek. Modal'ın HTML içeriği
birStatic Block


YÖNETİCİ SAYFASI

Bu nedenle Yönetici paneli YENİ SEKME altındaki yeni bir Sekmeden oluşurSystem/Confuration/

Yönetici paneli, YENİ SEKME SAYFASI'ndaki açılır listeden Static Blockbu bölümler için kullanılacak varsayılanı seçmenize olanak tanır ...

HOME PAGEveya HOME PAGE w/Items in Shopping Cart
ALL CATEGORY PAGESveya ALL CATEGORY PAGES w/Items in Shopping Cart
ALL PRODUCTS PAGESveya ALL PRODUCTS PAGES w/Items in Shopping Cart
ALL CMS PAGESveya ALL CMS PAGES w/Items in Shopping Cart
SHOPPING CART PAGEveya SHOPPING CART PAGE w/Items in Shopping Cart


SÜRELİ BÜYÜME

Daha sonra, gerçek CMS , CATEGORY ve PRODUCT sayfalarının tümü, Yönetici Paneli sayfasının sahip olduğu ayarlara izin verir, ancak STATIC BLOCKöğe başına a ayarlamanıza ve yukarıdaki yönetici ayarlarında yaptığımız varsayılan ayarı aşmanıza izin vermez. .


Şimdiye kadar uzantının yönetici tarafı var. Her bölüm için tüm yönetici sekmelerine sahibiz ... ürün, kategori, CMS ve Yapılandırma sayfası.

Bir sonraki adım, aynı uzantıya Static Blockeklemek ve sayfaya bir ekleme yapmak olacaktır . Bu Static Blockaşağıdakilerden sorumlu olacaktır ... Static BlockYukarıda belirtilen alanlarda yapılan ayarlara bağlı olarak her sayfada doğru gösterilmesi .....

  • Bulunduğumuz sayfayı ve sayfa türünü (cms, ürün, ev, kategori) belirleme
  • Daha sonra, yukarıda belirtilen alanlarda ayarlanmış tüm özel ayarları okumak zorunda kalacaktır.
  • Bir Categorysayfada olduğumuza karar verilirse , bulunduğumuz gerçek kategoriyi almamız gerekir. Örneğin Category 3. Daha sonra söz konusu kategoriye özgü belirli bir ayar olup olmadığını göreceğiz. O Enabledzaman Static Blockbu kategori için hangisinin kaydedildiğini arayacağız ve ana Static Blocksayfamızda göstereceğiz !
  • Yukarıdaki Özel Kategori, Disabledbizim için olduğu gibi ayarlanırsa Modal Window, daha genel modlarda Modal'a bakacağız ve tüm kategoriler için bir Modal'ın Etkin olup olmadığını göreceğiz. Evetse, hangisinin Static Blocktüm kategorilere gösterileceğini belirleyeceğiz.
  • Tüm bunlara ek olarak, bu işlemi ana sayfa türlerinin her biri (ürün, kategoriler, cms, ana sayfa, alışveriş sepeti) için gerçekleştirecektir.
  • Ayrıca alışveriş sepetinin boş olup olmadığını kontrol etmemiz gerekecek. Boş değilse ... o zaman wqe Static Blockbu sayfa için gösterilecekleri kontrol ederken , her ayar a'nın Static Blockboş sepet için ve 1 boş sepet için ayarlanmasına izin verdiği için bunu dikkate almalıyız ! (Bu çok büyük ve büyük bir girişim olduğunu biliyorum ama çoğunlukla yönetici tarafı yaptık. Sadece Static Blockhangi sayfada hangi gösterileceğini belirlerken tüm bunları dikkate alan kısmı yapmak gerekir .

Beni doğru yöne getirmek için birkaç küçük sorum var ...

  • Static BlockKodumu (PHP bölümü) içinde nasıl PAGE TÜRÜ olduğumu nasıl belirleyebilirim. Ben üzerinde .... olmadığımı bilmek gerekir bahsettiğimiz gibi ana sayfası , bir CMS SAYFA , bir KATEGORİ SAYFA , bir ÜRÜN SAYFA veya SEPETİM SAYFA ?
  • SAYFA TÜRÜ'ne ek olarak asıl sayfayı almam gerekiyor. Bu yüzden Ürün kimliği 1234 üzerinde iseniz o zaman o sayfa için ayar (o sayfa için statik blok ayarlanmış) almak gerekir.

Bunun uzun ve muhtemelen kafa karıştırıcı bir görev olduğunu biliyorum. Şimdiye kadar yaptıysanız, bunu okumak için zaman ayırdığınız için teşekkür ederiz =)

Soruma yardımcı olabilirseniz, her küçük parça beni son hedefe yaklaştıracak


Aşağıda, sayfaya hangi statik bloğun ekleneceğini belirlemek için modülümün nasıl çalışması gerektiğiyle ilgili bir Akış şeması var

resim açıklamasını buraya girin


2
Modülde bulunan işlevselliği etkili bir şekilde yeniden yarattığınızın farkındasınız Mage_Widget, değil mi?
benmarks

@Benmarks'un söylediklerine aynen. IMO, widget'lardan yararlanmaya ve oradan gitmeye çalışırken daha iyi olacaksınız.
davidalger

@benmarks Soruma eklediğim akış şemasına baktığımızda, bunun% 100 ile hala ulaşılabilir olduğunu söyleyebilir misiniz Mage_Widget? Ben de buna bakmalıyım
JasonDavis

Hayır. Temel widget blokları, grafiğinizde belirtilenler gibi kombinasyonları anlamıyor. Bunun için bir blok mantık isteyeceksiniz.
seçimler

Yanıtlar:


12

@Benmarks'un yanıtlarına ek olarak :

Bahsettiğiniz koşulların bazılarını kontrol etmek için küçük bir kod:

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

Sepetin boş olup olmadığını kontrol etmek için

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

Ayrıca geçerli sayfayı bir CMS bloğu içinde kontrol edip edemeyeceğinizi de sordunuz .
Bu muhtemelen iyi bir yaklaşım değildir (ilk sayfada CMS bloklarını kullanma amacını yenecek özel bloklar eklemeniz gerekir).
Bunun yerine önce geçerli sayfayı kontrol etmek ve ardından buna dayanarak görüntülenecek CMS bloğunu seçmek daha iyidir.

DÜZENLEME : Sabit Mage::app()->getRequest()->getFullActionName()edilecek Mage::app()->getFrontController()->getAction()->getFullActionName()şekilde yorumlarda @Joseph bahsettiği. Teşekkürler!


Çok teşekkür ederim, bu gerçekten başlamama yardımcı olacak!
JasonDavis

1
Sadece not etmek: Mage::app()->getRequest()->getFullActionName()bir alışveriş sepeti şablonunda kullanmak ölümcül bir hatayla sonuçlanır veya en azından 1.7.0.2'de benim için yaptı. $this->getAction()->getFullActionName()mükemmel çalıştı!
Joseph Leedy

Ah, evet, doğru yoldasın. Benim hatam! Teşekkürler!
Vinai

FYI, Mage :: getSingleton ('cms / page') -> getId () controller_action_predispatch olayında null değeri verir.
MagePsycho

7

Alabileceğiniz birçok yaklaşım. <default>Bloğunuzu, tüm sayfalarda kullanılabilir hale getirecek düzen güncelleme tutamacı aracılığıyla eklemenizi öneririm . Bloğunuzun _prepareLayout()yönteminde, geçerli tam eylem adını istek nesnesinden ( $this->getRequest()->getFullActionName()) alarak ve bunu bağlamı belirlemek için kullanarak kapsamı belirleyebilirsiniz.

Ürünler ve kategoriler kayıt defterine kaydedilecektir. Bloğunuz ayrıca ürün kimliği veya kategori kimliği tanıtıcılarını içeren düzen güncelleme tanıtıcılarına da bakabilir.


3

Ana sayfayı algılamak için, sayısal kimlik yerine yapılandırma değeriyle eşleşmek için tanımlayıcı dizesini (örn. "Ana sayfa") kullanmanız gerekir:

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

İşte bazıları:

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

if ('checkout_onepage_success' == $ fullActionName) {
    // Ödeme başarısı
}

if ('customer_account_login' == $ fullActionName) {
    // Oturum aç
}

if ('customer_account_logoutSuccess' == $ fullActionName) {
    // Çıkış başarılı
}

if ('customer_account_create' == $ fullActionName) {
    // Müşteri hesabı oluşturma
}
if (0 === strpos ($ fullActionName, 'catalogsearch_')) {
    // Arama
}

eğer (0 === strpos ($ fullActionName, 'customer_account_')
 || 0 === strpos ($ fullActionName, 'müşteri_adresi_')
 || 0 === strpos ($ fullActionName, 'istek listesi_')
 || 0 === strpos ($ fullActionName, 'newsletter_manage_')
 || 0 === strpos ($ fullActionName, 'review_customer_')
 || 0 === strpos ($ fullActionName, 'sales_order_')
) {
    // Müşteri hesabı sayfası (muhtemelen başkaları da vardır)
}

Herkese yardımcı bilgi için teşekkürler!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.