Всего 114 313 комментариев

Viktor
16 января 2022, 09:43
0
Допустим снипет просто формирует where запись без get и всё равно не работает
Сергей Шлоков
16 января 2022, 08:28
0
По-моему, просто достаточно примера как перевести теги чанка, сниппета и плейсхолдера из MODX формата в Fenom. Что-то типа cheat sheet. Ибо данный вариант сервиса способен переводить только простые конструкции.

У Fenom больше возможностей. Например, в параметрах можно указать число, массив, сделать конкатенацию. Также различные управляющие конструкции. Этого нет в MODX синтаксисе.

А банальный перевод тега на Fenom (просто чтоб было) ничего не даёт. Даже хуже — MODX теги работают лучше и меньше нагружают парсер.
Алексей Соин
15 января 2022, 19:32
+1
Как мне кажется, переполнять моносервис множеством доп функционала не очень хорошая идея, тем кому данный сервис нужен и так знают, где доки находятся, а ссылку на доку я добавил пока только при наличии в теге модификаторов и набором свойств.

Чем так цвет фона душу раздерает?) Мне в дизайне всё нравится))
Сергей Шлоков
15 января 2022, 19:12
0
Ничего не могу сказать. Я первым делом тестирую на своем сайте. Обновилось без проблем.
Сергей Шлоков
15 января 2022, 19:10
+1
Fenom, даже если и влияет на скорость сайта, то совсем не в положительную сторону. Вот сам pdoTools да. Там много чего оптимизировано по сравнению с кодом MODX.
Andrew
15 января 2022, 11:56
-1
Вот сюда бы еще добавить доку по феному (ссылкой на гит как вариант) и шпаргалку по самым часто исп вещам.

И если можно, цвет фона менее душераздирающий. )

Могу поверстать если требуется помощь.
Futuris
15 января 2022, 10:18
0
Странно, но у меня компонент работает только на новой установке MODX.
Т.е. я его подключаю, переношу папку Templates в корневую директория ядра и прописываю новый путь с настройках компонента.
Затем раскомменчиваю дефелтный роут, ведущий на Главную страницу (так же как ина любую другую — результат тот же). После этого на новой установке срабатывает подмена шаблона MODX на ZoomX.
Но почему-то на действующих сайтах компонент не срабатывает. Настройки в принципе те же.
Harry
14 января 2022, 20:17
0
К сожалению не редиректит на платежный шлюз при создании заказа через minishop2 API.
Misha Bulic
14 января 2022, 10:59
+2
Однозначно будет в закладках, просто не так часто будет он нужен
Анастасия
14 января 2022, 10:36
0
Подскажите, при загрузке кириллицы получается примерно такой результат
Raw data for import:
Array
(
[0] => 0006
[1] => ���
[2] => 2000
[3] => 575
)
Включен translit, но всё равно не создается название страницы. Возможно, нужно как-то по-особому сохранять csv?
Наумов Алексей
14 января 2022, 10:24
+2
Мне часто приходится делать подобную работу, когда достается старый сайт, обычно почти всегда при его обновлении я перехожу на Fenom. Так что с меня плюсик)
Viktor
14 января 2022, 10:11
0
Спасибо помогло, странно для всех сайтов ставлю 7.3+ а тут стояла 5.6.
Николай Савин
14 января 2022, 09:50
+1
Повысьте версию php до актуальной. У вас 5.6 вероятно. Минимальная 7.0
Николай Савин
14 января 2022, 09:48
+3
Александр, а чего бы вам, раз уж зашел разговор не написать развернутый материал на тему «101 способ защиты от спама в MODX». Собрать все что упоминалось, сделать какой-то обзор плюсов и минусов. Будет огромная польза для сообщества и вам для кармы
Александр Мельник
14 января 2022, 09:19
+1
спасибо за такой развернутый ответ.
Viktor
14 января 2022, 09:10
0
Странно почему то и обычная сортировка по тв не работает код простейший
'where' => '{"news-type:=": "[[!#GET.sort-type]]"}',
Тэвэха news-type теговая и значения приходят туда правильные
Viktor
14 января 2022, 07:21
0
Странно, пытался сменить в настройках при создании как документ, тоже самое получилось 500
Viktor
14 января 2022, 06:24
0
Вчера вечером всё работало, а на утро через 10 часов перестало
Алексей Соин
13 января 2022, 23:16
+4
Поправил, единственное пока не придумал, как получше обрабатывать комменты и на подумать остается обработка фильтров/модификаторов и свойств, но скорее всего в дальнейшем буду просто выводить предупреждение, что фильтр :default нужно вручную править для fenom синтаксиса и т.д.

Anton Erin
13 января 2022, 20:48
+6
Всем привет!

Я борюсь таким образом:
1. Проверяю в сниппете для FormIt с помощи регулярки на наличие ссылки типа site.com И email типа name@mail.com в поле текстового сообщения + в каждом поле такую проверку делаю (Имя, Телефон, Название фирмы, все поля чекаю). Если обнаружена ссылка, то возвращаю false и сообщение, что «Ссылки или электронные адреса в данном поле не разрешены. Вы можете приложить Word, Excel, PDF или текстовый файл с подробным описанием, ссылками и email.».
2. Использую сниппет csrfhelper:
<input type="hidden" name="csrf_token" value="[[!csrfhelper? &key=`contact-us`]]">
А в вызов FormIt добавляю хук csrfhelper_formit.
3. Разумеется, добавляю простейшую проверку на пустоту скрытое поле URL (можно назвать поле любым человекоподобным словом)
<input class="form-control visually-hidden" type="text" name="url" value="">
4. Добавляю таймер на страницу, который не разрешает отправлять форму, если ты менее 15 секунд на странице (обычно спам-боты отправляют спам моментально после загрузки страницы, менее чем за 1-5 секунд) и показываю пользователю сообщение об ошибке «Слишком быстро нажата кнопка Отправить. Подождите, пожалуйста, 15 секунд и отправьте еще раз.»
В форме Fenom-тэг с текущим временем в формате UNIX. Сравниваем его в антиспам-сниппете.
<input class="form-control visually-hidden" type="text" name="formtime" value="{time()}">
5. На всякий случай вырезаю все html-тэги из всех полей :stripTags
6. В доработке хук, который чекает прилагаемый файл через форму: только pdf, word, excel, txt, zip, png, jpg; не больше 25 мегабайт (вроде как стандартное ограничение всеми почтовиками). Если проверка не пройдена, то показываем вежливое сообщение, что мы принимаем только такие файлы и не больше 25 мб.
7. Не забываем про проверку на обязательность заполнения полей со стороны клиента с помощью тэга required. А также проставляем все необходимы типы данных в инпутах: type=«email», type=«number» или же type=«text» во всех полях!

