Làm cách nào để kiểm tra IsHomePage trong Magento 2? Có phải chúng ta trên trang chủ?


9

Tôi muốn kiểm tra trang hiện tại là trang chủ, trang danh mục, trang sản phẩm & trang cms trong magento 2


trong bối cảnh nào bạn muốn kiểm tra điều này? điều khiển? khối?
Marius

Phiên bản Magento 1 chúng tôi sử dụng chức năng Mage :: getBlockSingleton ('page / html_header') -> getIsHomePage (); tôi muốn hiển thị dữ liệu theo trang như trang chủ, trang danh mục, trang sản phẩm & trang cms, v.v.
MagikVishal

1
Tôi biết điều đó, nhưng để trả lời điều này tôi muốn biết bạn muốn sử dụng cái này ở đâu trong magento2. Không có lớp pháp sư toàn cầu tính bằng m2.
Marius

Câu trả lời:


20

Bạn có thể thử điều này: Tiêm một thể hiện \Magento\Framework\App\Request\Httptrong hàm tạo của lớp. 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 nếu trang chủ 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
}

@marius - Làm cách nào để kiểm tra tương tự trong tệp phtml?
Manashvi Birla

2
viết một phương thức trong khối trả về $this->_request->getFullActionName()quảng cáo sử dụng nó trong tệp phtml.
Marius

Bạn có thể giải thích? Làm thế nào để làm điều đó?
Tối đa

@Max bạn cần gì thêm công phu? Tôi nghĩ câu trả lời là rõ ràng? nói cho tôi biết những gì bạn muốn biết
Marius

Xin lỗi, tôi đọc lại và rõ ràng. Cảm ơn bạn.
Tối đa

7

Từ tập tin phtml bên trong này đã làm việc cho tôi:

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

nó hoạt động với tôi
sandip

3

Hãy thử cái này:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$request = $objectManager->get('Magento\Framework\App\Action\Context')->getRequest();
if ($request->getFullActionName() == 'cms_index_index') {
    // is homepage
}

2
không sử dụng trình quản lý đối tượng
Marius

Điều này làm việc cho tôi. Tại sao không sử dụng Object Manager?
TheBlackBenzKid

Đó là thực tế xấu khi sử dụng Trình quản lý đối tượng trực tiếp. Magento Official dev doc nói "Magento cấm sử dụng trực tiếp ObjectManager trong mã của bạn vì nó ẩn các phụ thuộc thực sự của một lớp."
Makwana Ketan

0

Bởi vì mẫu thiết kế Dependency Injection. Bạn tạo một mô-đun để yêu cầu một tài nguyên theo yêu cầu. Quản lý đối tượng đang đi ngược lại mô hình đó. Tuy nhiên, nó hoạt động rất tốt nhưng giống như sử dụng Mage trở lại - chậm.


Rất tiếc phải bình luận ở trên, b.
Chris Anderson

0

Hãy thử mã dưới đây:

protected $_logo;   

public function __construct(
    \Magento\Backend\Block\Template\Context $context,
    \Magento\Theme\Block\Html\Header\Logo $logo,
    array $data = []
)
{       
    $this->_logo = $logo;
    parent::__construct($context, $data);
}

public function isHomePage()
{   
    return $this->_logo->isHomePage();
}

Sử dụng Trình quản lý đối tượng

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$logo = $objectManager->get('Magento\Theme\Block\Html\Header\Logo');
var_dump($logo->isHomePage());
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.