Всего 123 797 комментариев

Сергей Фещуков
23 марта 2023, 11:45
0
На текущий момент не работает по складам компонент, то есть реализовать нельзя такое на текущий момент. В будущем планируется такой функционал, но когда не могу сказать.
Максим
23 марта 2023, 11:43
0
Подскажите, пожалуйста, возможно ли с помощью Вашего модуля записывать остатки у товара по складам?
Баха Волков
23 марта 2023, 11:18
+1
Пожалуйста

1. Помни, это может поменяться, обращай внимания на обновления FetchIt
2. Пиши так:

let a = D.querySelector('.modalTmp form').getAttribute('data-fetchit')
// или
let a = D.querySelector('.modalTmp form').dataset.fetchit
Константин Ильин
23 марта 2023, 08:02
0
Спасибо, «кастомно» получилось

if (FetchIt === undefined){
    D.querySelector('head').append('<script src="/assets/components/fetchit/js/fetchit.js" defer=""></script>');
}
if(!empty(FetchIt)){
    let a = D.querySelector(".modalTmp").querySelector('form').getAttribute('data-fetchit')
    FetchIt.create({
        action: a,
        assetsUrl: "/assets/components/fetchit/",
        actionUrl: "/assets/components/fetchit/action.php",
        inputInvalidClass: "is-invalid",
        customInvalidClass: "",
        clearFieldsOnSuccess: true,
        pageId: hashp,
    });
}
mekirile
22 марта 2023, 22:34
0
Готов поделить расходы на доработку компонента, т.к. сам нуждаюсь в его обновлении.
Баха Волков
22 марта 2023, 20:12
+1
Если коротко, то так:

const fetchitInstance = new FetchIt(form: HTMLFormElement, config: {
  action: string,
  assetsUrl: string,
  actionUrl: string,
  inputInvalidClass: string,
  customInvalidClass: string,
  clearFieldsOnSuccess: boolean,
  pageId: number,
});

// или

FetchIt.create(config: {
  action: string,
  assetsUrl: string,
  actionUrl: string,
  inputInvalidClass: string,
  customInvalidClass: string,
  clearFieldsOnSuccess: boolean,
  pageId: number,
});

Но проблема в том, что конфиг генерируется во время рендера страницы. Так уж задумано. Я подумаю как можно облегчить такие задачи в будущем
Артур Шевченко
22 марта 2023, 19:46
+1
Всё просто. В документации к API написано куда и какие запросы слать и какой ответы ты получишь. Тебе нужно с помощью curl отправлять запросы, а потом обрабатывать полученный результат с помощью php и API Modx. Как ты оформишь код дело твое. Запускать можно или кроном или в плагинах, зависит от задачи.
Константин Ильин
22 марта 2023, 12:52
0
Подскажите пожалуйста, если форма подгружается после инициализации FetchIt, например модалку(с вызовом сниппета FetchIt) подгружаю по надобности, как на форму в модалке «инициализировать» FetchIt?
Баха Волков
22 марта 2023, 11:22
0
В серверной части FetchIt практически является форком AjaxForm.
Виктор
22 марта 2023, 10:52
0
Не знаю, как кому, а мне это не помогло.
Установил 3.0.3 поверх 2.8.5, админка перестала работать сразу. Просто ни одна кнопка не работает и всё. В консоли — куча ошибок.
После выполнения трюка с заменой Om часть русских букв появилась, остальное — так же нечитаемо. Админка осталась мёртвой.
Денис Усачев
22 марта 2023, 10:28
0
У меня работает так
<div class="cookie-message js-cookie-message">
    <div class="container">
        <div class="cookie-message-inner">
            <div class="cookie-message-text">
                We use cookies to enhance your experience. 
            </div>
            <button class="button js-cookie-message-confirm">OK</button>
        </div>
    </div>
</div>
<script>
const el = document.querySelector('.js-cookie-message');
    if (!localStorage.getItem('cookieAccept') || localStorage.getItem('cookieAccept') == 0) {
        el.style.display = 'block';
        el.querySelector('.js-cookie-message-confirm').addEventListener('click', (e) => {
            localStorage.setItem('cookieAccept', 1);
            el.style.display = 'none';
        }, true);
    } else {
        el.style.display = 'none';
          
    }
