Я пытаюсь получить атрибуты текущего продукта в блоке в Magento 2. Я могу получить продукт, например, id 1:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->create('\Magento\Catalog\Model\ProductRepository')->getById(1);
Я не знаю, как получить идентификатор текущего продукта, хотя. Как мне это сделать?
getProduct()
вMagento\Catalog\Block\Product\View
Ответы:
Для того, чтобы получить текущий продукт, один из рекомендуемых способов:
Magento\Catalog\Block\Product\View\AbstractView
.$block->getProduct()
в вашем файле phtml.источник
Хотя другие ответы верны, они также не являются рекомендуемым / правильным решением.
Использование ObjectManager абсолютно запрещено в Magento 2. Поэтому, пожалуйста, не полагайтесь на это решение, вместо этого используйте надлежащий DI для достижения этого. Чтобы узнать, как использовать DI в Magento 2, см. Этот ресурс: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html.
Расширение AbstractView не обязательно. Если вы посмотрите на оригинальную функцию в AbstractView, вы увидите, что Magento использовал реестр для получения продукта. Вам не нужно расширять определенный класс, чтобы сделать это, просто введите Magento \ Framework \ Registry в ваш конструктор и запросите элемент реестра «product».
Пример полного кода:
источник
Если вы используете Magento 2.1 или основной, вы можете использовать это,
helper
потому что старый метод устарел.источник
Решение @Wesley Vestjens также помогло мне. Просто убедитесь, что обратили внимание на модификатор доступа, так как приватный может не быть тем, что вы хотите, если вы используете
getProduct()
в своем шаблоне. В приведенном выше примере он работает какgetProductName()
публичный метод для использования.источник
getProduct()
является частным иgetProductName()
публичным. В более новых версиях Magento (2.2 / 2.3 и выше) эти методы также считаются устаревшими, и вместо них следует использовать View Models.