กำหนดประเภทหน้าและหน้า


11

ฉันมีงานใหม่ที่ตอนนี้ฉันทำงานวีโอไอพีอย่างเคร่งครัดทุกวัน ฉันไม่เคยมีประสบการณ์กับ Magento มาก่อนมันเป็นความท้าทายที่จะพูดให้ไกลที่สุด!

ให้ฉันอธิบายสั้น ๆ เกี่ยวกับส่วนขยายที่เรากำลังสร้าง

มันจะช่วยให้เราสามารถแสดงหน้าต่างป๊อปอัพ / Modal เนื้อหา HTML ของโมดจะถูกเก็บไว้ใน
Static Block


หน้าผู้ดูแลระบบ

ดังนั้นแผงผู้ดูแลระบบจึงประกอบด้วยแท็บใหม่ภายใต้แท็บSystem/Confuration/ใหม่

พาเนลผู้ดูแลระบบอนุญาตให้คุณเลือกในรายการแบบหล่นลงบนหน้าแท็บใหม่นั้นเป็นค่าเริ่มต้นStatic Blockสำหรับส่วนเหล่านี้ ...

HOME PAGEหรือ HOME PAGE w/Items in Shopping Cart
ALL CATEGORY PAGESหรือ ALL CATEGORY PAGES w/Items in Shopping Cart
ALL PRODUCTS PAGESหรือ ALL PRODUCTS PAGES w/Items in Shopping Cart
ALL CMS PAGESหรือ ALL CMS PAGES w/Items in Shopping Cart
SHOPPING CART PAGEหรือ SHOPPING CART PAGE w/Items in Shopping Cart


ค่าเริ่มต้นขี่ม้าเกิน

ถัดไปหน้าCMS , CATEGORYและPRODUCT จริงทั้งหมดอนุญาตให้มีการตั้งค่าเดียวกันกับที่หน้าแผงผู้ดูแลระบบมียกเว้นพวกเขาอนุญาตให้คุณตั้งค่าSTATIC BLOCKตามรายการต่อรายการและข้ามการตั้งค่าเริ่มต้นที่เรามีในการตั้งค่าผู้ดูแลระบบด้านบน .


จนถึงตอนนี้เราได้ทำส่วนขยายของผู้ดูแลระบบเรียบร้อยแล้ว เรามีแท็บผู้ดูแลระบบสำหรับแต่ละส่วน ... ผลิตภัณฑ์หมวดหมู่ CMS และหน้าการกำหนดค่า

