Добавьте флажок в галерею изображений товаров (например, «Отключить / Исключить») - PullRequest
7 голосов
/ 21 июля 2010

Я пытаюсь установить новый флажок для добавления к столбцам в галерее изображений рядом с «Отключить». Его поведение будет таким же, как «Отключить / Исключить» = Да / Нет с записью в базе данных.

Идея состоит в том, чтобы добавить флажок «Использовать как страницу» для каждого изображения в галерее изображений. Цель состоит в том, чтобы сделать карусель JS со всеми изображениями, помеченными как «Использовать как страницу».

У меня есть несколько дел, но я не могу:

  • обновить данные в базе данных => установить 0 или 1 в поле "страница" (см. Ниже)
  • получить данные из базы данных, а затем установить / снять флажок в зависимости от поля «страницы».

-> Итак, мой вопрос: как обновить данные в базе данных и получить их в флажке (0 или 1 в зависимости от значения поля)?

Спасибо всем за вашу очень ценную помощь.


Вот что я сделал (1.4.1.0):

1 - Обновить таблицу catalog_product_entity_media_gallery_value

Добавлено новое поле (имя которого «страница»):

  • страница tinyint (4) НЕ ПОДПИСАНО Нет 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 ]

6 голосов
/ 19 июля 2012

Вот так я решил проблему и работает отлично. Кроме ваших изменений, внесите их тоже.

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 голос
/ 21 января 2016

Я получил ошибку

Примечание: неопределенный индекс 'page'

в классе

Mage_Catalog_Model_Product_Attribute_Backend_Media

в строке 224.

Мне пришлось изменить

js / mage / adminhtml / product.js

newImage.position = this.getNextPosition();

до

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

Отлично работает сейчас.

Спасибо.

1 голос
/ 03 января 2013

После долгих трудов я обнаружил, что в дополнение к исходному посту и рекомендациям второго автора, вам также необходимо открыть / app / code / core / Mage / Catalogue / 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 сохраняет, он проверяет этот файл, чтобы убедиться, что передаваемые поля соответствуют значениям в этих массивах.

0 голосов
/ 23 июля 2010

Я недавно работал над чем-то похожим и обнаружил, что этот фрагмент кода является частью решения:

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

));

Я не смог его сохранитьзначение для базы данных либо.Это то, что нужно с классом Varien_Data_Form_Element_Checkbox.

Надеюсь, это поможет, пожалуйста, опубликуйте свое решение, если найдете его!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...