Puedes hacerlo a través de colecciones:
Primero debes inyectar un CategoryFactory
en el constructor de tu clase.
Magento 2.0 y 2.1:
public function __construct(
...
\Magento\Catalog\Model\CategoryFactory $categoryFactory
) {
$this->_categoryFactory = $categoryFactory;
parent::__construct(...);
}
Luego, en cualquier otro lugar de tu clase, puedes hacer:
$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(...);
}
Luego, en cualquier otro lugar de tu clase, puedes hacer:
$collection = $this->collecionFactory
->create()
->addAttributeToFilter('name',$categoryTitle)
->setPageSize(1);
if ($collection->getSize()) {
$categoryId = $collection->getFirstItem()->getId();
}
Raphael en Digital Pianism
fuente
Esto se puede hacer mediante contratos de servicio que se consideran las mejores prácticas.
fuente
Puedes hacerlo simplemente usando
name
,fuente
Pruebe a continuación el código para el archivo Phtml:
fuente
Lo obtuve con la ayuda de mi collage.
:) Dado que la colección solo devolverá el registro que desea, puede obtener el único resultado con
->getFirstItem()
el código anteriorfuente
Para refactorizar eso en un script funcional, sugiero usar lo siguiente
Editar: hice y probé un guión. Creé un archivo en /scripts/file.php
fuente
Logré escribir mi propio método (más eficiente):
Este código almacena en caché todos los títulos: identificadores en una matriz, y solo consulta 2 veces.
Trabajó para mi. ¡Más fácil de usar!
fuente
Primero, debe inyectar la clase de fábrica de colección
Después de eso dentro de su método, puede hacer esto,
fuente