在产品图库中添加一个复选框(如“禁用/排除”)

时间:2010-07-21 08:31:35

标签: magento

我正在尝试编写一个新的复选框,以便在“禁用”旁边附加到图库中的列。它的行为与数据库中的条目“禁用/排除”=是/否相同。

我们的想法是为图片库中的每个图片添加“用作页面”复选框。目标是制作一个JS轮播,所有图片都选中“用作页面”。

我做了一些事情,但我做不到:

  • 更新数据库中的数据=>将0或1设置为“页面”字段(见下文)
  • 从数据库中检索数据,然后根据“页面”字段选中/取消选中该复选框。

- >所以我的问题是:如何更新数据库中的数据并在复选框中检索它(0或1取决于字段值)?

感谢所有人的宝贵帮助。


这是我所做的(1.4.1.0):

1-更新表catalog_product_entity_media_gallery_value

添加了一个新字段(名称为“page”):

  • page tinyint(4)UNSIGNED No 0

2-对课程进行了以下更改Mage_Catalog_Model_Product_Attribute_Backend_Media

第49行:

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

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

第223行:

来自

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

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

第301行

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

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

第328行

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

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

3-对模板adminhtml / default / default / template / catalog / product / helper / gallery.phtml进行了以下更改

第64行

来自

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

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

第77行

<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-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>

第105行

这                 

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

4 个答案:

答案 0 :(得分:6)

这就是我解决问题的方法,并且工作得很好。除了你的改变之外,还要做这些。

<强> 1。在Mage_Catalog_Model_Product_Attribute_Backend_Media

更改

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

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

变化

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

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

变化

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

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

<强> 2。转到Mage_Catalog_Model_Resource_Product_Attribute_Backend_Media

变化

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

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

变化

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

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

第3。在js / mage / adminhtml / product.js

变化

    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-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);

变化

    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);

    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);

只需使用搜索文本查找更改代码的位置即可。希望这有帮助。

答案 1 :(得分:1)

经过多次努力,我发现除了原帖和第二张海报的建议外,你还需要打开 /app/code/core/Mage/Catalog/sql/catalog_setup/mysql4-upgrade-1.5 .9.9-1.6.0.0.php ,转到第2023行,从这里开始:

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

改变这个:

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

对此:

'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'
 )

当Magento保存时,它会检查此文件以确保传递的字段与这些数组中的值匹配。

答案 2 :(得分:1)

我收到了错误

  

注意:未定义的索引&#39;页面&#39;

在班级

<强> Mage_Catalog_Model_Product_Attribute_Backend_Media

在第224行。

我不得不改变

JS /法师/ adminhtml / product.js

newImage.position = this.getNextPosition();

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

现在效果很好。

感谢。

答案 3 :(得分:0)

我最近在做类似的事情,发现这段代码是解决方案的一部分:

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

));

我无法将其保存到数据库中。这与Varien_Data_Form_Element_Checkbox类有关。

希望这有帮助,如果您找到它,请发布您的解决方案!

干杯, JD