2010-07-21 14 views
7

Estoy tratando de codificar una nueva casilla para adjuntar a las columnas en la galería de imágenes, junto a "Deshabilitar". Su comportamiento sería el mismo que "Desactivar/Excluir" = Sí/No con la entrada en la base de datos.Agregue una casilla de verificación a la galería de imágenes del producto (como "Desactivar/Excluir")

La idea es agregar una casilla de verificación "Usar como página" para cada imagen en la galería de imágenes. El objetivo es crear un carrusel JS con todas las imágenes marcadas como "Usar como página".

tengo unas pocas cosas por hacer pero no puedo:

  • actualizar datos en la base de datos => set 0 o 1 para el campo "página" (véase más adelante)
  • recuperar datos de la base de datos y luego marque/desmarque la casilla de verificación dependiendo del campo "página".

-> Entonces mi pregunta es: ¿cómo actualizar los datos en la base de datos y recuperarlos en la casilla de verificación (0 o 1 según el valor del campo)?

Gracias a todos por su valiosa ayuda.


Esto es lo que he hecho (1.4.1.0):

1- actualización de la tabla catalog_product_entity_media_gallery_value

añadido un nuevo campo (que se llama "página"):

  • página tinyint (4) No se UNSIGNED 0

2- Realizó los siguientes cambios en la clase Mage_Catalog_Model_Product_Attribute_Backend_Media

Línea 49:

de

$localAttributes = array('label', 'position', 'disabled'); 

a

$localAttributes = array('label', 'position', 'disabled', 'page'); 

Línea 223:

de

$data['disabled'] = (int) $image['disabled']; 

a

$data['disabled'] = (int) $image['disabled']; 
$data['page'] = (int) $image['page']; 

Línea 301

de

$mediaGalleryData['images'][] = array(
    'file'  => $fileName, 
    'position' => $position, 
    'label' => '', 
    'disabled' => (int) $exclude 
); 

a

$mediaGalleryData['images'][] = array(
    'file'  => $fileName, 
    'position' => $position, 
    'label' => '', 
    'disabled' => (int) $exclude, 
    'page' => (int) $exclude, 
); 

Línea 328

de

$fieldsMap = array(
    'label' => 'label', 
    'position' => 'position', 
    'disabled' => 'disabled', 
    'exclude' => 'disabled', 
); 

a

$fieldsMap = array(
    'label' => 'label', 
    'position' => 'position', 
    'disabled' => 'disabled', 
    'exclude' => 'disabled', 
    'page' => 'disabled', 
); 

3- realizado los siguientes cambios a la plantilla adminhtml/default/default/template/catalog/producto/ayudante/galería.phtml

Línea 64

de

<th><?php echo Mage::helper('catalog')->__('Exclude') ?></th> 

a

<th><?php echo Mage::helper('catalog')->__('Exclude') ?></th> 
    <th><?php echo Mage::helper('catalog')->__('Is Page') ?></th> 

Línea 77

de

<td class="cell-disable a-center"><input type="checkbox" <?php if($_block->getElement()->getReadonly()):?> disabled="disabled"<?php endif;?> onclick="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" /></td> 

a

<td class="cell-disable a-center"><input type="checkbox" <?php if($_block->getElement()->getReadonly()):?> disabled="disabled"<?php endif;?> onclick="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" /></td> 
<td class="cell-page a-center"><input type="checkbox" <?php if($_block->getElement()->getReadonly()):?> disabled="disabled"<?php endif;?> onclick="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" /></td> 

Línea 105

de  

a

  <td class="cell-disable"><input type="hidden" />&nbsp;</td> 
      <td class="cell-page last"><input type="hidden" />&nbsp;</td> 
+0

No, en realidad no lo he visto desde que publiqué esta pregunta ... –

Respuesta

0

Yo estaba trabajando en algo similar recientemente, y encontré que este pedazo de código es parte de la solución:

$fieldset->addField('entire_range', 'checkbox', array(
     'checked' => $this->getEntireRange()==1 ? 'true' : 'false', 
     'onclick' => 'this.value = this.checked ? 1 : 0;' 

));

No pude conseguirlo para guardar el valor en la base de datos tampoco. Es algo con la clase Varien_Data_Form_Element_Checkbox.

Espero que esto ayude, por favor publique su solución si lo encuentra!

Saludos, JD

+0

Gracias a Jonathan por su respuesta, pero creo que está funcionando para widgets estándar de la red, que las imágenes/imágenes no son. –

6

Esto es cómo he resuelto el problema y está trabajando perfectamente. Además de sus cambios, haga esto también.

1. En Mage_Catalog_Model_Product_Attribute_Backend_Media

cambio

public function addImage(Mage_Catalog_Model_Product $product, $file, 
    $mediaAttribute = null, $move = false, $exclude = true) 

a

