Magento 2에서 IsHomePage를 확인하는 방법? 우리는 홈페이지에 있습니까?


9

현재 페이지가 magento 2의 홈페이지, 카테고리 페이지, 제품 페이지 및 cms 페이지인지 확인하고 싶습니다


어떤 상황에서 이것을 확인하고 싶습니까? 제어 장치? 블록?
Marius

우리는 Magento 1 버전을 사용합니다. Mage :: getBlockSingleton ( 'page / html_header')-> getIsHomePage (); 나는 등 홈페이지와 같은 데이터 pagewise, 카테고리 페이지, 제품 페이지 및 CMS를 페이지를 표시 할
MagikVishal

1
나는 그것을 알고 있지만 이것에 대답하기 위해 magento2에서 이것을 사용하고 싶은 곳을 알고 싶습니다. m2에는 전역 마법사 클래스가 없습니다.
Marius

답변:


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 파일에서 사용하십시오.
Marius

좀 더 자세히 설명해 주시겠습니까? 어떻게합니까?
Max

@Max 더 많은 정교함이 필요하십니까? 나는 대답이 분명하다고 생각합니까? 알고 싶은 내용을 알려주세요
Marius

죄송합니다. 다시 읽고 명확하게 읽으십시오. 감사합니다.
Max

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
객체 관리자를 사용하지 마십시오
Marius

이것은 나를 위해 일했습니다. 왜 Object Manager를 사용하지 않습니까?
TheBlackBenzKid

개체 관리자를 직접 사용하는 것은 좋지 않습니다. Magento Official 개발자 문서에 따르면 "Magento는 클래스의 실제 종속성을 숨기므로 코드에서 ObjectManager를 직접 사용하는 것을 금지합니다."
Makwana Ketan

0

디자인 패턴으로 인해 의존성 주입. 요청시 리소스를 요청하는 모듈을 만듭니다. 객체 관리자는 그 패러다임에 반대합니다. 그러나 그것은 훌륭하게 작동하지만 마법사를 다시 사용하는 것과 같습니다.


멍청이들 위에 언급해야 돼, 내 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.