Николай Савин

Николай Савин

С нами с 06 июня 2015; Место в рейтинге пользователей: #5
Николай Савин
19 января 2022, 13:27
+4
Набросал небольшой рефакторинг этого кода
Упростил код плагина, перенес содержимое в компонент
github.com/biz87/iiko

Код по-прежнему хромает, но первый шаг к оптимизации сделан.
Николай Савин
19 января 2022, 10:49
0
Жень, нельзя делать плагины с таким количеством кода и тем более с функциями.
Нужно переносить в классы. Бить на методы. Это прям антипаттерн. Нужен серьезный рефакторинг.
Николай Савин
16 января 2022, 16:10
-1
Это не мой код, это Ваш код.
Я лишь подсказал как его на феном переписать. Мелкие нюансы
Николай Савин
16 января 2022, 15:21
+1
Вы здесь наткнулись сразу на две проблемы

В этой строке не нужны фигурные скобки, запускающие феном, так как вы и так внутри феном конструкции
'where' => ['news-type:LIKE' => '%{$.get.news-type}%'],

Но если убрать фигурные скобки — то тоже ничего хорошего не получится
'where' => ['news-type:LIKE' => '%$.get.news-type%'],

Здесь уже другая проблема — нельзя писать феном конструкции внутри кавычек.
Здесь нужно соединить строки с % и get конструкцию через конкатенацию
Вот так
'where' => ['news-type:LIKE' => '%' ~ $.get.news-type ~ '%'],
И тут еще третья проблема, связанная с правилами именования переменных. Проблема с дефисом. В PHP нельзя использовать дефис в именах переменных. А вот в массиве ($.get это ведь массив) можно.
Пожалуй вот такая конструкция должна отработать корректно

'where' => ['news-type:LIKE' => '%' ~ $.get['news-type'] ~ '%'],
Николай Савин
16 января 2022, 15:01
0
Проблема не в fenom.
Если уж начали переводить вызов сниппета на другой синтаксис — то очень желательно делать это полностью.
Избавляйтесь от JSON строк внутри, от вложенных MODX тэгов
Примерно вот так должна выглядеть ваша конструкция
{'!pdoPage' | snippet : [
   'parents' => $_modx->resource.id,
   'showHidden' => 1,
   'limit' => 8,
   'depth' => 1,
   'level' => 1,
   'showLog' => 1,
   'ajaxMode' => 'default',
   'sortby' => ['parent' => 'ASC', 'menuindex' => 'ASC'],
   'includeTVs' => 'img,news-type',
   'templates' => '7',
   'where' => ['news-type:LIKE' => '%industry%'],
   'tpl' => 'newsTpl',
]}
Я не проверял — но это корректная запись — это как минимум первый шаг к нормальной работе кода.

Вот такая конструкция пишется вот так
[[!#GET.news-type]]
{$.get.news-type}
И это выстрел себе в ногу — нельзя использовать нефильтрованные параметры в SQL запросах. Это прямая дорога к SQL инъекциям.
Николай Савин
14 января 2022, 09:50
+1
Повысьте версию php до актуальной. У вас 5.6 вероятно. Минимальная 7.0
Николай Савин
14 января 2022, 09:48
+3
Александр, а чего бы вам, раз уж зашел разговор не написать развернутый материал на тему «101 способ защиты от спама в MODX». Собрать все что упоминалось, сделать какой-то обзор плюсов и минусов. Будет огромная польза для сообщества и вам для кармы
Николай Савин
31 декабря 2021, 15:31
0
ЛЮБОЙ компонент для MODX3 будет в ОТДЕЛЬНОЙ версии, потому что механизм работы отличается.
Николай Савин
29 декабря 2021, 13:27
0
Может настройки хостинга не совсем корректные
Николай Савин
29 декабря 2021, 13:24
0
Есть специальная системная настройка error_page — где нужно указать, какой ресурс показывать для несуществующих страниц
Николай Савин
28 декабря 2021, 11:44
+1
Инструмент потрясающий. Ощущение, что пишешь на Laravel. Теперь вся жизнь в файлах и коде. Я уж забывать начинаю как админка выглядит.
Николай Савин
27 декабря 2021, 18:55
0
Мне кажется таких большинство. В особенности E-commerce
Николай Савин
27 декабря 2021, 18:28
+1
Я, например проверяю IP. Обратил внимание, что большинство запросов со спамом лезут из Европы. Потому чаще всего достаточно проверить страну отправителя. И если это не РФ (в моем случае Казахстан был) — то отклонять запрос.
Очень простенький хук на самом деле — и сильно спасает.
Не везде это конечно нужно, но в региональных магазинчиках сойдет
Вот пример кода для хука FormIT
$response = file_get_contents('https://ipwhois.app/json/?lang=ru&ip='.$_SERVER['REMOTE_ADDR']);
$response = json_decode($response, 1);
if(is_array($response)) {
    if($response['country_code'] === 'KZ') {
        return true;
    };
} 

return false;
Николай Савин
24 декабря 2021, 20:07
0
json_encode возможно лишний
Николай Савин
23 декабря 2021, 20:51
0
Этот вопрос написан почти четыре года назад! Зачем на него отвечать?
Николай Савин
21 декабря 2021, 20:12
+3
Ой да кто тут опытный, это же MODX. Тут если знают что такое PHP — это уже опытные.
А если умеют компоненты делать — так вообще полубоги.
Николай Савин
21 декабря 2021, 12:56
1
+2
Это очень интересный кейс. @Тодор а чего бы тебе не написать чуть более расширенную заметку на эту тему. Что-то вроде «Сортировка с использованием операторов БД».
Не припоминаю, чтобы я тут такое встречал.
Николай Савин
20 декабря 2021, 08:30
+2
ms3 будет в Январе. Ну и еще останется экосистему к нему подтягивать.