Bu soruya gerçekten cevap vermeyebilir, ancak URL yeniden yazma işlemini kaçırırsanız ürününüzü bir ürün koleksiyonundan çıkarıyor olabilirsiniz. URL yeniden yazma bilgileri eklemek, gördüğünüz gibi otomatik değildir \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
.
URL yeniden yazma işlemlerinin eklenmesini zorunlu kılmanın yolu, create()
yönteminde bir eklenti oluşturmaktır \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
. Ve en kısa kodunuzda (veya Magento'nın çekirdek kodu) gibi bir ürün koleksiyonu instanciating için bu fabrikayı kullanmaktadır (ve olması gerektiği gibi en iyi uygulamaların), bu eklenti kuvvetleri \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
için true
.
Ardından, ürünlerin URL yeniden yazma işlemleri, ürünlerde döngü oluşturmaya ve yeniden yüklemeye gerek kalmadan ürünlere başarıyla eklenir. Böylece @ Raphael'in bahsettiği mükemmel dezavantajı giderir.
Eklenti XML tanımı ( di.xml
dosyanızda):
<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>
Ve eklenti kodu:
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;
}
}