私は、ドラッグ アンド ドロップでカスタム製品ソート モジュールを開発しました。シンプルさと速度のために、EAV テーブルに直接更新します。この新しい位置を次のように保存します。
$write = Mage::getSingleton('core/resource')->getConnection('core_write');
$write->beginTransaction();
for ($i = 0; $i < sizeof($ids); $i++)
{
$query = "UPDATE catalog_category_product SET position='".$i."' WHERE product_id='".$ids[$i]."' AND category_id='".$cat."'";
$write->query($query);
}
$write->commit();
私の質問は、影響を受ける変更のみに再インデックスを強制して、フロントエンドで位置の並べ替えが表示されるようにする方法です。
たとえば、次のようないくつかの異なるイベントをディスパッチしようとしました。
Mage::dispatchEvent('catalog_product_flat_rebuild', array(
'store_id' => Mage::app()->getStore()->getStoreId(),
'table' => Mage::getResourceSingleton('catalog/category_flat')->getMainStoreTable(Mage::app()->getStore()->getStoreId())
));
しかし、フロントエンドにはまだ古いソート順が表示されます。これにより、完全なフラット テーブルのインデックスが再作成されます。位置を変更した製品 ID とカテゴリ ID の配列のインデックスを再作成することをお勧めします。これをどのように達成するかについてのアイデアはありますか?
前もって感謝します!