Отображение URL-адреса категории внешнего интерфейса в Backend Magento - PullRequest
0 голосов
/ 12 февраля 2019

Привет, как я могу получить значение URL категории в бэкэнде?Я ожидаю, что значение url будет эквивалентно url во внешнем интерфейсе, а НЕ url во внутреннем.Есть ли способ добиться этого в Magento 2?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Хорошо, я нашел ответ на этот вопрос.Решение состоит в том, чтобы использовать приложение / эмулятор, доступный в Magento.Идея состоит в том, чтобы запустить эмуляцию перед выполнением требуемого извлечения URL из Frontend Catgory и закрыть эмуляцию, когда она будет завершена.

Вот ссылки на то, как ее реализовать Эмуляция приложения .Не знал, что так просто решить проблему.Ниже мой код выглядит следующим образом:

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 или во внешнем интерфейсе

0 голосов
/ 12 февраля 2019

Чтобы получить URL категории, вам нужно использовать функцию 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";
}
...