Prestashop

Для Prestashop 1.5

Открываем файл /controllers/admin/AdminCartsController.php

находим строку:
$this->allow_export = true;

и после неё вставляем:

$this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?')));

Теперь через админку доступна кнопка для массового удаления.

Бывают ситуации когда этой кнопки недостаточно, так как корзин слишком много и зайти в них бывает проблематично. Тогда можно применить SQL запрос для удаления корзин гостей, при это корзины покупателей останутся:

DELETE ps_cart_product FROM ps_cart_product JOIN ps_cart ON ps_cart.id_cart = ps_cart_product.id_cart WHERE ps_cart.id_customer = 0
DELETE FROM ps_cart WHERE ps_cart.id_customer = 0
Для Prestashop 1.6

Открываем файл /controllers/admin/AdminOrdersController.php

Находим строку:

'updateOrderStatus' => array('text' => $this->l('Change Order Status'), 'icon' => 'icon-refresh')

после неё ставим запятую и добавляем

'delete' => array( 'text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?'), 'icon' => 'icon-trash' )
Создадим дополнительное поле ГАРАНТИЯ в карточке товара для Prestashop 1.6

1. Создадим поле в базе данных, для этого делаем SQL запрос

ALTER TABLE `ps_product_lang` ADD `warranty` text AFTER `description_short`;

2. Открываем файл /classes/Product.php и после строк

/** @var string Short description */
public $description_short;

добавляем

/** @var string Warranty */
public $warranty;

3. После строки

 'description_short' =>  array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),

добавляем

 'warranty' =>  array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),

4. Открываем файл product.tpl и в нужном месте вставляем

{if $product->warranty}
<p><b>{l s='Warranty: '}</b><span>{$product->warranty|escape:'html':'UTF-8'}</span></p>
{/if}

5. Открываем файл /admin/themes/default/template/controllers/products/informations.tpl и после блока

<div class="form-group">
<label class="control-label col-lg-3" for="reference">
<span class="label-tooltip" data-toggle="tooltip"
title="{l s='Your internal reference code for this product.'} {l s='Allowed special characters:'} .-_#\">
{$bullet_common_field} {l s='Reference code'}
</span>
</label>
<div class="col-lg-5">
<input type="text" id="reference" name="reference" value="{$product->reference|htmlentitiesUTF8}" />
</div>
</div>

вставляем

<div class="form-group">
<label class="control-label col-lg-3" for="warranty">
<span class="label-tooltip" data-toggle="tooltip" title="{l s='Warranty'}">
{l s='Warranty'}
</span>
</label>
<div class="col-lg-5">
<input type="text" id="warranty" name="warranty" value="{$product->warranty|escape:html:'UTF-8'}" />
</div>
</div>

6. Открываем файл /controllers/admin/AdminProductsController.php и после блока

$this->fields_list['reference'] = array(
'title' => $this->l('Reference'),
'align' => 'left',
);

вставляем

$this->fields_list['warranty'] = array(
'title' => $this->l('Warranty'),
'align' => 'left',
);

7. Создаём файл /override/controllers/admin/AdminProductsController.php следующего содержания

 <?php

class AdminProductsController extends AdminProductsControllerCore
{

protected function copyFromPost(&$object, $table)
{
parent::copyFromPost($object, $table);
if (get_class($object) != 'Product')
return;

$object->warranty = (int)Tools::getValue('warranty');
}
}

8. Создаём файл /override/classes/Product.php следующего содержания

<?php

class Product extends ProductCore
{
public $warranty;

public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
{
Product::$definition['fields']['warranty'] = array('type' => self::TYPE_HTML, 'lang' => true);
parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
}
}

9. Чистим кеш и удаляем файл /cache/class_index.php
Что бы убрать shop name c meta title нужно внести изменения в classes/Meta.php

Для этого убераем везде в файле

.' - '.Configuration::get('PS_SHOP_NAME')
Часто требуется повысить выделение ресурсов под выполнение скриптов или нехватке ресурсов для перевода. Для этого можно дабавить в .htaccess несколько директив для управления PHP сервером

php_value max_input_vars 6000
php_value post_max_size 100M
php_value upload_max_filesize 100M
php_value max_execution_time 600
php_value max_input_time 600
php_value memory_limit 512M
Мне не очень нравится, что в коробочной версии при изменении количества цена остаётся прежней на экране в карточке товара. Решил исправить этот момент. Для исправления нужно внети изменения в файл product.js и product.tpl

Для Prestashop 1.5

В product.js находим строку $('#our_price_display').text(our_price); и комментируем её

// $('#our_price_display').text(our_price);

