Você pode fazer isso através de coleções:
Primeiro você precisa injetar um CategoryFactory
no seu construtor de classe.
Magento 2.0 e 2.1:
public function __construct(
...
\Magento\Catalog\Model\CategoryFactory $categoryFactory
) {
$this->_categoryFactory = $categoryFactory;
parent::__construct(...);
}
Em qualquer outro lugar da sua classe, você pode:
$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(...);
}
Em qualquer outro lugar da sua classe, você pode:
$collection = $this->collecionFactory
->create()
->addAttributeToFilter('name',$categoryTitle)
->setPageSize(1);
if ($collection->getSize()) {
$categoryId = $collection->getFirstItem()->getId();
}
Raphael na Digital Pianism
fonte
Isso pode ser feito usando contratos de serviço considerados melhores práticas.
fonte
Você pode fazer isso usando simples
name
,fonte
Tente abaixo o código para o arquivo phtml:
fonte
Consegui com a ajuda da minha colagem
:) Como a coleção retornará apenas o registro desejado, você poderá obter o único resultado
->getFirstItem()
no código acimafonte
Para refatorar isso em um script em funcionamento, sugiro usar o seguinte
Edit: Eu criei e testei um script. Criei um arquivo em /scripts/file.php
fonte
Consegui escrever meu próprio método (mais eficiente):
Esse código armazena em cache todos os títulos: ids em uma matriz e consulta apenas duas vezes.
Trabalhou para mim. Mais fácil de usar!
fonte
Primeiro, você precisa injetar a classe de fábrica de coleta
Depois disso dentro do seu método, você pode fazer isso,
fonte