Magento 2でIsHomePageを確認する方法 私たちはホームページにいますか?


9

現在のページがホームページ、カテゴリページ、製品ページ、CMSページであるかをmagento 2で確認したい


これをどのような状況で確認しますか?コントローラ?ブロック?
マリウス

関数Mage :: getBlockSingleton( 'page / html_header')-> getIsHomePage();を使用するMagento 1バージョン ホームページ、カテゴリページ、製品ページ、
CMS

1
私はそれを知っていますが、これに答えるために、これをmagento2のどこで使用したいのかを知りたいのです。m2にはグローバルメイジクラスはありません。
マリウス

回答:


20

これを試すことができます:\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
}

@marius-phtmlファイルで同じようにチェックするにはどうすればよいですか?
Manashvi Birla

2
ブロックを$this->_request->getFullActionName()使用して、広告を返すメソッドをphtmlファイルで使用します。
マリウス

詳しく説明してもらえますか?どうやってそれを行うのですか?
最大の

@マックスあなたはもっと手の込んだものが必要ですか?答えははっきりしていると思いますか?知りたいことを教えてください
マリウス

申し訳ありませんが、私はそれを読み直しました。ありがとうございました。
最大

7

phtmlファイルの中からこれは私のために働きました:

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
}

それは私のために働きます
sandip

3

これを試してください:

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

2
オブジェクトマネージャを使用しない
マリウス

これでうまくいきました。Object Managerを使用しないのはなぜですか?
TheBlackBenzKid 2017

Object Managerを直接使用することは悪い習慣です。Magentoの公式開発ドキュメントで は、「Magentoはクラスの実際の依存関係を隠すため、コードでのObjectManagerの直接使用を禁止しています」と述べています。
Makwana Ketan 2017

0

依存性注入の設計パターンのため。オンデマンドでリソースをリクエストするモジュールを作成します。オブジェクトマネージャはそのパラダイムに反対しています。しかし、それは素晴らしい働きをしますが、Mageを何度も使用するようなものです-遅いです。


上にコメントすることになっているおっと、私のb。
クリスアンダーソン

0

以下のコードを試してください:

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();
}

オブジェクトマネージャの使用

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$logo = $objectManager->get('Magento\Theme\Block\Html\Header\Logo');
var_dump($logo->isHomePage());
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.