Баха Волков

Баха Волков

С нами с 10 ноября 2016; Место в рейтинге пользователей: #12
Баха Волков
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
Ура, уважаемый Сергей теперь вместо того, чтобы просто бомбить, будет бомбить и делать)
Баха Волков
17 августа 2021, 11:05
+2
Добавить сниппетам возможность возвращать необработанный массив данных.
Это востребовано при использовании Fenom. Сейчас есть возможность получить такой массив через кодировку в json и обратно, но это всё-таки оверхед.
Я тут похлопаю
Баха Волков
17 августа 2021, 10:58
1
+1
1. Если обратить внимание, то метод getResources принимает 2 атрибута

А у вас:

{var $resources = $_modx->getResources(
    ['published' => 0, 'deleted' => 0], // Первый атрибут
    ['parents' => 2], // Второй атрибут
    ['sortby' => 'id', 'sortdir' => 'ASC', 'limit' => 0] // Третий атрибут, который будет игнорирован
)}

2. Незачем использовать метод getChunk, хотя может быть вы это для примера написали, но на всякий случай:

// Не надо так
{foreach $resources as $resource}
    {$_modx->getChunk('@INLINE <a href="#{$id}">{$pagetitle}</a>', $resource)}
{/foreach}

// Надо вот так
{foreach $resources as $resource}
    <a href="#{$resource.id}">{$resource.pagetitle}</a>
{/foreach}
Баха Волков
12 августа 2021, 17:23
+3
не помогло
Что значит не помогло? Ну ты же не простой пользователь браузера, приложи логи браузера или сам подумай почему не получается.

Давай за тебя подумаю: Не работает потому, что твой скрипт подключен до подключения скрипта fotorama
Баха Волков
07 августа 2021, 14:34
0
спасибо тебе дружище, не первый раз выручаешь.
Пожалуйста

Нужно задонатить тебе ;)
Это всегда можно)
Баха Волков
07 августа 2021, 13:49
+1
<div class="about-info">
    {set $rows = $_modx->resource.infoBox | fromJSON}
    {foreach $rows as $row}
        <div class="col-md-12">
            <div class="item">
                {set $childRows = $row.imageBox | fromJSON} - указываю вторую TV верно?
                {foreach $childRows as $chRow}
                    <div class="image-box">
                        <img src="{$chRow.image}" alt="">
                    </div>
                {/foreach}
                <div class="text-box">
                    <div class="text">
                        <span>{$row.title}</span>
                        {$row.text}
                        <a href="{$row.link}">{$row.linktext} <i>?</i></a>
                    </div>
                </div>
            </div>
        </div>
    {/foreach}
</div>
Баха Волков
02 августа 2021, 22:58
+1
$modx->log(level, string)
в помощь