Magento2で現在のCMSページIDを取得する


7

Magento2で現在のCMSページIDを取得しようとしています。以下は、Magento1.xで使用したコードですが、明らかに機能しなくなりました。しかし、Magento2でこれを行う方法を理解することができません。

if (Mage::app()->getFrontController()->getRequest()->getRouteName() == 'cms') {
    $_pageId = Mage::getBlockSingleton('cms/page')->getPage()->getPageId();
}

以下に示すレジストリを使用しても機能しません。

 $this->_coreRegistry->registry('cms_page')->getId()

回答:


15

わかりました、CMSヘルパー関数を調べてみました。

protected $_page;

public function __construct(
    ...
    \Magento\Cms\Model\Page $page,
    ...
    array $data = []
) {
    parent::__construct($context, $data);
    ...
    $this->_page = $page;
    ...
}

if ($this->_page->getId()) {
    $pageId = $this->_page->getId();
}

このコードは、機能をブロックまたはヘルパークラスに含める方法の例です。1対1でコピーすることはできません。CMSヘルパーで\ vendor \ magento \ module-cms \ Helper \ Page.php
Solide

これは本当にこれを達成する正しい方法ですか?DIを使用して状態を保持するオブジェクトを挿入するのは、奇妙に思えます。
Giel Berkers、2018

@Solide試したストアビューごとにページ情報を取得するにはどうすればよい$this->_pageFactory->create()->setStoreId(1)->load($cmsId)ですか?
Juliano Vargas

11

ObjectManagerを使用

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cmsPage = $objectManager->get('\Magento\Cms\Model\Page');

echo $cmsPage->getIdentifier(); //Get Current CMS Page Identifier
echo $cmsPage->getId(); //Get Current CMS Page ID

工場での方法

protected $_cmsPage;

public function __construct(
    ...
    \Magento\Cms\Model\Page $cmsPage,
    ...
) {
    ...
    $this->_cmsPage = $cmsPage;
    ...
}

echo $this->_cmsPage->getIdentifier(); //Get Current CMS Page Identifier
echo $this->_cmsPage->getId(); //Get Current CMS Page ID

2

この解決策を試してください。これは、現在のCMSページを識別するのに役立ちます。

<?php
    $objectManagerCms = \Magento\Framework\App\ObjectManager::getInstance();
    $cmsPage = $objectManagerCms->get('\Magento\Cms\Model\Page');
    echo $cmsPage->getIdentifier();
    echo $cmsPage->getId();
?>

-1

同じレイアウトの場合 cms_page_view

$ pageId = $ this-> getLayout()-> getBlock( "cms_page")-> getPage()-> getId();

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