Xác định loại trang và trang


11

Bây giờ tôi có một công việc mới, nơi tôi làm việc nghiêm túc với Magento. Tôi không có kinh nghiệm trước với Magento vì vậy đó là một thách thức để nói ít nhất cho đến nay!

Hãy để tôi giải thích ngắn gọn phần mở rộng chúng tôi đang xây dựng.

Nó sẽ cho phép chúng tôi hiển thị cửa sổ Popup / Modal. Nội dung HTML của phương thức sẽ được lưu trữ trong
mộtStatic Block


TRANG QUẢN TRỊ

Vì vậy, bảng Quản trị bao gồm một Tab mới trong System/Confuration/TAB MỚI

Bảng quản trị cho phép bạn chọn trong danh sách thả xuống trên TRANG TAB MỚI đó mặc định Static Blockđể sử dụng cho các phần này ...

HOME PAGEhay HOME PAGE w/Items in Shopping Cart
ALL CATEGORY PAGEShay ALL CATEGORY PAGES w/Items in Shopping Cart
ALL PRODUCTS PAGEShay ALL PRODUCTS PAGES w/Items in Shopping Cart
ALL CMS PAGEShay ALL CMS PAGES w/Items in Shopping Cart
SHOPPING CART PAGEhay SHOPPING CART PAGE w/Items in Shopping Cart


DEFAULT QUÁ NHIỀU

Tiếp theo , tất cả các trang CMS , CATEGORYSẢN PHẨM đều cho phép các cài đặt giống như trang Bảng điều khiển quản trị, ngoại trừ chúng cho phép bạn đặt STATIC BLOCKcơ sở cho từng mục và vượt quá cài đặt mặc định mà chúng tôi có trong cài đặt quản trị viên ở trên .


Cho đến nay chúng ta có phía quản trị của phần mở rộng được thực hiện. Chúng tôi có tất cả các tab quản trị cho từng phần ... sản phẩm, danh mục, CMS và trang Cấu hình.

Bước tiếp theo sẽ là thêm vào cùng một phần mở rộng và thực hiện Static Blockchèn vào trang. Điều này Static Blocksẽ chịu trách nhiệm cho ... Hiển thị chính xác Static Blocktrên mỗi trang dựa trên các cài đặt được đặt trong các khu vực được đề cập ở trên .....

  • Xác định trang chúng tôi đang ở và loại trang (cms, sản phẩm, nhà, danh mục)
  • Sau đó, nó sẽ phải đọc tất cả các cài đặt tùy chỉnh đã được đặt trong các khu vực được đề cập ở trên.
  • Nếu nó được xác định là chúng tôi đang ở trên một Categorytrang, thì chúng tôi sẽ phải lấy Danh mục cụ thể thực tế mà chúng tôi đang ở. Ví dụ Category 3. Sau đó chúng tôi sẽ xem liệu có một cài đặt cụ thể cho danh mục cụ thể đó không. Nếu nó nói rằng Enabledchúng tôi sẽ tìm kiếm cái nào Static Blockđược lưu cho danh mục đó và hiển thị nó trong trang chính của chúng tôi Static Blocktrên trang!
  • Nếu Danh mục cụ thể ở trên được đặt như Disabledđối với chúng tôi Modal Windowthì chúng tôi sẽ tìm kiếm cao hơn trong cài đặt toàn cầu hơn cho Phương thức và xem liệu Phương thức có được bật cho tất cả các danh mục không. Nếu có, thì chúng ta sẽ thấy cái nào Static Blockđược đặt để hiển thị cho tất cả các danh mục.
  • Ngoài tất cả điều này, nó sẽ thực hiện quy trình này cho từng loại trang chính (sản phẩm, danh mục, cms, nhà, giỏ hàng)
  • Chúng tôi cũng sẽ phải kiểm tra xem giỏ hàng có trống hay không. NẾU không trống ... thì chúng ta sẽ phải xem xét điều đó ở trên khi wqe đang kiểm tra xem trang nào Static Blocksẽ hiển thị cho trang đó vì mỗi cài đặt cho phép Static Blockđặt cho giỏ hàng trống và 1 cho giỏ hàng trống! (Tôi biết đây là một công việc lớn và khó khăn nhưng chúng tôi có phần quản trị viên thực hiện hầu hết. Chỉ cần thực hiện phần có tính đến tất cả những điều đó Static Blockđể xác định xem sẽ hiển thị trên trang cụ thể nào.

Vì vậy, để giúp tôi đi đúng hướng, tôi có một vài câu hỏi nhỏ hơn ...

  • Làm cách nào tôi có thể bên trong Static Blockmã của mình (phần PHP) xác định LOẠI TRANG nào tôi đang sử dụng. Giống như tôi đã đề cập, tôi cần biết nếu tôi đang ở .... TRANG CHỦ , TRANG CMS , TRANG CATEGORY , TRANG SẢN PHẨM , hoặc TRANG MUA HÀNG ?
  • Ngoài LOẠI TRANG tôi cần lấy trang thực tế. Vì vậy, nếu tôi ở trên Id sản phẩm 1234 thì tôi cần có thể nhận cài đặt (đặt khối tĩnh cho trang đó) cho trang cụ thể đó.

Tôi biết đây là một bài viết dài và có thể khó hiểu. Nếu bạn đã làm được điều này đến nay, cảm ơn bạn đã dành thời gian để đọc nó =)

