Вы можете сделать это через коллекции:
Сначала вам нужно CategoryFactory
вставить конструктор вашего класса.
Magento 2.0 и 2.1:
public function __construct(
...
\Magento\Catalog\Model\CategoryFactory $categoryFactory
) {
$this->_categoryFactory = $categoryFactory;
parent::__construct(...);
}
Тогда где-нибудь еще в вашем классе вы можете сделать:
$collection = $this->_categoryFactory->create()->getCollection()->addAttributeToFilter('name',$categoryTitle)->setPageSize(1);
if ($collection->getSize()) {
$categoryId = $collection->getFirstItem()->getId();
}
Magento 2.2:
public function __construct(
...
\Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $collecionFactory
) {
$this->_collectionFactory = $collecionFactory;
parent::__construct(...);
}
Тогда где-нибудь еще в вашем классе вы можете сделать:
$collection = $this->collecionFactory
->create()
->addAttributeToFilter('name',$categoryTitle)
->setPageSize(1);
if ($collection->getSize()) {
$categoryId = $collection->getFirstItem()->getId();
}
Рафаэль в цифровом пианизме
источник
Это может быть сделано с использованием сервисных контрактов, которые считаются наилучшей практикой.
источник
Вы можете просто сделать это, используя
name
,источник
Попробуйте ниже код для Phtml файла:
источник
Я получил это с помощью моего коллажа
:) Так как коллекция будет возвращать только ту запись, которую вы хотите, вы можете получить единственный результат
->getFirstItem()
в приведенном выше кодеисточник
Чтобы изменить это в работающем скрипте, я предлагаю использовать следующее
Изменить: я сделал и протестировал скрипт. Я создал файл в /scripts/file.php
источник
Мне удалось написать свой собственный (более эффективный) метод:
Этот код кэширует все заголовки: идентификаторы в массив, и только запрос 2 раза.
Работал на меня. Проще в использовании!
источник
Сначала нужно ввести коллекцию фабричного класса
После этого внутри вашего метода, вы можете сделать это,
источник