Magento 2.1 - PHTML에서 카테고리를 (간단히) 호출
-
30-09-2020 - |
문제
다음과 같이 하기 전에:
$_categories = Mage::helper('catalog/category')->getStoreCategories();
foreach($_categories as $_category):
echo $_category->getName();
endforeach;
단순하고 간단합니다. 카테고리를 나열하기 위해 phtml 파일에 넣으면 됩니다.Magento 2에서는 간단하지 않습니다.
가능한 모든 솔루션에 대해 Google 검색의 4페이지를 스크롤하는 것 옆에 이을 시도했습니다.어느 것도 작동하지 않습니다.새로운 CMS에 대한 내 추론에 문제가 있다고 생각합니다.아마도 이 코드의 구조에서 논리를 볼 필요가 있을 것입니다.
위의 예와 같이 phtml 파일에 모든 상점 카테고리를 나열하는 방법을 알려주실 수 있습니까?
해결책
몇 가지 중요한 사용자 지정 규칙을 중단하여 결과를 얻으려면 Magento 1에서와 거의 동일하게 수행할 수 있습니다.
$_categories = $this->helper('Magento\Catalog\Helper\Category')
->getStoreCategories();
foreach($_categories as $_category):
echo $_category->getName();
endforeach;
이것은 M2의 모든 PHTML 템플릿이 \\Magento\\Framework\\View emplateEngine\\Php 클래스/객체(그래서 $this는 이 객체를 가리키고 있음)의 컨텍스트에서 렌더링되고 범주 도우미는 아직M2에서 사용할 수 있습니다.
그러나 올바르게 수행하려면 고유한 블록 클래스를 만들고 블록 클래스에 대한 적절한 종속성을 정의하는 것이 좋습니다(이 경우 동일한 도우미이거나 카탈로그 모듈 API를 대신 사용하는 것이 더 나을 수 있습니다. 예: Magento\\Catalog\\Api\\CategoryManagementInterface::getTree)
그리고 확실히 여러 클래스를 다시 작성하거나 여러 모듈을 작성하거나 시스템을 완전히 다시 작성할 필요가 없습니다.
다른 팁
V Korotun의 답변 덕분에 이 부분이 작동하게 되었습니다.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$categoryFactory = $objectManager->create('Magento\Catalog\Model\ResourceModel\Category\CollectionFactory');
$categories = $categoryFactory->create()
->addAttributeToSelect('*')
->addAttributeToFilter('is_active',1)
->setOrder('position', 'ASC');
foreach ($categories as $category) :
echo $category->getName();
endforeach;