Tentukan Jenis Halaman dan Halaman

11

Saya memiliki pekerjaan baru di mana saya benar-benar mengerjakan Magento setiap hari sekarang. Saya tidak memiliki pengalaman sebelumnya dengan Magento sehingga menjadi tantangan untuk mengatakan yang paling tidak sejauh ini!

Izinkan saya menjelaskan secara singkat ekstensi yang kami bangun.

Ini akan memungkinkan kita untuk menampilkan jendela Popup / Modal. Konten HTML Modal akan disimpan dalam
aStatic Block


HALAMAN ADMIN

Jadi panel Admin terdiri dari Tab baru di bawah System/Confuration/TAB BARU

Panel admin memungkinkan Anda untuk memilih dalam daftar tarik turun pada TAB HALAMAN BARU yang Static Blockakan digunakan untuk bagian-bagian ini ...

HOME PAGEatau HOME PAGE w/Items in Shopping Cart
ALL CATEGORY PAGESatau ALL CATEGORY PAGES w/Items in Shopping Cart
ALL PRODUCTS PAGESatau ALL PRODUCTS PAGES w/Items in Shopping Cart
ALL CMS PAGESatau ALL CMS PAGES w/Items in Shopping Cart
SHOPPING CART PAGEatau SHOPPING CART PAGE w/Items in Shopping Cart


DEFAULT OVER-RIDES

Berikutnya halaman CMS , CATEGORY , dan PRODUCT yang sebenarnya semuanya memungkinkan pengaturan yang sama dengan yang dimiliki halaman Panel Admin, kecuali jika mereka memungkinkan Anda untuk mengatur STATIC BLOCKper-item berdasarkan dan menunggangi pengaturan default yang kami miliki dalam pengaturan admin di atas .


Sejauh ini kami memiliki sisi admin ekstensi dilakukan. Kami memiliki semua tab admin untuk setiap bagian ... produk, kategori, CMS, dan halaman Konfigurasi.

Langkah selanjutnya adalah menambahkan ekstensi yang sama dan membuat Static Blocksisipan ke halaman. Ini Static Blockakan bertanggung jawab untuk ... Menampilkan yang benar Static Blockpada setiap halaman berdasarkan pada pengaturan yang ditetapkan dalam bidang yang disebutkan di atas .....

  • Menentukan halaman tempat kita berada, dan tipe halaman (cms, produk, rumah, kategori)
  • Maka harus membaca semua pengaturan kustom yang ditetapkan di daerah yang disebutkan di atas.
  • Jika ditentukan kita berada di Categoryhalaman, maka kita harus mendapatkan Kategori spesifik yang sebenarnya. Sebagai contoh Category 3. Kami kemudian akan melihat apakah ada pengaturan khusus untuk kategori tertentu. Jika dikatakan Enabledkita akan mencari yang Static Blockdisimpan untuk kategori itu dan menunjukkannya di Static Blockhalaman utama kita !
  • Jika Kategori Khusus di atas diatur Disableduntuk kami Modal Windowmaka kami akan mencari lebih tinggi di pengaturan yang lebih global untuk Modal dan melihat apakah Modal Diaktifkan untuk semua kategori. Jika ya, maka kita akan melihat yang Static Blockdiatur untuk ditampilkan ke semua kategori.
  • Selain semua ini, ia akan melakukan proses ini untuk masing-masing jenis halaman utama (produk, kategori, cms, rumah, keranjang)
  • Kami juga harus memeriksa apakah keranjang belanja kosong atau tidak. JIKA tidak kosong ... maka kita harus mempertimbangkan itu di atas ketika wqe memeriksa mana yang Static Blockakan ditampilkan untuk halaman itu karena setiap pengaturan memungkinkan untuk Static Blockdiatur ke keranjang kosong dan 1 untuk keranjang tidak kosong! (Saya tahu ini adalah pekerjaan besar dan sulit, tetapi kami memiliki sisi admin yang paling banyak dilakukan. Hanya perlu melakukan bagian yang memperhitungkan semua itu dalam menentukan mana yang Static Blockakan ditampilkan pada halaman tertentu.

Jadi untuk mendapatkan saya ke arah yang benar saya punya beberapa pertanyaan kecil ...

  • Bagaimana saya bisa di dalam Static Blockkode saya (bagian PHP) menentukan TIPE HALAMAN yang saya gunakan . Seperti yang saya sebutkan saya perlu tahu apakah saya sedang .... HOME HALAMAN , HALAMAN CMS , HALAMAN KATEGORI , HALAMAN PRODUK , atau HALAMAN BELANJA BELANJA ?
  • Selain TIPE HALAMAN saya perlu mendapatkan halaman yang sebenarnya. Jadi jika saya menggunakan id Produk 1234 maka saya harus bisa mendapatkan pengaturan (set blok statis untuk halaman itu) untuk halaman tertentu.

Saya tahu ini posting yang panjang dan mungkin membingungkan. Jika Anda sejauh ini, terima kasih telah meluangkan waktu Anda untuk membaca ini =)