ขั้นตอนต่อไปคือการเพิ่มในส่วนขยายเดียวกันและทำการStatic Blockแทรกลงในหน้า สิ่งนี้Static Blockจะเป็นหน้าที่ ... แสดงความถูกต้องStatic Blockในแต่ละหน้าตามการตั้งค่าที่ตั้งไว้ในพื้นที่ดังกล่าวข้างต้น .....

  • การกำหนดหน้าเว็บที่เราเปิดและประเภทหน้าเว็บ (ซม., ผลิตภัณฑ์, บ้าน, หมวดหมู่)
  • จากนั้นจะต้องอ่านการตั้งค่าแบบกำหนดเองทั้งหมดที่ตั้งค่าในพื้นที่ดังกล่าวข้างต้น
  • หากมีการพิจารณาว่าเราอยู่บนCategoryหน้าเราจะต้องได้รับหมวดหมู่ specifiv จริงที่เราเปิด Category 3เช่น จากนั้นเราจะดูว่ามีการตั้งค่าเฉพาะสำหรับหมวดหมู่นั้นหรือไม่ ถ้ามันบอกว่าEnabledเราจะมองหาสิ่งที่Static Blockถูกบันทึกไว้สำหรับหมวดหมู่นั้นและแสดงในStatic Blockหน้าหลักของเรา!
  • หากหมวดหมู่เฉพาะด้านบนถูกตั้งค่าเป็นDisabledของModal Windowเราเราจะดูสูงขึ้นในการตั้งค่าทั่วโลกสำหรับ Modal และดูว่า Modal นั้นเปิดใช้งานสำหรับทุกหมวดหมู่หรือไม่ ถ้าใช่เราจะดูว่าStatic Blockชุดใดที่จะแสดงในทุกหมวดหมู่
  • นอกเหนือจากทั้งหมดนี้แล้วจะทำขั้นตอนนี้สำหรับประเภทหน้าเว็บหลักแต่ละประเภท (ผลิตภัณฑ์หมวดหมู่ cms หน้าหลักตะกร้าสินค้า)
  • เราจะต้องตรวจสอบว่าตะกร้าสินค้าว่างเปล่าหรือไม่ หากไม่ว่างเปล่า ... เราจะต้องพิจารณาสิ่งข้างต้นเมื่อ wqe กำลังตรวจสอบว่าStatic Blockจะแสดงหน้าใดเนื่องจากแต่ละการตั้งค่าอนุญาตให้ a Static Blockสำหรับรถเข็นที่ว่างเปล่าและ 1 สำหรับรถเข็นที่ไม่ว่าง! (ฉันรู้ว่านี่เป็นงานที่ยากและใหญ่มาก แต่เราทำหน้าที่เป็นผู้ดูแลระบบเป็นส่วนใหญ่เพียงแค่ต้องทำส่วนที่คำนึงถึงสิ่งเหล่านั้นทั้งหมดเพื่อพิจารณาว่าStatic Blockจะแสดงหน้าใด

เพื่อให้ฉันไปในทิศทางที่ถูกต้องฉันมีคำถามเล็ก ๆ สองสามข้อ ...

  • ฉันจะใส่Static Blockรหัสของฉัน(ส่วนของ PHP) ในการกำหนดประเภทของหน้าฉันได้อย่างไร เช่นเดียวกับที่ฉันกล่าวถึงฉันจำเป็นต้องรู้ว่าฉันอยู่ใน .... หน้าบ้าน , หน้า CMS , หน้าหมวดหมู่ , หน้าผลิตภัณฑ์หรือหน้าตะกร้าสินค้า ?
  • นอกจากPAGE TYPEแล้วฉันต้องได้หน้าจริง ดังนั้นหากฉันใช้รหัสผลิตภัณฑ์ 1234ฉันต้องสามารถรับการตั้งค่า (ชุดบล็อกแบบคงที่สำหรับหน้านั้น) สำหรับหน้านั้น ๆ

ฉันรู้ว่านี่เป็นการโพสต์ที่ยาวนานและอาจสับสน ถ้าคุณทำมาไกลขนาดนี้ขอขอบคุณที่สละเวลาอ่านนี่ =)

หากคุณสามารถช่วยตอบคำถามของฉันก้อนเล็ก ๆ แต่ละก้อนจะพาฉันเข้าใกล้เป้าหมายสุดท้าย


ด้านล่างคือแผนภูมิการไหลที่ฉันสร้างขึ้นจากวิธีการที่โมดูลของฉันจะต้องทำงานเพื่อกำหนดว่าบล็อกแบบคงที่ที่จะแทรกลงในหน้า

ป้อนคำอธิบายรูปภาพที่นี่


2
คุณรู้หรือไม่ว่าคุณได้สร้างฟังก์ชั่นการทำงานที่มีอยู่ในMage_Widgetโมดูลใช่ไหม?
benmarks

เหมือนที่ @benmarks พูดไว้ IMO คุณจะดีกว่าหากพยายามใช้ประโยชน์จากวิดเจ็ตและไปจากที่นั่น
davidalger

@benmarks เมื่อดูแผนภูมิการไหลที่ฉันเพิ่มให้กับคำถามของฉันคุณจะบอกว่ายังคงทำได้ 100% ด้วยMage_Widgetหรือไม่ ฉันต้องพิจารณาเรื่องนี้ด้วยเช่นกัน
JasonDavis

ไม่ได้บล็อกวิดเจ็ตหลักไม่เข้าใจชุดค่าผสมเช่นที่ระบุในแผนภูมิของคุณ คุณจะต้องการตรรกะบล็อกบางอย่างสำหรับเรื่องนี้
benmarks

คำตอบ:


12

นอกจากสิ่งที่@benmarks ตอบ :

นี่เป็นรหัสเล็กน้อยในการตรวจสอบเงื่อนไขที่คุณกล่าวถึง:

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

เพื่อตรวจสอบว่ารถเข็นว่างเปล่าหรือไม่ใช้

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

