Доброго времени суток. Делаю чеорез оверрайд расширение функции в классе Product.php, заменив дефолтную функцию класса расширеной.
Prestashop 1.5.4.1
Код:
class Product extends ProductCore {
public static function searchByName($id_lang, $query, Context $context = null)
{
if (!$context)
$context = Context::getContext();
$sql = new DbQuery();
$sql->select('p.`id_product`, pl.`name`, p.`active`, p.`reference`, m.`name` AS manufacturer_name, stock.`quantity`, product_shop.advanced_stock_management, p.`customizable`');
$sql->from('category_product', 'cp');
$sql->leftJoin('product', 'p', 'p.`id_product` = cp.`id_product`');
$sql->join(Shop::addSqlAssociation('product', 'p'));
$sql->leftJoin('product_lang', 'pl', '
p.`id_product` = pl.`id_product`
AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl')
);
$sql->leftJoin('manufacturer', 'm', 'm.`id_manufacturer` = p.`id_manufacturer`');
$where = 'pl.`name` LIKE \'%'.pSQL($query).'%\'
OR p.`xml` LIKE \'%'.pSQL($query).'%\'
OR p.`reference` LIKE \'%'.pSQL($query).'%\'
OR p.`supplier_reference` LIKE \'%'.pSQL($query).'%\'
OR p.`id_product` IN (SELECT id_product FROM '._DB_PREFIX_.'product_supplier sp WHERE `product_supplier_reference` LIKE \'%'.pSQL($query).'%\')';
$sql->groupBy('`id_product`');
$sql->orderBy('pl.`name` ASC');
if (Combination::isFeatureActive())
{
$sql->leftJoin('product_attribute', 'pa', 'pa.`id_product` = p.`id_product`');
$sql->join(Shop::addSqlAssociation('product_attribute', 'pa', false));
$where .= ' OR pa.`reference` LIKE \'%'.pSQL($query).'%\'';
}
$sql->where($where);
$sql->join(Product::sqlStock('p', 'pa', false, $context->shop));
$result = Db::getInstance()->executeS($sql);
if (!$result)
return false;
$results_array = array();
foreach ($result as $row)
{
$row['price_tax_incl'] = Product::getPriceStatic($row['id_product'], true, null, 2);
$row['price_tax_excl'] = Product::getPriceStatic($row['id_product'], false, null, 2);
$results_array[] = $row;
}
return $results_array;
}
}
Выше содержание оверрайда. Лежит как и положено в modules/модуль/override/classes/Product.php
При инсталяции все кошерно работает. Собственно вопрос: при деинсталяции или попытке сбросить настройки модуля получаю такой выхлоп:
Код:
Parse error: syntax error, unexpected '?' in /home/funnykid/elcommerce.com.ua/host/classes/module/Module.php(1979) : eval()'d code on line 1
Fatal error: Uncaught exception 'ReflectionException' with message 'Class ProductOverrideOriginal_remove does not exist' in /home/funnykid/elcommerce.com.ua/host/classes/module/Module.php:1980 Stack trace: #0 /home/funnykid/elcommerce.com.ua/host/classes/module/Module.php(1980): ReflectionClass->__construct('ProductOverride...') #1 /home/funnykid/elcommerce.com.ua/host/classes/module/Module.php(1898): ModuleCore->removeOverride('Product') #2 /home/funnykid/elcommerce.com.ua/host/classes/module/Module.php(498): ModuleCore->uninstallOverrides() #3 /home/funnykid/elcommerce.com.ua/host/modules/Csync/Csync.php(104): ModuleCore->uninstall() #4 /home/funnykid/elcommerce.com.ua/host/controllers/admin/AdminModulesController.php(487): Csync->uninstall() #5 /home/funnykid/elcommerce.com.ua/host/controllers/admin/AdminModulesController.php(790): AdminModulesControllerCore->postProcessReset() #6 /home/funnykid/elcommerce.com.ua/host/classes/controller/Controller.php(158): AdminModulesControllerCore->postProcess() #7 /home/funnykid/el in /home/funnykid/elcommerce.com.ua/host/classes/module/Module.php on line 1980
[PrestaShop] Fatal error in module Module:
Uncaught exception 'ReflectionException' with message 'Class ProductOverrideOriginal_remove does not exist' in /home/funnykid/elcommerce.com.ua/host/classes/module/Module.php:1980 Stack trace: #0 /home/funnykid/elcommerce.com.ua/host/classes/module/Module.php(1980): ReflectionClass->__construct('ProductOverride...') #1 /home/funnykid/elcommerce.com.ua/host/classes/module/Module.php(1898): ModuleCore->removeOverride('Product') #2 /home/funnykid/elcommerce.com.ua/host/classes/module/Module.php(498): ModuleCore->uninstallOverrides() #3 /home/funnykid/elcommerce.com.ua/host/modules/Csync/Csync.php(104): ModuleCore->uninstall() #4 /home/funnykid/elcommerce.com.ua/host/controllers/admin/AdminModulesController.php(487): Csync->uninstall() #5 /home/funnykid/elcommerce.com.ua/host/controllers/admin/AdminModulesController.php(790): AdminModulesControllerCore->postProcessReset() #6 /home/funnykid/elcommerce.com.ua/host/classes/controller/Controller.php(158): AdminModulesControllerCore->postProcess() #7 /home/funnykid/el
Я так понимаю не срабатывае деинсталл оверрайда?
Содержимое функции анинсталл модуля:
Код:
function uninstall()
{
Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'category` DROP `xml`');
Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'product` DROP `xml`');
Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'product_shop` DROP `xml`');
Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'image` DROP `xml`');
//Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'stock_available` DROP `xml`');
Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'feature` DROP `xml`');
Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'feature_value` DROP `xml`');
Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'feature_value_lang` DROP `xml`');
Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'manufacturer` DROP `xml`');
Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'manufacturer` DROP INDEX `UNIQUE`');
Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'product_attribute` DROP `xml`');
Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'product_attribute_shop` DROP `xml`');
Db::getInstance()->Execute('DROP TABLE `'._DB_PREFIX_.'cuser`');
Db::getInstance()->Execute('TRUNCATE TABLE `'._DB_PREFIX_.'feature_lang`');
Db::getInstance()->Execute('TRUNCATE TABLE `'._DB_PREFIX_.'group`');
Db::getInstance()->Execute('TRUNCATE TABLE `'._DB_PREFIX_.'group_lang`');
Db::getInstance()->Execute('TRUNCATE TABLE `'._DB_PREFIX_.'group_shop`');
Db::getInstance()->Execute('TRUNCATE TABLE `'._DB_PREFIX_.'specific_price`');
Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'specific_price` DROP `xml`');
if(!Configuration::deleteByName('_PRICE_ID_') OR !parent::uninstall()) return false;
return true;
}