Jika Anda dapat membantu dengan pertanyaan saya, setiap potongan kecil akan membuat saya lebih dekat ke tujuan akhir


Di bawah ini adalah diagram alir yang saya buat tentang bagaimana modul saya perlu bekerja untuk menentukan blok statis mana yang akan dimasukkan ke halaman

masukkan deskripsi gambar di sini

JasonDavis
sumber
2
Anda sadar bahwa Anda telah secara efektif menciptakan kembali fungsionalitas yang ada dalam Mage_Widgetmodul, bukan?
patok
Lakukan apa yang dikatakan @ markmarks. IMO Anda akan lebih baik mencoba mengambil keuntungan dari widget dan pergi dari sana.
davidalger
@benmark Melihat diagram alur yang telah saya tambahkan ke pertanyaan saya, apakah Anda akan mengatakan bahwa itu masih dapat dicapai 100% dengan Mage_Widget? Saya perlu melihat itu juga
JasonDavis
Tidak. Blok widget inti tidak memahami kombinasi seperti yang ditunjukkan dalam bagan Anda. Anda akan menginginkan beberapa blok logika untuk ini.
patok

Jawaban:

12

Selain jawaban @benmarks :

Berikut adalah sedikit kode untuk memeriksa beberapa kondisi yang Anda sebutkan:

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

Untuk memeriksa apakah troli kosong atau tidak digunakan

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

Anda juga bertanya apakah Anda dapat memeriksa halaman saat ini di dalam blok CMS.
Itu mungkin bukan pendekatan yang baik (Anda harus menyertakan blok khusus, yang akan mengalahkan tujuan menggunakan blok CMS di halaman pertama).
Alih-alih lebih baik memeriksa halaman saat ini terlebih dahulu, dan kemudian memilih blok CMS untuk ditampilkan berdasarkan itu.

EDIT : tetap Mage::app()->getRequest()->getFullActionName()akan Mage::app()->getFrontController()->getAction()->getFullActionName()seperti yang disebutkan oleh @ Yusuf di komentar. Terima kasih!

Vinai
sumber
Terima kasih banyak ini akan sangat membantu saya memulai!
JasonDavis
1
Sekadar diketahui: menggunakan Mage::app()->getRequest()->getFullActionName()dalam templat keranjang menghasilkan kesalahan fatal atau setidaknya itu terjadi pada saya di 1.7.0.2. $this->getAction()->getFullActionName()bekerja dengan sempurna!
Joseph Leedy
Uh, ya, Anda benar di jalurnya. Salahku! Terima kasih!
Vinai
FYI, Mage :: getSingleton ('cms / page') -> getId () memberikan nilai null pada event controller_action_predispatch.
MagePsycho
7

Banyak pendekatan yang bisa Anda ambil. Saya sarankan menambahkan blok Anda melalui <default>pegangan pembaruan tata letak, yang akan membuatnya tersedia di semua halaman. Dalam _prepareLayout()metode blok Anda, Anda bisa menentukan ruang lingkup dengan mendapatkan nama tindakan lengkap saat ini dari objek permintaan ( $this->getRequest()->getFullActionName()), dan menggunakannya untuk menentukan konteks.

Produk dan kategori akan terdaftar di registri. Blok Anda juga bisa melihat pegangan pembaruan tata letak, yang akan mencakup ID produk atau pegangan ID kategori.

tanda batas
sumber
3

Untuk mendeteksi halaman beranda, Anda perlu menggunakan string pengidentifikasi (mis. "Rumah") untuk mencocokkan dengan nilai konfigurasi, daripada id numerik:

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

Berikut ini beberapa lainnya:

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

if ('checkout_onepage_success' == $ fullActionName) {
    // Keberhasilan checkout
}

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

if ('customer_account_logoutSuccess' == $ fullActionName) {
    // Keberhasilan logout
}

if ('customer_account_create' == $ fullActionName) {
    // Akun pelanggan dibuat
}
if (0 === strpos ($ fullActionName, 'catalogsearch_')) {
    // Cari
}

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_')
) {
    // Halaman akun pelanggan (mungkin ada yang lain)
}

Terima kasih atas info yang bermanfaat, semuanya!

kirkmadera
sumber