이것은 실제로 질문에 대답하지는 않지만 URL 재 작성이 누락되면 제품이 제품 콜렉션에서 벗어날 수 있습니다. 에서 볼 수 있듯이 URL 재 작성 정보를 추가하는 것은 자동이 아닙니다 \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite.
URL 다시 쓰기를 강제로 관리하는 create()방법은 의 메소드 에서 플러그인을 만드는 것입니다 \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory. 그리고 곧 코드 (또는 젠토의 핵심 코드)와 같은 제품을 수집 instanciating이 공장을 사용하는 (그리고해야한다 등의 모범 사례),이 플러그인을 강제 \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite로 true.
그런 다음 제품 URL을 다시 작성하지 않아도 제품 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;
}
}