您好我如何在后端检索类别网址的值?我期待url值等于前端的url而不是后端的url。有没有办法在Magento 2中实现这一目标?
好的,我找到了答案。解决方案是使用Magento中提供的App / Emulator。我们的想法是在您执行所需的前端Catgory URL检索之前启动模拟,并在完成后关闭模拟。
以下是如何实施App Emulation的链接。不知道解决这个问题就这么简单。下面是我的代码的样子
class MenuCategory extends \Magento\Framework\Model\AbstractModel implements \Magento\Framework\DataObject\IdentityInterface
{
public function getStoreCategories($storeManager, $emulator)
{
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$emulator->startEnvironmentEmulation(null, \Magento\Framework\App\Area::AREA_FRONTEND, true);
$categoryFactory = $objectManager->create('Magento\Catalog\Model\ResourceModel\Category\CollectionFactory');
$categories = $categoryFactory->create()
->addAttributeToSelect('*')
->setStore($storeManager->getStore())
->addAttributeToFilter('level', array('eq' => 2))
->addIsActiveFilter()
->addAttributeToSort('position', 'asc');
foreach ($categories as $category) {
echo $category->getUrl() . " - " . $category->getUrl() . "\n";
}
$emulator->stopEnvironmentEmulation();
return $content;
}
}
所以这里的想法是实例化模拟器并让magento认为你要修改或执行就像你在前端因此代码\ Magento \ Framework \ App \ Area :: AREA_FRONTEND当你关闭环境模拟它会去回到你是否在adminhtml或前端的方式
为了获得类别网址,您需要使用Magento\Catalog\Model\CategoryRepository
函数getUrl()
,如下所示:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$emulator->startEnvironmentEmulation(null, \Magento\Framework\App\Area::AREA_FRONTEND, true);
$categoryFactory = $objectManager->create('Magento\Catalog\Model\ResourceModel\Category\CollectionFactory');
$categories = $categoryFactory->create()
->addAttributeToSelect('*')
->setStore($storeManager->getStore())
->addAttributeToFilter('level', array('eq' => 2))
->addIsActiveFilter()
->addAttributeToSort('position', 'asc');
foreach ($categories as $category) {
$categoryObject = $objectManager->create('Magento\Catalog\Model\CategoryRepository')->get($category->getId());
echo $categoryObject->getUrl()."\n";
}