Вопрос по categories, product, mass-assignment, magento – Magento массово назначить продукты в категории

3

Как видно из заголовка, мне нужно массово назначить товары категории, и от администратора я могу редактировать только один товар за раз; я не знаю, почему просто не работает массовое добавление их из категории «продукты» вкладка на странице категории.
Вот почему мне нужен другой быстрый метод, такой как использование phpMyAdmin или что-то подобное.

Любая помощь?

Заранее спасибо!

Также попробуйте мое расширение:Dynamic Category Products - он использует простые для определения правил, позволяющие назначать товары в категорию. proxiblue

Ваш Ответ

4   ответа
2

Это скрипт, который я использую для массового добавления товаров. sku.txt содержит один 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);
}

?>
уже решено. Спасибо, в любом случае. DanCapitanDePlai
6

Если вы идете в этом направлении, убедитесь, что сделали много резервных копий и делайте это во время низкой нагрузки.

следующая тема на форуме Magento идентифицирует ту же проблему. Один из авторов рекомендует использовать сырой sql-подход с примером. Опять же, я был бы осторожен - убедитесь, что вы делаете резервные копии.

Ответ, который мне нравится больше всего из ветки (опубликованной Magento MVP):

Go into the category you don’t want them in, find the product list. Click the check boxes on the products you want to remove and select delete from the little dropdown.

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.

@ RThomas: об ответе, который вам нравится больше всего: я знаю, что это странно, и у меня нет никаких намеков, почему это не работает. У меня есть множество неназначенных продуктов, и когда я пытаюсь получить их со страницы категории, magento ведет себя странно и не хочет добавлять их, а иногда даже уменьшает общее количество продуктов в этой категории. DanCapitanDePlai
да, но безрезультатно. Сделайте, я наконец заработал, и разместил решение внизу этой страницы. :) Спасибо! DanCapitanDePlai
Вы пробовали переиндексировать?
10

чтобы сделать это за пределами 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.

я сделал еще один пост, содержащий решение. Спасибо за попытку помочь. DanCapitanDePlai
Не уверен, что сказать об этом ... Вы как-то дублировали SKU в системе?
Когда я пробую ваше решение, появляется эта ошибка:code      Неустранимая ошибка: неперехваченное исключение "Mage_Eav_Model_Entity_Attribute_Exception" с сообщением "SQLSTATE [23000]: Нарушение ограничения целостности: 1062 Дубликат записи" 1059-1-0-10.0000-0 ". для ключа "E8AB433B9ACB00343ABB312AD2FAB087" ". в / home / lumeatap / public_html /app/code/core/Mage/Core/Model/Config.php:1350code DanCapitanDePlai
@DanCapitanDePlai Хорошо, я рад, что вы решили это. Можете ли вы опубликовать свой ответ, чтобы другие могли его использовать?
В итоге мне удалось отнести все товары к своим категориям. Вы были близки с вашим ответом, но указанный вами код может использовать & quot; вставку & quot; Команда sql вместо «заменить». Я сделал другой простой скрипт, в котором я написал SQL-запрос, который имел дело непосредственно с базой данных, и я получил ту же ошибку, используя & quot; INSERT & quot; вместо "ЗАМЕНИТЬ". Я также попробовал ваш совет, изменив & quot; array_merge () & quot; с & quot; $ newcategories & quot; но это не имело никакого эффекта. Спасибо! DanCapitanDePlai
1


$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: вот оно.

Вы правы. Я узнал между тем. Благодарю. DanCapitanDePlai
Вы должны использовать модели вместо необработанного SQL для обновления данных Magento, когда это возможно. В течениеsave Есть много методов, которые выполняются и влияют на данные.

Похожие вопросы