私は Magento 用のカスタム製品インポート モジュールを構築していますが、これまで Magento を使用したことはありません。
すべての製品を含む CSV ファイルがあります。列の 1 つには、製品を割り当てる必要があるカテゴリがスラッシュで区切られて含まれています。元:
Jewelry / Rings / Diamond
Jewelry / Neckless / Diamond
など。
私が抱えている問題は、Diamond カテゴリが任意の数の親カテゴリのサブカテゴリとして存在できることです。私の解決策は、パスを分割することでした(つまり、expload($categoryPath, "/"))
最初の例 (Jewelry / Rings / Diamond) を使用して、ストアのルート カテゴリから開始し、Jewelry のサブカテゴリが含まれているかどうかを確認します。含まれている場合は、そのサブカテゴリの ID を取得し、再帰的にフィニッシュ ラインまで進みます。または少なくともそれが理論です。
私が直面している問題はここにあります...
$rootCategory = Mage::getModel('catalog/category') -> load($rootCategoryId);
$currentCategory = $rootCategory -> getChildrenCategories() -> loadByAttribute('name', $targetCategoryName);
これにより、エラーがスローされます...「非オブジェクトのメンバー関数 getName() への呼び出し」... getChildrenCategories() がコレクションを返し、その上で loadByAttribute を呼び出すことができないためだと思います。
これが誰にとっても理にかなっている場合は、名前だけを使用してルート カテゴリからサブカテゴリを読み込む方法を教えてください。loadByAttribute がカテゴリの読み込みに失敗した場合 (存在しないため)、False が返され、カテゴリを作成できることを期待していました。
Pavelsの提案に応えて、私は試しました:
$targetCategoryName = 'Jewelry';
$subCategories = $rootCategory
-> getChildrenCategories()
-> addAttributeToFilter('name',$targetCategoryName)
-> setCurPage(1)
-> setPageSize(1)
-> load();
$currentCategory = $subCategories
-> getFirstItem();
$currentCategory の名前は「ダミー カテゴリ」です。フィルターが機能していないようです。