Magento 2:カテゴリページまたは製品ページにいるかどうかを確認するにはどうすればよいですか?


12

ユーザーがカテゴリページ、またはMagento 2の個々の製品ページにいる場合、それを確認する方法はありますか?

どんな助けでも大歓迎です!


つまり、ユーザーがランダムにログインした後、ユーザーがどのページにいるかを知る必要があります。
アルジュン2016

ユーザーがログインする必要はありません。ページがカテゴリページか商品ページかを確認したいだけです。Magento 1のように、次のように確認できます。$ category = Mage :: registry( 'current_category');
Magentoチーム

回答:


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

こんにちは@アルジュン、あなたはどうやってあなたがいるカテゴリーの名前を手に入れますか?
ジョン

5

たぶん、私たちは直接使うことができます

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

.phtmlファイルで、現在のページアクションを取得します。


完璧な答え!!! 私の日を作った:) +1
SagarPPanchal

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()){
  //これはカテゴリページです。
}

getCategoryPageMagento 2には機能がありません。少なくとも2.1.10では機能しません
ジャック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.