タイトルにあるように、製品をカテゴリに一括割り当てする必要があり、管理者からは一度に1つの製品しか編集できません。カテゴリページの[カテゴリ製品]タブからそれらを一括追加しても機能しない理由がわかりません。
そのため、phpMyAdminなどを使用するなど、高速な別のメソッドが必要です。
何か助けはありますか?
前もって感謝します!
タイトルにあるように、製品をカテゴリに一括割り当てする必要があり、管理者からは一度に1つの製品しか編集できません。カテゴリページの[カテゴリ製品]タブからそれらを一括追加しても機能しない理由がわかりません。
そのため、phpMyAdminなどを使用するなど、高速な別のメソッドが必要です。
何か助けはありますか?
前もって感謝します!
Magentoの外部でこれを行うための簡単なスクリプトを作成しました。必ず最初に単一の製品でこれをテストし、期待どおりに表示されることを確認してください。
// Load Magento
require_once 'path/to/app/Mage.php';
Mage::app();
// $productIds is an array of the products you want to modify.
// Create it however you want, I did it like this...
$productsIds = Mage::getModel('catalog/product')->getCollection()
->addAttributeToFilter('sku', array('like' => 'something'))
->getAllIds();
// Array of category_ids to add.
$newCategories = array(20);
foreach ($productIds as $id) {
$product = Mage::getModel('catalog/product')->load($id);
$product->setCategoryIds(
array_merge($product->getCategoryIds(), $newCategories)
);
$product->save();
}
製品の既存のカテゴリを上書きする場合は、のみに変更array_merge(...)
して$newCategories
ください。
私は、データベース側からこの問題に取り組むことを躊躇します。その方向に進む場合は、必ず多くのバックアップを取り、使用率が低いときに実行してください。
Magentoフォーラムの次のスレッドは、まったく同じ問題を特定しています。あるポスターは、例を挙げて生のSQLアプローチを推奨しています。繰り返しになりますが、注意が必要です。必ずバックアップを取るようにしてください。
スレッドから私が一番好きな答え(Magento MVPによる投稿):
あなたがそれらを望まないカテゴリーに入り、製品リストを見つけてください。削除する製品のチェックボックスをクリックし、小さなドロップダウンから[削除]を選択します。
Now go into the category where you do want them, go to the product list. Select the NO dropdown so it shows items not in the category. You might have to do a selective search to limit stuff and do it in a couple iterations. Click the check boxes and tell it to add stuff.
これは、magento APIを使用して行うこともできます。これは、製品を大量に追加するために使用するスクリプトです。sku.txtには、1行に1つのSKUが含まれています。
<?php
$wsdlUrl = "magento-root/index.php/api/soap/?wsdl";
$proxy = new SoapClient($wsdlUrl);
$sessionId = $proxy->login('apiuser', 'apipasswd');
$listOfDiscountedSKUFile = "sku.txt";
function readinFile($filePath)
{
$fp = fopen($filePath,'r') or exit("Unable to open file!");
$dataItems = array();
while(!feof($fp))
{
$dataItems[] = trim(fgets($fp));
}
fclose($fp);
var_dump($dataItems);
return $dataItems;
}
function addToCategory($sku,$categoryId)
{
global $proxy,$sessionId;
$proxy->call($sessionId, 'category.assignProduct', array($categoryId, $sku));
}
function IsNullOrEmptyString($question){
return (!isset($question) || trim($question)==='');
}
$categoryId = 82;//e.g.
$listOfSKU = readinFile($listOfDiscountedSKUFile);
foreach($listOfSKU as $sku)
{
addToCategory($sku,$category);
}
?>
私は次のコードで問題を解決することができました:
$write = Mage::getSingleton('core/resource')->getConnection('core_write');
$x = 1171;
$y = 2000;
$categoryID = 4;
$productPosition = 0;
while($x <= $y) {
$write->query("REPLACE INTO `catalog_category_product` (`category_id`, `product_id`, `position`) VALUES ($categoryID, $x++, $productPosition)");
}
echo "The job is done";
?>
コードがすべての人にとって明確であることを願っています。そうでない場合は、返信してください。説明しようと思います。
@nachito:ここにあります。