Це може насправді не відповісти на питання, але є ймовірність того, що якщо у вас відсутнє перезапис URL-адрес, ви можете вивести продукт із колекції продуктів. І додавання інформації про перезапис URL-адрес не є автоматичним, як ви бачите в \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
.
Те, як мені вдалося змусити додавати URL-адреси переписується, створивши плагін за create()
методом \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
. І як тільки ваш код (або основний код Magento) використовує цю фабрику для примірника колекції продуктів (і це повинно бути як найкраща практика), цей плагін змушує це \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
зробити true
.
Потім продукти перезапису URL-адреси продуктів успішно додаються до продуктів, не потребуючи циклу на них та перезавантаження. Таким чином, це виправляє недоліки, про які говорив @Raphael.
Ось визначення плагіна XML (у вашому di.xml
файлі):
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Catalog\Model\ResourceModel\Product\CollectionFactory">
<plugin name="your_plugin_unique_nane" type="Your\Plugin\Namespace\Plugin" />
</type>
</config>
І код плагіна:
namespace Your\Plugin\Namespace;
use Magento\Catalog\Model\ResourceModel\Product\Collection;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as CoreCollectionFactory;
class Plugin
{
/**
* @param CoreCollectionFactory $subject
* @param Collection $collection
* @return Collection
*/
public function afterCreate(CoreCollectionFactory $subject, Collection $collection)
{
$collection->addUrlRewrite();
return $collection;
}
}