2014-12-05 3 views
1

으로 지정 내 제품을 기본 범주로 어떻게 할당 할 수 있습니까?Magento : 모든 제품을 기본 범주

할당 된 실제 카테고리가 느슨하지 않지만 기본 카테고리도 추가합니다.

이렇게하면 범주 1이있는 제품 A에는 기본 범주가 있고 제품 ​​B에는 할당 된 범주가 Dafault 범주 만 포함됩니다.

감사

+0

제품 컬렉션을 가져와 모든 제품에서 category_id를 설정해야합니다. – Knase

답변

1

당신은 할 수있는이 사용자 정의 스크립트를 사용하여 :

<?php 
require_once 'app/Mage.php'; 
Mage::app(); 
$default_category_id = [your default category id]; 
$db = Mage::getSingleton('core/resource')->getConnection('core_read'); 
$sql = "SELECT product_id FROM catalog_category_product WHERE category_id != ?"; 
$pIds = $db->fetchAll($sql, array($default_category_id)); 
foreach($pIds as $pid) { 
    $sql = "INSERT INTO catalog_category_product (category_id, product_id, position) VALUES (?,?,1)"; 
    $db->query($sql, array($default_category_id, $pid)); 
} 
?> 

그것은 당신을 도울 것입니다 바랍니다.

+0

오류가 있습니다 : PHP 구문 분석 오류 : 구문 오류, /home2/tamracit/public_html/script_cat.php의 2 행 라인에 예기치 않은 'app/Mage.php'(T_CONSTANT_ENCAPSED_STRING)이 있습니다. – monak83

+0

require_once 'app/Mage.php '; 이 줄에서 $를 제거하십시오. # line2 –

+0

줄 2에 $ char가 없습니다. 어디에서 제거해야합니까? – monak83

1

기존 모델을 사용할 수있을 때 항상 직접 SQL 쿼리를 실행하지 마십시오. 이것은 내가 어떻게 할 것입니다 : (당신이 당신의 인덱싱을 설정에서 저장 비활성화 업데이트가있는 경우) 당신은 아마하여 변경 사항을 적용하기 위해 나중에 다시 인덱싱해야합니다

<?php 
require_once 'app/Mage.php'; 
Mage::app(); 

$collection = Mage::getModel('catalog/product')->getCollection() 
->addStoreFilter($store_id) // Or use the default Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID 
->addAttributeToSelect('*'); 
// You may need to specify a limit if you have too many products with: ->setPageSize(NUMBER_OF_PRODUCTS) 

$newCategories = array(12345); // Put as much categories as you want to add 

foreach ($collection as $product) { 
    // array_merge: To keep the existing ids 
    // array_unique: to avoid assigning the same category twice 
    $product->setCategoryIds(
    array_unique(array_merge($product->getCategoryIds(), $newCategories)) 
    ); 
    $product->save(); 
} 

.

+0

$ newCategories = array (12345); "12345"를 기본 카테고리 ID로 대체해야합니까? – monak83

+0

네, 정확히 뭔가 잘못되었을 때를 대비하여 데이터베이스를 먼저 백업하는 것을 잊지 마십시오. –

+0

이 오류가 있습니다 : PHP 치명적인 오류 : 'SQLSTATE [40001] : serialization 실패 : 1213 잠금을 얻으려고 시도 할 때 교착 상태가 발견되었습니다. /home2/tamracit/public_html/lib/Zend/Db/Statement/Pdo.php:228에서 트랜잭션을 다시 시작하십시오. – monak83

관련 문제