2012-04-25 12 views
6

Esto se ha pedido muchas veces pero no ha funcionado.Magento: establezca el atributo de producto para usar los valores predeterminados

Tengo varias tiendas y algunos atributos han sido anulados. Quiero cambiar estos atributos para 'usar valor predeterminado' con un script.

Aquí se presenta una imagen que muestra vistas de tiendas y casillas de verificación 'Utilizar valor predeterminado' http://dl.dropbox.com/u/3209649/storeviews-and-defaultvalues.png(no permitido para publicar imágenes aún)

En app/código/core/Mago/Adminhtml/controladores/Catálogo/ProductController.php setData() se usa con falso para el segundo argumento cuando se ha seleccionado 'Usar valor predeterminado' para cualquier atributo.

/** 
* Check "Use Default Value" checkboxes values 
*/ 
if ($useDefaults = $this->getRequest()->getPost('use_default')) { 
    foreach ($useDefaults as $attributeCode) { 
     $product->setData($attributeCode, false); 
    } 
} 

El código siguiente intenta establecer el 'nombre' de atributos para 'Usar valores predeterminados' para el producto 1 en la tienda 3 utilizando el mismo método.

require_once '../app/Mage.php'; 
Mage::app(3); 

$product = Mage::getModel('catalog/product')->load(1); 

$product->setData('name', false); # as used in ProductController.php 
$product->save(); 

Usando

$product->setData('name', 'anything'); 

establece correctamente el 'nombre' atribuye a 'nada', pero falsa no establece que el 'uso de valor por defecto'

'Uso Valor por defecto' es no almacenado en ninguna parte de la base de datos, entonces dentro del controlador de la interfaz de administración debe haber otro procedimiento que elimine la fila de atributos?

Enlaces relacionados aquí ->http://pastebin.com/raw.php?i=j7fwu9H6 (no se les permite publicar enlaces sin embargo, tampoco)

+0

Lo siento, pero no está claro lo que se le está pidiendo aquí. –

+0

Lo he actualizado y he agregado un enlace a una imagen. ¿Tiene sentido ahora? –

+1

también puede probar un enfoque SQL como se describe aquí: http://magento.stackexchange.com/questions/1199/how-to-set-product-attribute-to-use-default-by-sql – WonderLand

Respuesta

12

Esto no funciona porque se necesita la tienda actual siendo la tienda de administración para este tipo de operación.

Para realizar una vista específica tienda de utilizar el valor predeterminado para un atributo dado:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 

$product = Mage::getModel('catalog/product') 
    ->load($product_id)   // in your case: 1 
    ->setStoreId($store_id)  // in your case: 3 
    ->setData($attr, false)  // in your case: 'name' 
    ->save(); 
+0

I ' No estoy seguro de entender por qué funciona de esa manera, pero puedo confirmar que sí. He estado buscando una solución a esto por mucho tiempo. Gracias. –

+0

Hola, me enfrenté a un problema cuando ejecuté un script sin dar el currentStore, rompió mi oficina, cambiando los valores predeterminados con valores personalizados en los productos. En mi script, simplemente actualicé el peso de los productos, pero creó valores personalizados como precio personalizado o visibilidad personalizada de forma aleatoria para los productos. Lo eliminé en DB más tarde, pero no entiendo por qué es importante llamar a la función setCurrentStore ... ¿Podrías explicar un poco más? – beluga

+0

'Mage :: app() -> setCurrentStore (Mage_Core_Model_App :: ADMIN_STORE_ID);' Después de muchas horas de revisar el código perfecto, mi único problema era que lo necesitaba. – FactoryAidan

Cuestiones relacionadas