Всего 125 989 комментариев

Валерий
20 ноября 2021, 15:14
0
В одной из веток комментариев уже задавал вопрос, но лучше опишу проблему полнее, так, как ее вижу сейчас:

1. Для вывода товара на сайте используется компонент msFilter2.
2. Для отслеживания остатков компонент msProductRemains
2. В карточках товара важно указывать возможность «Купить» или статус «Нет в наличии». Для чего используется конструкция:
Вызов сниппета, в каждой карточке (в чанке msProducts.row):
[[!getRemains:toPlaceholder=`remains`? &id=`[[+id]]`]]
И условие:
[[!+remains:lt=`1`:then=`<div class="no-remains">Нет в наличии</div>`:else=`<span><button class="btn btn-primary list-prod__submit" type="submit" name="ms2_action" value="cart/add">Купить</button></span>`]]
Условие срабатывает прекрасно, если просто зайти на страницу каталога.
Однако, на странице выдается 20 товаров из множества, таким образом есть еще и пагинация. Если переключаться через пагинацию, то условие выше не работает, потому что в каждую карточку загружается значение первой карточки. Если обновить страничку, то все считается корректно.

Я так понимаю, что здесь мешает сам фильтр. Может быть кто-то встречался с такой проблемой и решил ее?
Валерий
20 ноября 2021, 14:57
0
Есть уточнение. Проблема в кнопках пагинации. Т.е, если перейти просто на ссылку на странице, то все значения подгружаются верно, а если переходить по кнопкам page.nav, то без обновления страницы значение одно на все карточки.
Александр Мельник
20 ноября 2021, 12:16
0
Кстати, а почему вы используете компонент recaptcha2, есть помоему специально для третьей версии отдельный компонент.
Александр Мельник
20 ноября 2021, 12:10
0
Пропускает конечно, этот (как и любой другой) инструмент не дает 100% гарантии. У меня тоже на более чем 20 сайтах установлена recaptcha3 и на каждом из этих сайтов есть спам. Ну вернее на 4 сайтах спама нет, но это не заслуга captcha а просто эти сайты забыты и Богом и спамерскими программами.
Совместно с captcha мудрю и другие способы защиты (скрытые поля, которые якобы спам бот должен все равно заполнить, варианты через js которые предложил Артур и прочее), но все это если и помогает то на пару недель, после чего спам продолжает идти как и раньше.
Опытным путем нашел «лучший для себя способ», однако применяю его там, где пишу сайт с нуля, а не на CMSках. Не использую тег form вообще для создания форм, верстаю все формы так, чтобы они не были заключены в
<form>
. Да это лишает нас события submit, но поскольку я все равно все свои формы обрабатываю собственными js обработчиками, то для меня это не проблема. Спам бот не определяет такие формы и не атакует их (возможно что на днях они научаться делать и это).
Артур Шевченко
20 ноября 2021, 11:14
+1
Есть предложение выкинуть капчу и сделать так. Создаешь скрытое поле с именем например secret. В вызове в параметре validate пишешь secret:contains=^Bdsvgfdbr^ и пишешь js который при загрузке страницы или при попадании любого поля формы в фокус будет заполнять secret значением Bdsvgfdbr (любой набор символов).
Сергей Шлоков
20 ноября 2021, 07:48
0
Странная валидация.
Yury
19 ноября 2021, 22:26
0
Спасибо за ответ.
А решится ли проблема с китайскими или корейскими именами?
Сейчас китайцы ничего не могут купить — они получают сообщение, что поле не заполнено.
Сергей Шлоков
19 ноября 2021, 21:15
0
Андрей, а у тебя реально работают приоритеты? Просто я смотрю на код и вижу, что ты создаёшь один виртуальный плагин с id=1000. И не понимаю, как заставить один и тот же плагин сработать в разных приоритетах?
'eventMap' => 
  array (
    'OnHandleRequest' => 
      array(
         1000 => '1000',
         3 => '3',
         1000 => '1000',
         7 => '7',
      ) ,
  );
В индексированном массиве нельзя указывать один и тот же индекс для разных записей.

