Vous pouvez le faire via des collections:
Vous devez d'abord injecter un CategoryFactory
dans votre constructeur de classe.
Magento 2.0 et 2.1:
public function __construct(
...
\Magento\Catalog\Model\CategoryFactory $categoryFactory
) {
$this->_categoryFactory = $categoryFactory;
parent::__construct(...);
}
Ensuite, n'importe où ailleurs dans votre classe, vous pouvez faire:
$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(...);
}
Ensuite, n'importe où ailleurs dans votre classe, vous pouvez faire:
$collection = $this->collecionFactory
->create()
->addAttributeToFilter('name',$categoryTitle)
->setPageSize(1);
if ($collection->getSize()) {
$categoryId = $collection->getFirstItem()->getId();
}
Raphael chez Digital Pianism
la source
Cela peut être fait en utilisant des contrats de service qui sont considérés comme les meilleures pratiques.
la source
Vous pouvez simplement le faire en utilisant
name
,la source
Essayez ci-dessous le code pour le fichier Phtml:
la source
Je l'ai obtenu avec l'aide de mon collage
:) Étant donné que la collection ne renverra que l'enregistrement que vous souhaitez, vous pouvez récupérer le seul résultat avec
->getFirstItem()
le code ci-dessusla source
Pour refactoriser cela dans un script fonctionnel, je suggère d'utiliser ce qui suit
Edit: j'ai fait et testé un script. J'ai créé un fichier dans /scripts/file.php
la source
J'ai réussi à écrire ma propre méthode (plus efficace):
Ce code met en cache tous les titres: id dans un tableau et interroge seulement 2 fois.
A travaillé pour moi. Plus simple d'utilisation!
la source
Tout d'abord, vous devez injecter la classe d'usine de collecte
Après cela, dans votre méthode, vous pouvez le faire,
la source