Всего 125 971 комментарий

Андрей
10 марта 2022, 02:16
0
Если бы кто-нибудь приложил версии движка, компонентов, серверного окружения (php, mysql, nginx, apache, проверка прав на файлы и папки, vps или шаред хост), с какой версии обновлялись, было бы проще гадать на кофейной гуще =)
Андрей
10 марта 2022, 02:06
+1
Для переоценки можно использовать например — msRevaluation и msPre, оба поддерживают msOptionsPrice2.
Артур Шевченко
09 марта 2022, 23:44
0
В общем, по п.2 переписал, только логику немного изменил. Поскольку я научил класса, который на сервере, генерировать уникальный селектор, класс в JS теперь всегда работает с одной конкретной формой, поэтому я в конструкторе сделал так
this.form = document.querySelector(selector);

        if (!this.form) {
            console.error('Form not found. Check the correctness of the selector.');
            return false;
        }
Если нет формы, то нет смысла и дальше что-то делать. Тут вылез ещё один интересный момент, уже в сниппите. Там есть вот такой кусок кода
// Add selector to tag form
if (preg_match('#<form.*?class=(?:"|\')(.*?)(?:"|\')#i', $content, $matches)) {
    $classes = explode(' ', $matches[1]);
    if (!in_array($formSelector, $classes)) {
        $classes[] = $formSelector;
        $classes = preg_replace(
            '#class=(?:"|\')' . $matches[1] . '(?:"|\')#i',
            'class="' . implode(' ', $classes) . '"',
            $matches[0]
        );
        $content = str_ireplace($matches[0], $classes, $content);
    }
} else {
    $content = str_ireplace('<form', '<form class="' . $formSelector . '"', $content);
}
По-моему, он устарел, проще прямо в чанк передавать весь конфиг и устанавливать селектор так {$formSelector} или так [[+formSelector]]. Хотя с другой стороны, ну есть и есть, да?

И ещё в оригинальном сниппите сделано вот так
<?php
/** @var array $scriptProperties */
/** @var AjaxForm $AjaxForm */
if (!$modx->loadClass('ajaxform', MODX_CORE_PATH . 'components/ajaxform/model/ajaxform/', false, true)) {
    return false;
}
$AjaxForm = new AjaxForm($modx, $scriptProperties);

$snippet = $modx->getOption('snippet', $scriptProperties, 'FormIt', true);
$tpl = $modx->getOption('form', $scriptProperties, 'tpl.AjaxForm.example', true);
$formSelector = $modx->getOption('formSelector', $scriptProperties, 'ajax_form', true);
$objectName = $modx->getOption('objectName', $scriptProperties, 'AjaxForm', true);
Мне кажется это нелогично, ведь создавая экземпляр класса, мы мерджим дефолтный конфиг и $scriptProperties, т.е. на мой взгляд, в getOption нужно писать так
$snippet = $modx->getOption('snippet', $config, 'FormIt', true);
$tpl = $modx->getOption('form', $config, 'tpl.AjaxForm.example', true);
$formSelector = $modx->getOption('formSelector', $config, 'ajax_form', true);
$objectName = $modx->getOption('objectName', $config, 'AjaxForm', true);
Или я чего-то не понимаю?
Николай Савин
09 марта 2022, 23:36
0
Интересно, а в какой момент beta станет стабильным релизом? Как ты для себя определяешь этот рубеж?
Prihod
09 марта 2022, 21:14
0
UPD 1.0.1-beta
— Добавлена в меню кнопка сканирования элементов
Константин
09 марта 2022, 19:02
0
Спасибо большое! Первый вариант подошел, работает, по второму ошибка парсинга Unexpected token '?' Ругается на вопрос почему-то.
Константин
09 марта 2022, 17:41
0
По данному варианту ошибка парсинга Unexpected token '?' Ругается на вопрос!
Алексей
09 марта 2022, 16:40
0
Warning: dirname() expects exactly 1 parameter, 2 given in
Поменяйте версию php на 7.0 или выше
Олег
09 марта 2022, 16:32
0
В общем, все решилось сменой версии PHP. Хотя вроде проверял при установке.
Роман
09 марта 2022, 15:44
0
А не проще, сделать проверку по ID?
{$vendor in list [6, 7] ? 'Цена по запросу' : $price}
Артур Шевченко
09 марта 2022, 15:32
0
Без разницы где велась разработка. Нужно проверять пути и права на файлы и папки.
Олег
09 марта 2022, 15:04
0
разработка тестового сайта велась на поддомене другого домена. Скорее всего проблема в путях к minishop2?
Олег
09 марта 2022, 14:44
0
Перемещал с помощью товарищей с рег ру, сейчас копаюсь в мануалах по переносу и нашел пару ошибок в путях core/config/config.inc.php, там был указан старый домен. Пока что вопрос не решился, продолжаю.
Артур Шевченко
09 марта 2022, 14:39
0
В путях. Правда непонятно как получилось запороть пути к конкретному компоненту. При переносе случайно ядро не перемещали на уровень выше? Ещё можно права на папки проверить.
Артур Шевченко
09 марта 2022, 13:15
0
Пара советов, если позволишь:
Не просто позволю, а ещё и благодарен буду)))

и далее в коде методов ты не будешь париться и обращаться к конфигу так:
Ну вообще запись станет длиннее this.config.someprop против this.someprop, но я доверюсь твоему опыту.

Обычно принято в мире js передавать селектор первым аргументом, а вторым конфиг плагина
Тут отдельная проблема. В конструктор надо передавать уникальный селектор, потому что в противном случае если на странице больше 1 вызова AjaxForm обработчики навешиваются столько раз сколько вызывается сниппет, а это плохо по понятным причинам. И передавать селектор в каждом вызове мне кажется неудобным. Я думаю надо установить селектор по умолчанию и дополнять его меткой времени и тоже самое делать с переданным селектором, чтобы на 100% исключить вероятность дублирования или есть варианты решения получше?

3. У тебя на 20-ой строке есть странность if (this.beforeSubmit(e.target)) { и судя по коду твой метод beforeSubmit всегда возвращает true, тогда я понятия не имею зачем тут проверка.
Это у меня он возвращает true, а если кто-то захочет свою логику, например не отправлять пока не прочитают политику работы с персональными данными?

Ну и можно по стандартам пройтись :|
Я самоучка, это не оправдание, но что значит пройтись по стандартам не понимаю.

И есть ещё один момент — уведомления
if (AjaxForm.Message != 'undefined') {
    AjaxForm.Message.close();
}
Это я оставил для обратной совместимости, но это объект, мне кажется правильнее было бы сделать показ сообщения методом или методами класса, но как туда впихнуть код выше? Тут предлагали сделать как @Николай Савин в minishop2, но у него это тоже объект. Может уведомления сделать отдельным классом? Добавить из коробки уведомления не требующие jQuery, только вот надо же ещё дать возможность подключать произвольные уведомления, но как это лучше сделать?
Николай Савин
09 марта 2022, 10:50
+3
Заголовок и суть вопроса были отформатированы высокоразвитым искусственным интеллектом.
Баха Волков
09 марта 2022, 10:20
+1
@Фарит Не надо писать такие заголовки, заголовок вопроса должен отражать суть вопроса и до ката также
Баха Волков
09 марта 2022, 10:04
+3
{if $_pls['vendor.name'] in list ['nokia', 'iphone']}
    Цена по запросу
{else}
    {$price}
{/if}

{$_pls['vendor.name'] in list ['nokia', 'iphone'] ? 'Цена по запросу' : $price}