Magento 2: Làm thế nào để kiểm tra xem chúng tôi có ở trang chuyên mục hay trang sản phẩm không?


11

Có cách nào để tôi có thể kiểm tra xem Nếu người dùng trên trang danh mục hoặc trang sản phẩm riêng lẻ trong Magento 2 không?

Mọi sự trợ giúp sẽ rất được trân trọng!


Bạn có nghĩa là sau khi đăng nhập người dùng ngẫu nhiên, chúng ta nên biết người dùng đang ở trang nào.
Arjun

Người dùng không cần đăng nhập. Tôi chỉ muốn kiểm tra trang là trang chuyên mục hoặc trang sản phẩm. Giống như trong Magento 1 Chúng ta có thể kiểm tra nó như thế này: $ category = Mage :: registry ('current_carget');
Đội Magento

Câu trả lời:


28

Bạn có thể thử mã dưới đây nó có thể giúp bạn.

Tiêm một thể hiện \Magento\Framework\App\Request\Httptrong lớp xây dựng của bạn .

Nếu bạn đang ở trong một bộ điều khiển, bạn không cần phải làm điều đó. Bạn đã có thể truy cập nó như thế này$request = $this->getRequest()

public function __construct(
    ...
    \Magento\Framework\App\Request\Http $request
) {
    ...
    $this->_request = $request;
}

Sau đó, bạn có thể kiểm tra xem là danh mục hoặc sản phẩm như thế này:

if ($this->_request->getFullActionName() == 'catalog_product_view') {
    //you are on the product page
}
if ($this->_request->getFullActionName() == 'catalog_category_view') {
    //you are on the category page
}

3
Nếu bạn trực tiếp muốn nó trong tệp phtml thì hãy sử dụng như thế này - $ this-> getRequest () -> getFullActionName () ở đây là điều kiện if tôi đã sử dụng: if ($ this-> getRequest () -> getFullActionName () == ' catalog_carget_view ') {...}
KA9

Xin chào @Arjun, Làm thế nào bạn có thể nhận được tên của danh mục bạn đang ở?
Giăng

5

Bạn có thể sử dụng thể hiện của \ Magento \ Framework \ App \ Request \ http trong trình tạo lớp của bạn. Nếu bạn đang ở trong một bộ điều khiển, bạn không cần phải làm điều đó.

Bạn đã có thể truy cập nó như thế này $request = $this->getRequest()

public function __construct(
    ...
    \Magento\Framework\App\Request\Http $request
) {
    ...
    $this->_request = $request;
}

Sau đó, bạn có thể kiểm tra xem trang chủ hay danh mục hoặc trang sản phẩm như thế này:

if ($this->_request->getFullActionName() == 'cms_index_index') {
    //you are on the homepage
}
if ($this->_request->getFullActionName() == 'catalog_product_view') {
    //you are on the product page
}
if ($this->_request->getFullActionName() == 'catalog_category_view') {
    //you are on the category page
}

Mặt khác sử dụng trực tiếp trong tệp phtml bằng trình quản lý đối tượng

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$request = $objectManager->get('\Magento\Framework\App\Request\Http');

Bạn đã thử mã trên chưa?
Suresh Chikani

4

Tôi đoán, chúng ta có thể trực tiếp sử dụng

$this->getRequest()->getFullActionName()

trong tệp .phtml để có hành động trang hiện tại.


câu trả lời hoàn hảo!!! làm cho ngày của tôi :) +1
SagarPPanchal

0

Nếu bạn đang sử dụng tệp mẫu, ví dụ: .phtml thì bạn có thể gọi trực tiếp trên trang bằng mã dưới đây:

$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance ();

$ request = $ objectManager-> get ('\ Magento \ Framework \ App \ Request \ http');

if ($ request-> getFullActionName () == 'cms_index_index') {// bạn đang ở trang chủ}

if ($ request-> getFullActionName () == 'catalog_product_view') {// bạn đang ở trang sản phẩm}

if ($ request-> getFullActionName () == 'catalog_carget_view') {// bạn đang ở trang chuyên mục}

và nếu bạn có được một danh mục hiện tại và dữ liệu của nó, bạn có thể thực hiện thông qua

$ category = $ objectManager-> get ('Magento \ Framework \ Registry') -> registry ('current_carget');

$ category-> getData ('schbang_carget_name');

trong đó schbang_carget_name là thuộc tính danh mục tùy chỉnh của tôi

Tôi hy vọng điều này có thể giúp một ai đó.


-1

bạn có thể thêm điều kiện, chẳng hạn như

if ($ this-> get SẢNtPage ()) {
  // đây là một trang sản phẩm, làm một số thứ
}
otherif ($ this-> getC CategoryPage ()) {
  // đây là một trang chuyên mục, làm một số thứ
}

Không có chức năng getCategoryPageở bất cứ đâu trong Magento 2, ít nhất là không trong 2.1.10
Jacques
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.