นอกจากนี้คุณถามว่าคุณสามารถตรวจสอบหน้าปัจจุบันภายในบล็อก CMS
นั่นอาจไม่ใช่วิธีที่ดี (คุณจะต้องรวมบล็อกที่กำหนดเองซึ่งจะเอาชนะวัตถุประสงค์ของการใช้บล็อก CMS ในหน้าแรก)
แทนที่จะเป็นการดีกว่าที่จะตรวจสอบหน้าปัจจุบันก่อนจากนั้นเลือกบล็อก CMS ที่จะแสดงตามนั้น

แก้ไข : คงMage::app()->getRequest()->getFullActionName()ที่Mage::app()->getFrontController()->getAction()->getFullActionName()ตามที่ระบุไว้โดย @Joseph ในความคิดเห็น ขอบคุณ!


ขอบคุณมากนี่จะช่วยให้ฉันเริ่มต้นได้จริงๆ!
JasonDavis

1
สิ่งที่ควรทราบ: การใช้Mage::app()->getRequest()->getFullActionName()แม่แบบรถเข็นส่งผลให้เกิดข้อผิดพลาดร้ายแรงหรืออย่างน้อยก็ทำให้ฉันใน 1.7.0.2 $this->getAction()->getFullActionName()ทำงานได้อย่างสมบูรณ์แบบ!
Joseph Leedy

เอ่อใช่คุณอยู่ในการติดตาม ความผิดฉันเอง! ขอบคุณ!
Vinai

FYI, Mage :: getSingleton ('cms / หน้า') -> getId () ให้ค่า Null ใน controller_action_predispatch เหตุการณ์
MagePsycho

7

วิธีการมากมายที่คุณสามารถทำได้ ฉันขอแนะนำให้เพิ่มบล็อกของคุณผ่านทาง<default>หมายเลขอ้างอิงการปรับปรุงเค้าโครงซึ่งจะทำให้มันพร้อมใช้งานในทุกหน้า ใน_prepareLayout()วิธีการบล็อกของคุณคุณสามารถกำหนดขอบเขตได้โดยรับชื่อการกระทำเต็มรูปแบบปัจจุบันจากวัตถุคำขอ ( $this->getRequest()->getFullActionName()) และใช้เพื่อกำหนดบริบท

ผลิตภัณฑ์และหมวดหมู่จะได้รับการลงทะเบียนในรีจิสทรี บล็อกของคุณอาจดูหมายเลขอ้างอิงการปรับปรุงเค้าโครงซึ่งจะรวมถึงหมายเลขผลิตภัณฑ์หรือหมายเลขหมวดหมู่


3

ในการตรวจจับหน้าแรกคุณต้องใช้สตริงตัวระบุ (เช่น "โฮม") เพื่อจับคู่กับค่าการตั้งค่าแทนที่จะเป็นตัวเลขที่เป็นตัวเลข:

if ($ page-> getIdentifier () == Mage :: getStoreConfig ('เว็บ / ค่าเริ่มต้น / cms_home_page')) {
    // หน้าแรก
}

นี่คือบางส่วนอื่น ๆ :

$ fullActionName = Mage :: app () -> getFrontController () -> getAction () -> getFullActionName ();
if ('checkout_onepage_index' == $ fullActionName) {
    // เช็คเอาท์
}

if ('checkout_onepage_success' == $ fullActionName) {
    // ชำระเงินสำเร็จ
}

if ('customer_account_login' == $ fullActionName) {
    // เข้าสู่ระบบ
}

if ('customer_account_logoutSuccess' == $ fullActionName) {
    // ออกจากระบบสำเร็จ
}

if ('customer_account_create' == $ fullActionName) {
    // สร้างบัญชีลูกค้า
}
if (0 === strpos ($ fullActionName, 'catalogsearch_')) {
    // ค้นหา
}

if (0 === strpos ($ fullActionName, 'customer_account_')
 || 0 === strpos ($ fullActionName, 'customer_address_')
 || 0 === strpos ($ fullActionName, 'Favorites_')
 || 0 === strpos ($ fullActionName, 'newsletter_manage_')
 || 0 === strpos ($ fullActionName, 'review_customer_')
 || 0 === strpos ($ fullActionName, 'sales_order_')
) {
    // หน้าบัญชีลูกค้า (อาจมีคนอื่น ๆ )
}

ขอบคุณสำหรับข้อมูลที่เป็นประโยชน์ทุกคน!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.