Możesz to zrobić za pomocą kolekcji:
Najpierw musisz wstrzyknąć CategoryFactory
konstruktor klasy.
Magento 2.0 i 2.1:
public function __construct(
...
\Magento\Catalog\Model\CategoryFactory $categoryFactory
) {
$this->_categoryFactory = $categoryFactory;
parent::__construct(...);
}
Następnie w dowolnym miejscu w klasie możesz:
$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(...);
}
Następnie w dowolnym miejscu w klasie możesz:
$collection = $this->collecionFactory
->create()
->addAttributeToFilter('name',$categoryTitle)
->setPageSize(1);
if ($collection->getSize()) {
$categoryId = $collection->getFirstItem()->getId();
}
Raphael at Digital Pianism
źródło
Można tego dokonać za pomocą umów o świadczenie usług, które są uważane za najlepszą praktykę.
źródło
Możesz to po prostu zrobić za pomocą
name
,źródło
Wypróbuj poniższy kod pliku phtml:
źródło
Mam go z pomocą mojego kolażu
:) Ponieważ kolekcja zwróci tylko rekord, który chcesz, możesz pobrać jedyny wynik
->getFirstItem()
na powyższym kodzieźródło
Aby zmienić to w działającym skrypcie, sugeruję użycie następujących
Edycja: Stworzyłem i przetestowałem skrypt. Utworzyłem plik w /scripts/file.php
źródło
Udało mi się napisać własną (bardziej wydajną) metodę:
Ten kod buforuje wszystkie tablice title: id do tablicy i wysyła zapytanie tylko 2 razy.
Pracował dla mnie. Łatwiejszy w użyciu!
źródło
Najpierw musisz wstrzyknąć klasę fabryczną kolekcji
Następnie możesz to zrobić w swojej metodzie,
źródło