П.С. Сознаюсь, что я не тестировал твой компонент, просто код смотрел. Поэтому и спрашиваю. :)
Дмитрий
19 ноября 2021, 21:13
0
У вас что-за ось и настройки php?
Ubuntu 14.04 / php 7.2.8 / openssl 1.0.1f / nginx
Ось конечно старенькая, но пока так…
с сертификатами чего только не делал.
В первую очередь как везде написано — скачал свежий cacert.pem и прописал его в настройки php. перезапустил естественно и php и nginx.
затем пытался вручную обновлять сертификаты, но результат всё тот же. Почему-то при проверке в консоли любого сайта
echo file_get_contents("https://*.*/");
показывается его содержимое
если пытаюсь проверять
echo file_get_contents("https://modstore.pro/");
echo file_get_contents("https://modx.pro/");
валит ошибку…
Сейчас я склоняюсь к теории что это из-за версии openssl, но обновить её не решаюсь. На серваке несколько сайтов работает, не хотелось бы чтобы они легли в случае неудачи с обновлением.
Александр Туниеков
19 ноября 2021, 18:06
0
Ну вот на модсторе сертификат проверить не может.
У вас что-за ось и настройки php?
Aleksandr Huz
19 ноября 2021, 16:38
0
Да, через сниппет msGiftCart можно вывести в любом месте, но его можно вызывать только один раз и если не вызван сниппет msCart. Это связано с тем, что минишоп использует id для работы с корзиной, но это тоже решается.
des1gner
19 ноября 2021, 15:47
+1
Рад появлению такому компоненту. Вопрос. А можно ли выводить список подарков в любом другом месте вне корзины? И уведомить так же пользователя о том, что еще чуть-чуть и тебе подарочек, так же вне корзины?
Евгений Лазарев
19 ноября 2021, 12:29
0
Виталий подскажите пожалуйста с версией 1.2.1 почему то для выгрузок в 1000 и более товаров стала прерываться на этапе загрузки изображений с 500 error. В общем логе ничего. Ответ 1С
Отправка запроса на авторизацию.
Отправка запроса на инициализацию, для определения версии обмена данных.
{ОбщийМодуль.Б_ОбщиеПроцедурыИФункцииОбменаССайтом.Модуль(2462)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
Соединение.ОтправитьДляОбработки(ПолноеИмяФайла, СокрЛП(ПараметрыЗапроса), ИмяФайлаОтвета, СокрЛП(Заголовки));
по причине:
Ошибка при выполнении файловой операции 'assets/components/msync/1c_exchange.php?type=catalog&mode=file&filename=import_files/116327_1.jpg&'
по причине:
Ошибка работы с Интернет: внутренняя ошибка сервера (500). <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator at
webmaster@yahont.online to inform them of the time this error occurred,
and the actions you performed just before this error.</p>
<p>More information about this error may be available
in the server error log.</p>
</body></html>

по причине:
Ошибка работы с Интернет: внутренняя ошибка сервера (500)
Произошла ошибка на стороне сервера. Не получен статус завершения операции. Файл не отправлен (C:\Users\Пользователь\AppData\Local\Temp\3 001 078 109\webdata\000000002\goods\0\import_files\116327_1.jpg).
Ответ сервера:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator at
webmaster@yahont.online to inform them of the time this error occurred,
and the actions you performed just before this error.</p>
<p>More information about this error may be available
in the server error log.</p>
</body></html>

Ответ сервера: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator at
webmaster@yahont.online to inform them of the time this error occurred,
and the actions you performed just before this error.</p>
<p>More information about this error may be available
in the server error log.</p>
</body></html>
Подскажите в чем может быть проблема. Все лимиты увеличены до упора.
Николай Савин
19 ноября 2021, 11:47
+2
Вопрос решается достаточно просто.
Вам нужно расширить класс заказа своим классом, и перезаписать метод validate который и фильтрует входящие буквы. Там есть такая конструкция

$tmp = preg_replace(
                    array('/[^-a-zа-яёґєіїўäëïöüçàéèîôûäüöÜÖÄÁČĎĚÍŇÓŘŠŤÚŮÝŽ\s\.\'’ʼ`"]/iu', '/\s+/', '/\-+/', '/\.+/', '/[\'’ʼ`"]/iu', '/\'+/'),
                    array('', ' ', '-', '.', '\'', '\''),
                    $value
                );
Дмитрий
19 ноября 2021, 11:22
0
спасибо за ответ, все работает.
Иван Бочкарев
19 ноября 2021, 08:36
0
На данный момент я только принимаю и подтверждаю приходящие PR.
Есть какие то конкретные запросы, вопросы, предложения?
Сергей Лим
19 ноября 2021, 06:25
0
Радует, что modx еще жив. А раздел документации кто-нибудь модерирует?
Yury
19 ноября 2021, 01:00
0
Та же самая проблема. Удалось ли Вам её решить?