조금 늦게 가입했지만 위의 답변 중 하나가 마음에 들지 않았습니다.
- 제품 콜렉션을 걷는 것에 대한 Simons의 답변은 엄청나게 느리고 비효율적이지만 적어도 마 젠토를 사용하고 있습니다.
- 데이터베이스에서 직접 수정을 수행하는 ParasSood의 대답은 약간 무섭기 때문에 약간의 자동화 된 기능으로 래핑하려는 경우 유용하지 않습니다.
여기 내 시도가 있습니다. 완전히 테스트되지는 않았지만 필요한 작업을 수행하는 것 같습니다.
/**
* If given store code will reset only that store, otherwise will set all stores to "use default"
*
* If given product ids will reset only those products, otherwise all products will be set to "use default"
*
* @param $attributeCode
* @param null $storeCode
* @param null $productIds
*
*/
public function forceProductsToUseDefault($attributeCode, $storeCode = null, $productIds = null)
{
$conditions = array();
if (is_null($storeCode)) {
$conditions['store_id != ?'] = Mage_Core_Model_App::ADMIN_STORE_ID;
} else {
$store = Mage::app()->getStore($storeCode);
if (!$store instanceof Mage_Core_Model_Store || !$store->getId()) {
Mage::throwException("Store with code not found: $storeCode");
}
$conditions['store_id = ?' ] = $store->getId();
}
if (!is_null($productIds)) {
$conditions['entity_id in(?)'] = $productIds;
}
$attribute = Mage::getModel('eav/entity_attribute')
->loadByCode(Mage_Catalog_Model_Product::ENTITY, $attributeCode);
if (!$attribute instanceof Mage_Eav_Model_Entity_Attribute_Abstract || !$attribute->getId()) {
Mage::throwException("Attribute with code not found: $attributeCode");
}
$conditions['attribute_id = ?'] = $attribute->getId();
$coreResource = Mage::getSingleton('core/resource');
$coreResource->getConnection('core_write')->delete(
$coreResource->getTableName(array('catalog/product', $attribute->getData('backend_type'))),
$conditions
);
}
$product->setData('visibility', false);
이 상자를 체크 할뿐만 아니라, 내가 원하는 해달라고하는 "true"로 가시성 설정