public function addImage(Mage_Catalog_Model_Product $product, $file, 
    $mediaAttribute = null, $move = false, $exclude = true, $page = false) 

cambio

public function addImagesWithDifferentMediaAttributes(Mage_Catalog_Model_Product $product, 
    $fileAndAttributesArray, $filePath = '', $move = false, $exclude = true) 

a

public function addImagesWithDifferentMediaAttributes(Mage_Catalog_Model_Product $product, 
    $fileAndAttributesArray, $filePath = '', $move = false, $exclude = true, $page = true) 

cambio

$savedFileName = $this->addImage($product, $filePath . $value['file'], null, $move, $exclude); 

a

$savedFileName = $this->addImage($product, $filePath . $value['file'], null, $move, $exclude, $page); 

2.Ir a Mage_Catalog_Model_Resource_Product_Attribute_Backend_Media

cambio

array('label','position','disabled') 

a

array('label','position','disabled','page') 

cambio

  array(
       'label_default' => 'label', 
       'position_default' => 'position', 
       'disabled_default' => 'disabled', 
      ) 

a

  array(
       'label_default' => 'label', 
       'position_default' => 'position', 
       'disabled_default' => 'disabled', 
       'page_default' => 'page' 
      ) 

3. En js/mago/adminhtml/product.js

cambio

this.getFileElement(file, 'cell-label input').value = image.label; 
    this.getFileElement(file, 'cell-position input').value = image.position; 
    this.getFileElement(file, 'cell-remove input').checked = (image.removed == 1); 
    this.getFileElement(file, 'cell-disable input').checked = (image.disabled == 1); 

a

this.getFileElement(file, 'cell-label input').value = image.label; 
    this.getFileElement(file, 'cell-position input').value = image.position; 
    this.getFileElement(file, 'cell-remove input').checked = (image.removed == 1); 
    this.getFileElement(file, 'cell-disable input').checked = (image.disabled == 1); 
    this.getFileElement(file, 'cell-page input').checked = (image.page == 1); 

cambio

this.images[index].label = this 
      .getFileElement(file, 'cell-label input').value; 
    this.images[index].position = this.getFileElement(file, 
      'cell-position input').value; 
    this.images[index].removed = (this.getFileElement(file, 
      'cell-remove input').checked ? 1 : 0);    
    this.images[index].disabled = (this.getFileElement(file, 
      'cell-disable input').checked ? 1 : 0); 

a

this.images[index].label = this 
      .getFileElement(file, 'cell-label input').value; 
    this.images[index].position = this.getFileElement(file, 
      'cell-position input').value; 
    this.images[index].removed = (this.getFileElement(file, 
      'cell-remove input').checked ? 1 : 0); 
    this.images[index].page = (this.getFileElement(file, 
      'cell-page input').checked ? 1 : 0);     
    this.images[index].disabled = (this.getFileElement(file, 
      'cell-disable input').checked ? 1 : 0); 

Simplemente use el texto de búsqueda para encontrar dónde cambiar el código. Espero que esto haya ayudado.

+0

esta solución funciona para mí. –

+0

Funciona a las mil maravillas. – Nighon

1

Después de mucho trabajo he descubierto que, además de la publicación original y las recomendaciones del segundo cartel, también es necesario para abrir /app/code/core/Mage/Catalog/sql/catalog_setup/mysql4-upgrade-1.5. 9.9-1.6.0.0.php, ir a alrededor de 2.023 línea de donde empieza con esto:

$installer->getTable('catalog/product_attribute_media_gallery_value') => array(

cambiar esta situación:

'disabled' => array(
    'type'  => Varien_Db_Ddl_Table::TYPE_SMALLINT, 
    'unsigned' => true, 
    'nullable' => false, 
    'default' => '0', 
    'comment' => 'Is Disabled' 
) 

a esto:

'disabled' => array(
    'type'  => Varien_Db_Ddl_Table::TYPE_SMALLINT, 
    'unsigned' => true, 
    'nullable' => false, 
    'default' => '0', 
    'comment' => 'Is Disabled' 
), 
'page' => array(
    'type'  => Varien_Db_Ddl_Table::TYPE_SMALLINT, 
    'unsigned' => true, 
    'nullable' => false, 
    'default' => '0', 
    'comment' => 'Page' 
) 

Cuando Magento lo guarda, comprueba este archivo para asegurarse de que los campos que se pasan coinciden con los valores de estas matrices.

1

que tiene el error

Notice: Undefined index 'página'

en la clase

Mage_Catalog_Model_Product_Attribute_Backend_Media

en la línea 224.

que tenía que cambiar

js/mago/adminhtml/producto.js

newImage.position = this.getNextPosition(); 

a

newImage.position = this.getNextPosition(); 
newImage.page = 0; 

Funciona muy bien ahora.

Gracias.

Cuestiones relacionadas