</script>
Артур Шевченко
21 марта 2023, 22:56
0
Отправка писем прописана в классе minishop2, расширение которого не предусмотрено. Либо пиши свою отправку, либо правь исходники, либо отправляй ссылку на файл загруженный на сервер.
Тодор
21 марта 2023, 22:37
1
0
Лучше написать свой снипет (что то типо такого):
<?php
$tvId = "TV id";
$tvr = $modx->getCollection('modTemplateVarResource', array(
  'tmplvarid' => $tvId,
  'contentid:IN' => [1,2,3]//список ИД ресурсов
));
foreach($tvr as $tv){
    $value = json_decode($tv->get('value'), 1);
    foreach($value as $item){
        echo $item['title'];
    }
}
exist17
21 марта 2023, 22:04
0
Вопрос. Компонент использует сессии для хранения параметров так же как AjaxForm или этот момент решен как то иначе?
Артур Шевченко
21 марта 2023, 20:05
+1
Добавлять авторизацию и регистрацию — это не «такое себе»
Не такое себе, я этим пользуюсь, мне удобно когда это есть.

Т.е. для простой задачи добавить и/или изменить значение в форму перед её отправкой, нужно манипулировать с DOM или расширить класс?
Я согласен, что это не самое удобное решение, но вынужден повторить — в моей практике нечасто встречаются кейсы требующие манипулировать значениями перед отправкой, поэтому я и не добавил дополнительных событий.

Именно с этим лозунгом ты сменил jquery-form на XMLHttpRequest
Нет, лозунг был другой: одна отключаемая зависимость лучше двух обязательных.

Ты проигнорировал вопрос про асинхронность в XMLHttpRequest
Потому что счёл его риторическим, логично же что никаких работ по усовершенствованию не ведётся, разработан новый API и его развивают.

А когда в XMLHttpRequest появится (спойлер — не появится, но есть библиотеки-обёртки над ним в которых реализована асинхронность) ты обратно перепишешь с Fetch API на XMLHttpRequest?
Ты меня за идиота принимаешь? Я решаю возникающие у меня задачи, удобным для меня способом. Мне нужно показывать процесс загрузки, Fetch API этого не умеет, я использовал XMLHttpRequest. По-моему всё логично.

Мне кажется ты упускаешь суть: ты писал компонент с целью внедрения Fetch API, я писал компонент с целью повысить удобство собственной работы и отказаться от использования jQuery. Не вижу причин по которым я обязан был использовать Fetch вместо XMLHttpRequest. Для пользователя компонента это вообще не важно, что там под капотом, главное это стабильное выполнение необходимых ему функций.

И наконец, всё что ты перечислил в качестве проблем AjaxFormitLogin, всего лишь твоё скромное мнение, о чем ты забыл упомянуть, отчего кому-то может показаться, что перечисленные тобой «проблемы» действительно серьезно могу усложнить жизнь пользователю моего компонента. Я думаю тот, кому понадобится больше событий и API, легко поймёт, что всё это есть в FetchIt, и выберет именно его.
Баха Волков
21 марта 2023, 19:30
+1
Кстати, тут меня в комментариях @Лёша спросил про возможность показа сообщения в самой форме и я показал как это можно реализовать, но дело в том, что такая возможность была в альфа версии компонента, но я потом убрал такой функционал из коробки. Если проявите интерес, то я могу вернуть его.
Баха Волков
21 марта 2023, 19:17
+2
просто потому что я не могу придумать для чего это может понадобиться лично мне. А добавлять что-то, чтобы было такое себе.
Ну Артур, ну какой ты молодец. Добавлять авторизацию и регистрацию — это не «такое себе», просто я не понял и это вообще другое.

Хорошо, ты не смог придумать, а я представь — смог. Тык, тык и тык.

Грубо говоря да, но при желании всегда можно расширить класс.
Прости, но мне придётся поязвить — ты же обязательно покажешь как расширить класс? Т.е. для простой задачи добавить и/или изменить значение в форму перед её отправкой, нужно манипулировать с DOM или расширить класс? Прикольно.

Нет смысла обновлять то, что и так работает.
Я уже понял. Именно с этим лозунгом ты сменил jquery-form на XMLHttpRequest

Когда такая возможность появится — перепишу.
Ты проигнорировал вопрос про асинхронность в XMLHttpRequest, но это приводит к более веселой ситуации: А когда в XMLHttpRequest появится (спойлер — не появится, но есть библиотеки-обёртки над ним в которых реализована асинхронность) ты обратно перепишешь с Fetch API на XMLHttpRequest?