Magento 2:如何检查我们是在类别页面还是产品页面?


12

有没有一种方法可以检查Magento 2中的用户是类别页面还是单个产品页面?

任何帮助将不胜感激!


您的意思是,在随机登录用户之后,我们应该知道该用户在哪个页面上。
Arjun

用户不需要登录。我只想检查页面是类别页面还是产品页面。就像在Magento 1中一样,我们可以像这样检查它:$ category = Mage :: registry('current_category');
Magento队

Answers:


29

您可以尝试下面的代码,它可能会帮助您。

注入一个实例\Magento\Framework\App\Request\Http类的构造函数。

如果您在控制器中,则不需要这样做。您已经可以像这样访问它$request = $this->getRequest()

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

然后,您可以检查是这样的类别还是产品

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
如果您直接在phtml文件中使用它,则可以这样使用-$ this-> getRequest()-> getFullActionName()这是我使用的if条件:if($ this-> getRequest()-> getFullActionName()==' catalog_category_view'){...}
KA9

嗨,@ Arjun,您将如何获得所属类别的名称?
约翰(John John)


5

您可以在类构造函数中使用\ Magento \ Framework \ App \ Request \ Http的实例。如果您在控制器中,则不需要这样做。

您已经可以像这样访问它 $request = $this->getRequest()

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

然后,您可以像这样检查主页,类别页或产品页:

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
}

否则直接使用对象管理器在phtml文件中使用

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

您是否尝试过上面的代码?
Suresh Chikani

1

如果使用模板文件(即.phtml),则可以直接使用以下代码在页面上调用:

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

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

if($ request-> getFullActionName()=='cms_index_index'){//您在首页上}

if($ request-> getFullActionName()=='catalog_product_view'){//您在产品页面上}

if($ request-> getFullActionName()=='catalog_category_view'){//您位于类别页面}

如果您要获取当前类别及其数据,可以通过

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

$ category-> getData('schbang_category_name');

其中schbang_category_name是我的自定义类别属性

我希望这可以帮助某人。


-1

您可以添加条件,例如

if($ this-> getProductPage()){
  //这是一个产品页面,做一些事情
}
elseif($ this-> getCategoryPage()){
  //这是一个类别页面,做一些事情
}

有没有功能getCategoryPage在Magento 2的任何地方,至少在2.1.10
雅克·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.