Jump to content

Edit History

slashdev

slashdev

Hello everyone.

I have good news for you. I've done it. See below how to duplicate product without images:

1. Modification of file /html/src/Adapter/Product/AdminProductDataUpdater.php

look for 

use Validate;

and add after it

use Tools;

look for

if (!Image::duplicateProductImages($id_product_old, $product->id, $combination_images)) {

and change to

if (!Tools::getValue('noimage') && !Image::duplicateProductImages($id_product_old, $product->id, $combination_images)) {

2. Modification of file html/src/PrestaShopBundle/Resources/views/Admin/Product/CatalogPage/Lists/list.html.twig

look for this block

                {% set buttons_action = buttons_action|merge([
                    {
                        "onclick": "unitProductAction(this, 'duplicate');",
                        "icon": "content_copy",
                        "label": "Duplicate"|trans({}, 'Admin.Actions')
                    }
                ]) %}


and add after it

                {% set buttons_action = buttons_action|merge([
                    {
                        "onclick": "unitProductAction(this, 'duplicate noimage=1');",
                        "icon": "content_copy",
                        "label": "Duplicate without images"|trans({}, 'Admin.Actions')
                    }
                ]) %}

3. Modification of file html/ADMINFOLDER/themes/default/js/bundle/product/catalog.js

look for this function and 

function unitProductAction(element, action) {
  ...
}

and do like this (only two changes)

 function unitProductAction(element, action) {
  a = action.split(' '); action = a[0]; params = (a.length == 1) ? '' : a[1]; // <-- add this line
  var form = $('form#product_catalog_list');

  // save action URL for redirection and update to post to bulk action instead
  // using form action URL allow to get route attributes and stay on the same page & ordering.
  var urlHandler = $(element).closest('[data-uniturl]');
  var redirectUrlHandler = $(element).closest('[redirecturl]');
  var redirectionInput = $('<input>')
    .attr('type', 'hidden')
    .attr('name', 'redirect_url').val(redirectUrlHandler.attr('redirecturl'));

  switch (action) {
    case 'delete':
      // Confirmation popup and callback...
      $('#catalog_deletion_modal').modal('show');
      $('#catalog_deletion_modal button[value="confirm"]').off('click');
      $('#catalog_deletion_modal button[value="confirm"]').on('click', function () {
        form.append($(redirectionInput));
        var url = urlHandler.attr('data-uniturl').replace(/duplicate/, action);
        form.attr('action', url);
        form.submit();

        $('#catalog_deletion_modal').modal('hide');
      });
      return;
    // Other cases, nothing to do, continue.
    //default:
  }

  form.append($(redirectionInput));
  var url = urlHandler.attr('data-uniturl').replace(/duplicate/, action) + (params.length > 0 ? '&' + params : ''); // <-- and change this line
  form.attr('action', url);
  form.submit();
}

4. Clear cache in Performance and clear your browser cache.

 

That's all.

Have good clients $)

slashdev

slashdev

Hello everyone.

I have good news for you. I've done it. See below how to duplicate product without images:

1. Modification of file /html/src/Adapter/Product/AdminProductDataUpdater.php

look for 

use Validate;

and add after it

use Tools;

look for

if (!Image::duplicateProductImages($id_product_old, $product->id, $combination_images)) {

and change to

if (!Tools::getValue('noimage') && !Image::duplicateProductImages($id_product_old, $product->id, $combination_images)) {

2. Modification of file html/src/PrestaShopBundle/Resources/views/Admin/Product/CatalogPage/Lists/list.html.twig

look for this block

                {% set buttons_action = buttons_action|merge([
                    {
                        "onclick": "unitProductAction(this, 'duplicate');",
                        "icon": "content_copy",
                        "label": "Duplicate"|trans({}, 'Admin.Actions')
                    }
                ]) %}


and add after it

                {% set buttons_action = buttons_action|merge([
                    {
                        "onclick": "unitProductAction(this, 'duplicate noimage=1');",
                        "icon": "content_copy",
                        "label": "Duplicate without images"|trans({}, 'Admin.Actions')
                    }
                ]) %}

3. Modification of file html/ADMINFOLDER/themes/default/js/bundle/product/catalog.js

look for this function and 

function unitProductAction(element, action) {
  ...
}

and do like this (only two changes)

 function unitProductAction(element, action) {
  a = action.split(' '); action = a[0]; params = (a.length == 1) ? '' : a[1]; // <-- add this line
  var form = $('form#product_catalog_list');

  // save action URL for redirection and update to post to bulk action instead
  // using form action URL allow to get route attributes and stay on the same page & ordering.
  var urlHandler = $(element).closest('[data-uniturl]');
  var redirectUrlHandler = $(element).closest('[redirecturl]');
  var redirectionInput = $('<input>')
    .attr('type', 'hidden')
    .attr('name', 'redirect_url').val(redirectUrlHandler.attr('redirecturl'));

  switch (action) {
    case 'delete':
      // Confirmation popup and callback...
      $('#catalog_deletion_modal').modal('show');
      $('#catalog_deletion_modal button[value="confirm"]').off('click');
      $('#catalog_deletion_modal button[value="confirm"]').on('click', function () {
        form.append($(redirectionInput));
        var url = urlHandler.attr('data-uniturl').replace(/duplicate/, action);
        form.attr('action', url);
        form.submit();

        $('#catalog_deletion_modal').modal('hide');
      });
      return;
    // Other cases, nothing to do, continue.
    //default:
  }

  form.append($(redirectionInput));
  var url = urlHandler.attr('data-uniturl').replace(/duplicate/, action) + (params.length > 0 ? '&' + params : ''); // <-- and change this line
  form.attr('action', url);
  form.submit();
}

4. Clear cache in Performance.

 

That's all.

Have good clients $)

×
×
  • Create New...