Nhận id trang CMS hiện tại trong Magento2


7

Tôi đang cố gắng truy xuất id trang CMS hiện tại trong Magento2. Dưới đây là mã tôi đã sử dụng cho Magento1.x rõ ràng không còn hoạt động nữa. Nhưng tôi không thể hiểu được cách làm điều này cho Magento2.

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

Sử dụng sổ đăng ký như hình dưới đây sẽ không hoạt động.

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

Câu trả lời:


15

Ok, tôi phát hiện ra sau khi đào xung quanh trong hàm trợ giúp 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();
}

Mã này là một ví dụ về cách đưa chức năng vào một khối hoặc lớp người trợ giúp. Nó không được sao chép 1 trên 1. Kiểm tra trình trợ giúp CMS để biết thêm ngữ cảnh tại \ eller \ magento \ module-cms \ Helper \ Page.php
Solide

Đây thực sự là cách đúng đắn để đạt được điều này? Có vẻ như thật kỳ lạ khi sử dụng DI để tiêm một đối tượng có trạng thái.
Giel Berkers

@Solide Làm cách nào tôi có thể nhận thông tin trang trên mỗi lượt xem cửa hàng tôi đã thử $this->_pageFactory->create()->setStoreId(1)->load($cmsId)?
Juliano Vargas

11

Với 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

Với phương pháp nhà máy

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

Hãy thử giải pháp này. Điều này sẽ giúp bạn xác định trang CMS hiện tại.

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

-1

Nếu bạn ở cùng một bố cục cms_page_view

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

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.