Комментарии 21
Пулл реквест с исправлениями в гитхаб проекта сделали?
+2
Немного позанудствую.
Можно заменить на
А еще круче — научиться использовать дебаггер.
// headfire debug begin
$f=fopen('headfire.txt','a+');
fwrite($f,print_r($sql_query,true));
fwrite($f, PHP_EOL);
fclose($f);
// headfire debug end
Можно заменить на
file_put_contents('headfire.txt', print_r($sql_query, true), FILE_APPEND);
А еще круче — научиться использовать дебаггер.
+2
За трюк с file_put_contents — спасибо. Не подозревал, что его можно использовать с флагами. Насчет дебаггера — может посоветуйте, что можно использовать на больших проектах (типа PrestaShop). Я как-то пробовал настроить связку с Notepad++, что-то все глючило и было очень неудобно.
0
НЛО прилетело и опубликовало эту надпись здесь
Хм, внезапно пригодилось: XDebugClient
Плагин отладчика для Notepad++. Писал для себя 3 года назад. Написан на C#. Код ужасный конечно.
Плагин отладчика для Notepad++. Писал для себя 3 года назад. Написан на C#. Код ужасный конечно.
0
$logger = new Monolog\Logger();
$logger->addDebug('SQL:', $sql_query);
0
В статье прекрасно все — от методов дебагинга через дамп в файл, до исправлении бага в core файле магазина.
Хотя судя по этому листингу Prestashop их код особо и не расчитан, чтобы его нормально кастомизировали и правили
Хотя судя по этому листингу Prestashop их код особо и не расчитан, чтобы его нормально кастомизировали и правили
+2
Правился все-таки модуль, хоть и официальный. В данном движке есть способ кастомизации модулей, что позволит обновлять модуль из админки.
0
За такой код надо казнить
Вы и руками пишете такую аброкадабру, когда есть конструкция IN?
Абсолютно нечитаемо и неэффективно, также как и конструкция вроде EXISTS.
foreach ($filter_value as $filter_val)
$query_filters .= 'fp.`id_feature_value` = '.(int)$filter_val.' OR ';
$query_filters = rtrim($query_filters, 'OR ').') ';
Вы и руками пишете такую аброкадабру, когда есть конструкция IN?
$query_filters = 'fp.`id_feature_value` IN (' . implode(',', $filter_value) . ')'
Абсолютно нечитаемо и неэффективно, также как и конструкция вроде EXISTS.
+4
Мда, преста никогда не отличалась красотой кода… Помню, как правил основные цвета темы, раскиданные по всему файлу: кнопка здесь, ховер на кнопку там, клик еще гдето.
+1
А вы видели opencart?
0
В OpenCart самое интересное, что в ней модули подключаются через специальную примочку, которая на лету исправляет PHP-код ядра. Таким странным образом решается проблема расширения функциональности и кастомизации.
0
Опенкарт практически не щупал, но подозреваю, что там так же, вроде читал где-то, что преста выросла из opencart. Могу ошибаться.
0
Я подобных задач в день не один десяток решаю. Может, сначала стоит до конца изучить азы языка, а потом писать на хабр?
-1
Очень хочется видеть в таких местах prepeared statement.
Предложу вот такой код:
P.S. скобки не считал, мог ошибиться.
Предложу вот такой код:
private static function getId_featureFilterSubQuery($filter_value, $ignore_join = false)
{
if (empty($filter_value))
return array();
//headfire hack begin
$query_filters = ' AND EXISTS (SELECT * FROM '._DB_PREFIX_.'feature_product fp WHERE fp.id_product = p.id_product AND ';
$query_filters .= ' fp.`id_feature_value` in (' .implode(', ', 'intval', $filter_value)). '))';
return array('where' => $query_filters);
}
P.S. скобки не считал, мог ошибиться.
-1
Прошу прощения, array_map потерялся.
private static function getId_featureFilterSubQuery($filter_value, $ignore_join = false)
{
if (empty($filter_value))
return array();
//headfire hack begin
$query_filters = ' AND EXISTS (SELECT * FROM ' . _DB_PREFIX_ . 'feature_product fp WHERE fp.id_product = p.id_product AND ';
$query_filters .= ' fp.`id_feature_value` in (' . implode(', ', array_map('intval', $filter_value)) . '))';
return array('where' => $query_filters);
}
-1
Можно извлечь урок: не делай релиз без тестов.
-2
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
PrestaShop. О глюке в многоуровневой навигации