После неё вставляем код:

$(document).ready(function(){
$('#quantity_wanted').change(function(){
$('#our_price_display').html(formatCurrency(productPrice*$("#quantity_wanted").val(), currencyFormat, currencySign, currencyBlank));
});
});

приводим product.tpl  в соответствие

<p id="quantity_wanted_p"{if (!$allow_oosp && $product->quantity <= 0) OR $virtual OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display: none;"{/if}>

{literal}
<script type="text/javascript">
$(document).ready(function(){

$('#quantity_wanted').val(1);
$('.qty_up img').on('click',function(){
if (isNaN(parseInt($('#quantity_wanted').val()))){$('#quantity_wanted').val(1);}
else {$('#quantity_wanted').val(parseInt($('#quantity_wanted').val())+1);
$("#our_price_display").html(((productPrice*$("#quantity_wanted").val()).toFixed(2)+" "+currencySign).replace('.',','));}
});
$('.qty_down img').on('click',function(){
if (isNaN(parseInt($('#quantity_wanted').val()))){$('#quantity_wanted').val(1);}
else { if(parseInt($('#quantity_wanted').val())<=1){ }
else {$('#quantity_wanted').val(parseInt($('#quantity_wanted').val())-1);
$("#our_price_display").html(((productPrice*$("#quantity_wanted").val()).toFixed(2)+" "+currencySign).replace('.',','));}}
});
});
</script>
{/literal}
<label>
{l s='Quantity:'}
</label>
<span class="qty_down floatleft">
<img src="/{$img_dir}minus.png" width="12" height="12" alt="" title="" />
</span>
<input
type="text"
name="qty"
id="quantity_wanted"
class="text"
value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}{/if}"
size="2"
maxlength="3" {if $product->minimal_quantity > 1}onkeyup="checkMinimalQuantity({$product->minimal_quantity});"{/if} />
<span class="qty_up floatleft">
<img src="/{$img_dir}plus.png" width="12" height="12" alt="" title="" />
</span>
</p>

Чистим кеш и проверяем результат :)

Для Prestashop 1.6

находим строки и удаляим их 

if (!isNaN(currentVal) && currentVal < quantityAvailableT)
$('input[name='+fieldName+']').val(currentVal + 1).trigger('keyup');
else
$('input[name='+fieldName+']').val(quantityAvailableT);
});

вместо них вставляем:

if (!isNaN(currentVal) && currentVal < quantityAvailableT) {
$('input[name='+fieldName+']').val(currentVal + 1).trigger('keyup');
var total = (productPrice * (currentVal + 1));
var total = total.toFixed(2);
$('p.our_price_display').fadeOut();
$('span#our_price_display').text(total + ' ' + currencySign)
$('p.our_price_display').fadeIn();
} else {
$('input[name='+fieldName+']').val(quantityAvailableT);
}
});

находим строки и снова удаляем:

if (!isNaN(currentVal) && currentVal > 1)
$('input[name='+fieldName+']').val(currentVal - 1).trigger('keyup');
else
$('input[name='+fieldName+']').val(1);

вместо них вставляем:

if (!isNaN(currentVal) && currentVal > 1) {
$('input[name='+fieldName+']').val(currentVal - 1).trigger('keyup');
var total = (productPrice * (currentVal - 1));
var total = total.toFixed(2);
$('p.our_price_display').fadeOut();
$('span#our_price_display').text(total - ' ' + currencySign)
$('p.our_price_display').fadeIn();
} else {
$('input[name='+fieldName+']').val(1);
}

с продукт.tpl аналогично.

Чистим кеш и радуемся результатом
Открываем /classes/Currency.php и находим строку

$rate = (float)$obj['rate'];

вместо неё вставляем

$rate = (float)$obj['rate']*1.05;
Для иссправления достаточно сделать SQL запрос в phpmyadmin

UPDATE ps_configuration SET VALUE=0 WHERE name="PS_CIPHER_ALGORITHM"
В footer.tpl добавляем строку

{include file="$tpl_dir./footer-{$lang_iso}.tpl"}

Всё теперь достаточно создать файлы footer-en.tpl, footer-ru.tpl, footer-ua.tpl и т. д.

Другой способ исспользовать конструкцию вида:

{if $cookie->id_lang == "1"} 
...
{/if}
{if $cookie->id_lang == "2"}
...
{/if}
{if $cookie->id_lang == "3"}
...
{/if}

Где 1,2 и 3 - это ID языка
Можно исспользовать конструкцию вида:

{if $cookie->id_currency == "1"}
...
{/if}

 где номер - это ID валюты