Мое мнение — самое главное вернуть очень понятный человеку и вежливый ответ, что здесь ссылки не разрешены в целях борьбы со спамом, Вы можете приложить файл со всеми ссылками и адресами.

{$_modx->runSnippet('!FormIt', [

	'hooks' => 'antiSpam,spam,csrfhelper_formit,email',

	'spamCheckIp' => '1',
	'csrfKey' => 'contact-us',

	'validate' => 'name:stripTags:required,email:stripTags:required,message:stripTags:required,url:blank',

	'successMessage' => '<div class="alert alert-success mt-3" role="alert"><b>Спасибо!</b> Ваше сообщение было отправлено.</div>'

])}
Сам сниппет antiSpam:
<?php
$name = $hook->getValue('name');
$phone = $hook->getValue('phone');
$email = $hook->getValue('email');
$message = $hook->getValue('message');
$contact_attachment = $hook->getValue('contact_attachment');

$regExpGSM = '/(\d{3})(?:(?:-*|\s*|\.*|\)*|\)\s*))(\d{3})(?:(?:-*|\s*|\.*|\)*))(\d{3})/';
$regExpURL = '/[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b[-a-zA-Z0-9@:%_\+.~#?&=]*/i';
$regExpEmail = '/(?<=\b)\w([\w\.\-_0-9])*(@| at )[\w0-9][\w\-_0-9]*((\.| DOT )[\w\-_0-9]+)+(?=\b)/';
$regExpExt = '/^([A-Za-z0-9-_.])+\.(png|jpe?g|gif|bmp)$/';

/*Check regExp email*/
if (preg_match($regExpEmail, $name)) {
    $hook->addError('emailInName', 'Email-адреса не разрешены в поле Имя. Вы можете приложить Word, Excel, PDF или текстовый файл с подробным описанием, ссылками и электронной почтой.');
    return false;
} elseif (preg_match($regExpEmail, $message)) {
    $hook->addError('emailInMessage', 'Email-адреса не разрешены в поле Сообщения. Вы можете приложить Word, Excel, PDF или текстовый файл с подробным описанием, ссылками и электронной почтой.');
    return false;

    /*Check regExp URL's*/
} elseif (preg_match($regExpURL, $name)) {
    $hook->addError('linkInName', 'Ссылки на сайты не разрешены в поле Имя. Вы можете приложить Word, Excel, PDF или текстовый файл с подробным описанием, ссылками и электронной почтой.');
    return false;
} elseif (preg_match($regExpURL, $message)) {
    $hook->addError('linkInMessage', 'Ссылки на сайты не разрешены в поле Сообщения. Вы можете приложить Word, Excel, PDF или текстовый файл с подробным описанием, ссылками и электронной почтой.');
    return false;
	
/*И так далее по всем полям чекаю регулярками выше*/

/*Проверяем, что не слишком быстро нажимается кнопка "Отправить"*/
} elseif ($_POST['formtime'] > time() - 15) {
    $hook->addError('fastSending', 'Слишком быстро нажата кнопка Отправить. Подождите, пожалуйста, 15 секунд и отправьте еще раз.');
    return false;

} else {
    return true;
}
В самой форме плейсхолдеры для вывода человекопонятных ошибок:
[[!+fi.error.csrf_token:notempty=`
<div class="alert alert-warning mt-3 mb-2">[[!+fi.error.csrf_token]]</div>
`]]
[[!+fi.error.fastSending:notempty=`
<div class="alert alert-warning mt-3 mb-2">[[!+fi.error.fastSending]]</div>
`]]

[[+fi.statusMessage]]
[[+fi.successMessage]]

<input type="text" class="form-control"
       placeholder="Ваше имя *"
       name="name"
       value="[[!+fi.name]]"
       required>
<span class="error_name">[[+fi.error.name]]</span>
До этого у меня была всего-лишь одна проверка regExp на наличие ссылки и email в поле Сообщения (message). Спама почти не было, но стал приходить спам типа Buy our viagra on usa-pharma.shop, пропускались такие ссылки. Более длинная регулярка уже иногда блочила любой текст, если юзер пишет сообщение и после точки сразу пишет слово нового предложения.

Добавил проверку на 15 секундное ожидание (человеку просто не реально раньше 15й секунды заполнить все поля и отправить форму). Можно поставить 5 секунд.

После этого стали приходить сообщение только от человеков, никакого спама.

Не отловленные ошибки надо бы логгировать (у меня был этот кусок кода для логгирования не отправленных форм через FormIt, но не могу найти, он в старых хуках был).

Ну и можно по IP блочить вдобавок, как выше уже предложено.

Я не очень силен в PHP, как смог так и написал, поэтому большая просьба помочь хорошо доработать данный сниппет/хук и поделиться им здесь.