Ini mungkin tidak benar-benar menjawab pertanyaan tetapi kemungkinannya adalah, jika Anda melewatkan penulisan ulang URL, Anda mungkin mengeluarkan produk dari koleksi produk. Dan menambahkan info penulisan ulang URL tidak otomatis seperti yang Anda lihat \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
.
Cara saya berhasil memaksa penambahan penulisan ulang URL adalah dengan membuat plugin pada create()
metode \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
. Dan segera setelah kode Anda (atau kode inti Magento) menggunakan pabrik ini untuk menginstalasi koleksi produk (dan itu harus sebagai praktik terbaik), plugin ini memaksa \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
untuk true
.
Kemudian, penulisan ulang URL produk berhasil ditambahkan ke produk tanpa perlu mengulanginya dan memuatnya kembali. Dengan demikian memperbaiki kekurangan perf yang dibicarakan @Raphael.
Berikut adalah definisi XML plugin (dalam di.xml
file Anda ):
<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>
Dan kode plugin:
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;
}
}