Nếu bạn có thể hỗ trợ với câu hỏi của tôi, mỗi đoạn nhỏ sẽ đưa tôi đến gần hơn với mục tiêu cuối cùng


Dưới đây là biểu đồ Lưu lượng tôi đã tạo về cách mô-đun của tôi sẽ cần hoạt động để xác định khối tĩnh nào sẽ chèn vào trang

nhập mô tả hình ảnh ở đây


2
Bạn có nhận ra rằng bạn đã tái tạo hiệu quả chức năng tồn tại trong Mage_Widgetmô-đun, phải không?
đánh dấu

Ditto những gì @benmark nói. IMO bạn sẽ tốt hơn nếu cố gắng tận dụng các vật dụng và đi từ đó.
davidalger

@benmark Nhìn vào biểu đồ dòng chảy tôi đã thêm vào câu hỏi của mình, bạn có thể nói rằng nó vẫn có thể đạt được 100% với Mage_Widget? Tôi cũng cần phải xem xét điều đó
JasonDavis

Không. Các khối widget không hiểu các kết hợp như các khối được chỉ định trong biểu đồ của bạn. Bạn sẽ muốn một số logic khối cho việc này.
đánh dấu

Câu trả lời:


12

Ngoài những gì @benmark đã trả lời :

Đây là một ít mã để kiểm tra một số điều kiện bạn đã đề cập:

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

Để kiểm tra xem giỏ hàng có trống hay không sử dụng

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

Ngoài ra, bạn hỏi nếu bạn có thể kiểm tra trang hiện tại bên trong một khối CMS.
Đó có lẽ không phải là một cách tiếp cận tốt (bạn sẽ phải bao gồm các khối tùy chỉnh, điều này sẽ đánh bại mục đích sử dụng các khối CMS trong trang đầu tiên).
Thay vào đó, tốt hơn hết là kiểm tra trang hiện tại trước, sau đó chọn khối CMS để hiển thị dựa trên đó.

EDIT : cố định Mage::app()->getRequest()->getFullActionName()được Mage::app()->getFrontController()->getAction()->getFullActionName()đề cập bởi @Joseph trong các bình luận. Cảm ơn!


Cảm ơn bạn rất nhiều điều này sẽ thực sự giúp tôi bắt đầu!
JasonDavis

1
Chỉ cần lưu ý: sử dụng Mage::app()->getRequest()->getFullActionName()trong mẫu giỏ hàng dẫn đến lỗi nghiêm trọng hoặc ít nhất là nó đã xảy ra với tôi vào ngày 1.7.0.2. $this->getAction()->getFullActionName()làm việc hoàn hảo
Joseph Leedy

Uh, yeah, bạn đang đi đúng hướng. Lỗi của tôi! Cảm ơn!
Vinai 12/12/13

FYI, Mage :: getSingleton ('cms / page') -> getId () cung cấp giá trị null trong sự kiện control_action_predispatch.
MagePologistso

7

Rất nhiều cách tiếp cận bạn có thể thực hiện. Tôi khuyên bạn nên thêm khối của mình thông qua <default>xử lý cập nhật bố cục, điều này sẽ giúp nó có sẵn trên tất cả các trang. Trong _prepareLayout()phương thức của khối , bạn có thể xác định phạm vi bằng cách lấy tên hành động đầy đủ hiện tại từ đối tượng yêu cầu ( $this->getRequest()->getFullActionName()) và sử dụng tên đó để xác định ngữ cảnh.

Sản phẩm và danh mục sẽ được đăng ký trong sổ đăng ký. Khối của bạn cũng có thể xem các thẻ điều khiển cập nhật bố cục, sẽ bao gồm các thẻ ID sản phẩm hoặc ID danh mục.


3

Để phát hiện trang chủ, bạn cần sử dụng chuỗi định danh (ví dụ: "home") để khớp với giá trị cấu hình, thay vì id số:

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

Đây là một số người khác:

$ fullActionName = Mage :: app () -> getFrontControll () -> getAction () -> getFullActionName ();
if ('checkout_onepage_index' == $ fullActionName) {
    // Thủ tục thanh toán
}

if ('checkout_onepage_success' == $ fullActionName) {
    // Thanh toán thành công
}

if ('customer_account_login' == $ fullActionName) {
    // Đăng nhập
}

if ('customer_account_logoutSuccess' == $ fullActionName) {
    // Thoát thành công
}

if ('customer_account_create' == $ fullActionName) {
    // Tạo tài khoản khách hàng
}
if (0 === strpose ($ fullActionName, 'catalogsearch_')) {
    // Tìm kiếm
}

if (0 === strpose ($ fullActionName, 'customer_account_')
 | | 0 === strpose ($ fullActionName, 'customer_address_')
 | | 0 === strpose ($ fullActionName, 'wishlist_')
 | | 0 === strpose ($ fullActionName, 'newsletter_manage_')
 | | 0 === strpose ($ fullActionName, 'review_customer_')
 | | 0 === strpose ($ fullActionName, 'sales_order_')
) {
    // Trang tài khoản khách hàng (có thể có những người khác)
}

Cảm ơn thông tin hữu ích của mọi người!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.