Всего 125 962 комментария

Sergey
10 марта 2022, 17:25
0
Приветствую.
Может уже спрашивали, но спрошу еще раз)
Хочу купить ваше приложение, но у меня сайт пока не тестовом сервере.
Смогу я потом перенести без проблем на боевой и чтобы приложение работало?
Артур Шевченко
10 марта 2022, 14:36
0
А тут самое простое решение, это при навешивании обработчика проверять например css класс af_initialized, а уже после добавить к форме этот класс.
Отличный вариант, жаль сам не додумался. Но надо ли переделывать? Сейчас, как я уже писал, класс работает только с одной формой, потому как я генерирую уникальный селектор.

Это наверное потом, когда вдруг захочешь сделать PR
Я уже скоро захочу, уведомления только прикручу))) Вдруг кому-то ещё надо, чтобы не было jQuery. Или может сделать форк?
Александр Быковский
10 марта 2022, 12:31
0
Спасибо большое!
Есть ли где-нибудь мануал по этим тонкостям?
Баха Волков
10 марта 2022, 12:28
0
Ну вообще запись станет длиннее this.config.someprop против this.someprop, но я доверюсь твоему опыту.
Запись (а точнее доступ к конфигу) станет длиннее, но заметь, с такой записью у тебя как минимум минус несколько строчек в конструкторе, ну и конфиг не будет путаться на первом уровне класса.

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

Это у меня он возвращает true, а если кто-то захочет свою логику, например не отправлять пока не прочитают политику работы с персональными данными?
Теперь понял

Я самоучка, это не оправдание, но что значит пройтись по стандартам не понимаю.
Это наверное потом, когда вдруг захочешь сделать PR
Наумов Алексей
10 марта 2022, 11:57
+1
[[#[[+parent]].alias]]
и
{$_modx->resource.parent | resource : 'alias'}
вызванные «внутри» pdoResources, это разные конструкции.

Первый код — это parent того ресурса, который сейчас обрабатывает pdoResources в цикле.
А во втором коде — это будет всегда parent ТЕКУЩЕГО ресурса, того, который открыт в браузере у пользователя.
Вам нужно сделать так:
{$parent | resource : 'alias'}
Александр Быковский
10 марта 2022, 10:58
0
Я себе уже всю голову сломал с феномом) Вот такой чанк, который обрабатывается pdoResources
<!-- [[#[[+parent]].alias]] -->
<!-- {$_modx->resource.parent | resource : 'alias'}-->

<li data-category="[[#[[+parent]].alias]]">
  <div class="catalog-card">
    {$pagetitle}
  </div>
</li>
Структура такова

В коллекциях лежат ресурсы, мы их выбираем и каждому элементу присваиваем атрибут data-category с алиасом родителя (названием категории)

Вызов pdoResources
{'pdoResources' | snippet: [
    'parents' => $_modx->resource.id,
    'depth' => '3',
    'limit' => '0',
    'tpl'  => '@FILE chunks/painting/catalog_block.tpl',
    'sortby'  =>  'menuindex',
    'sortdir'  =>  'ASC',
    'where' => '{"template":4}'
  ]}
Проблема в том, что вызов
[[#[[+parent]].alias]]
даёт верный результат, а вызов через Fenom выдает алиас страницы, на которой вызывается сниппет: в данном случае catalog

Что я делаю не так?
Спасибо
Miša Bulic
10 марта 2022, 10:05
0
А какая выгода от дополнения по сравнению с обычными файлами pdotools? Есть сравнение? И если я работаю только с IDE? Мне нужно каждый раз админку обновлять, чтобы чанк обновился?
Константин
10 марта 2022, 09:07
0
{($vendor in list [6, 7])? 'Цена по запросу': $price} Работает такая конструкция, со скобками
Константин
10 марта 2022, 09:06
0
Да, спасибо, со скобками заработало!!!
Андрей
10 марта 2022, 02:32
0
Попробуй так:
{($_pls['vendor.name'] in list ['nokia', 'iphone']) ? 'Цена по запросу' : $price}
Андрей
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 или выше