Баха Волков

Баха Волков

С нами с 10 ноября 2016; Место в рейтинге пользователей: #10
24 марта 2022, 20:36
0
@Zhan Не флуди, одни и те же вопросы всем подряд задавать нет смысла
24 марта 2022, 10:47
0
А всего лишь нужно было документацию почитать или взглянуть на код pdoPage:

'pageVarKey' => 'unique',
'pageNavVar' => 'unique.nav',
'ajaxElemWrapper' => '#unique',
'ajaxElemRows' => '#unique .rows',
'ajaxElemPagination' => '#unique .pagination',
'ajaxElemLink' => '#unique .pagination a',
'ajaxElemMore' => '#unique .more',
18 марта 2022, 11:01
0
@Leonid Krylov

если ЕГО стоимость выше на 10+%
ЕГО — дополнение который размещен первым? Для уточнения: если mSearch2 например стоит 1100 руб. то какой-нибудь условный mOtlichniyPoisk должен стоить не более 1000 руб.?
10 марта 2022, 12:28
0
Ну вообще запись станет длиннее this.config.someprop против this.someprop, но я доверюсь твоему опыту.
Запись (а точнее доступ к конфигу) станет длиннее, но заметь, с такой записью у тебя как минимум минус несколько строчек в конструкторе, ну и конфиг не будет путаться на первом уровне класса.

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

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

Я самоучка, это не оправдание, но что значит пройтись по стандартам не понимаю.
Это наверное потом, когда вдруг захочешь сделать PR
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}
09 марта 2022, 09:57
0
Ну и можно по стандартам пройтись :|
09 марта 2022, 09:53
+3
Опа, а это уже лучше. Пара советов, если позволишь:

1. Можно учитывать, что конфиг может по какой-то причине не будет доступен или он придёт неполным

constructor (config) {
    this.defaults = {
        someProp: true,
        anotherProp: 'long string',
    }

    this.config = Object.assign({}, this.defaults, config);
}

и далее в коде методов ты не будешь париться и обращаться к конфигу так:

this.config.someProp

2. Обычно принято в мире js передавать селектор первым аргументом, а вторым конфиг плагина, это намного удобнее, и я понимаю, что AjaxForm в оригинале такой и ты просто перевел код, но тут заодно можно и это исправить:

class AjaxForm {
    constructor (selector, config) {
        if (!selector) {
            console.error('Нет селектора');
        }
        
        this.defaults = {
            someProp: true,
            anotherProp: 'long string',
        }
    
        this.config = Object.assign({}, this.defaults, config);

        this.forms = document.querySelectorAll(selector);
    }
}

// И теперь можно вызывать и с конфигом и без
new AjaxForm(selector, config);
new AjaxForm(selector);

3. У тебя на 20-ой строке есть странность if (this.beforeSubmit(e.target)) { и судя по коду твой метод beforeSubmit всегда возвращает true, тогда я понятия не имею зачем тут проверка.
18 февраля 2022, 09:59
+3
Что-то вчера захотелось переписать самому, но потом перехотел, а так хотя бы толкну тебя в нужном направлении

class AjaxForm {
    constructor (config) {
        this.forms = document.querySelectorAll(config['formSelector'])
    }

    resetErrors (e) {
        // some code
    }

    success () {}

    sendAjax () {}
}

new AjaxForm(afConfig)
10 января 2022, 22:40
+1
Никакой магии и квантовой физики, всего лишь нужно вызывать такие сниппеты НЕКЕШИРОВАННЫМИ, т.е.
{$_modx->runSnippet('!pdoCrumbs', options}
20 декабря 2021, 14:39
+1
Если речь идёт о доступе к странице, то правильный подход будет через контроль доступа и группы ресурсов
18 декабря 2021, 19:57
+2
@Александр Мельник Это всё хорошо, но нужно отставить панику!

Сегодня обнаружил, что свойство form у response перестало указывать на конкретную форму..
Это временный глюк? Или так всегда и было и это меня глючит?
Получается если я нажму обновить ajaxform на всех своих сайтах, у меня придет в нерабочее состояние отправка целей в метрику, закрытие модальных форм.
А точно перестало? Александр, если бы вы пользовались github-ом, то могли бы удостовериться, что ничего не изменилось.

AjaxFrom, насколько я знаю, использует для отправки формы jquery.form, а он всегда возвращал 4-ым параметром jQuery объект.

Пытаюсь понять почему в более старых версиях AjaxForm я мог внутри события af_complete получить форму как const form = response.form и мог например сразу получить у нее data атрибуты. А теперь нет.
Вы путаете jQuery объект с Element, это проблема разработчиков которые изучали js через jQuery

response.form // jQuery object

response.form[0] // Element/HTMLElement
response.form.0 // Element/HTMLElement
response.form.eq(0) // Element/HTMLElement
response.form.get(0) // Element/HTMLElement

Как получить дата атрибуты формы с помощью jQuery?

const data = response.form.data()
console.log(data) // { attr: "value", foo: "bar" }

const foo = response.form.data('foo')
console.log(foo) // bar

Как получить дата атрибуты формы без него?

const form = response.form[0]
const data = form.dataset
console.log(data) // { attr: "value", foo: "bar" }

const foo = form.dataset.foo
console.log(foo) // bar

const foo = form.getAttribute('data-foo')
console.log(foo) // bar

const foo = form.attributes.getNamedItem('data-foo').value
console.log(foo) // bar
22 октября 2021, 16:12
0
Сергей, Ajax не возвращает, сервер отвечает на запрос, причём тут MODX, вы шлете запрос по адресу /calc, там есть файл? Есть плагин который отлавливает запросы по данному адресу? Есть компонент который отлавливает запросы по этому адресу?

Если что-то есть, то будьте добры предоставить, т. к. на данный момент всё что вы написали это — «Мне нужна помощь». Какая помощь и в чем, видимо люди должны сами догадаться
03 сентября 2021, 20:18
+2
Проблему можно решить с помощью js события onerror
03 сентября 2021, 14:10
0
решилось так, не знаю, насколько правильно
Неправильно, эту задачу нужно решать либо со стороны html, т.е. если элемент не является ссылкой, то и использовать нужно другой элемент, но если удобнее использовать ссылку, но его поведение должно быть другое, то js вам в помощь

document.querySelectorAll(selector).forEach(item => item.addEventListener('click', e => e.preventDefault()));
03 сентября 2021, 14:02
+1
Его формируют сниппеты mSearchForm и mFilter2
02 сентября 2021, 11:00
+1
Грешу на ЧПУ и htaccess, но не знаю, куда копать. Подскажите, может, кто сталкивался.
А туда и не надо копать, это поведение браузера. Если вы находитесь на странице domain.com/side/left/right, то адрес ссылки должен быть domain.com/side/left/right#, а не #. Именно поэтому и вас перекидывает на главную страницу
17 августа 2021, 14:26
1
0
А где можно узнать какие параметры должны передаваться в $where а какие в $options?
В where выборка, а в options вот
17 августа 2021, 11:07
+4
Ура, уважаемый Сергей теперь вместо того, чтобы просто бомбить, будет бомбить и делать)