Всего 125 969 комментариев

Артур Шевченко
23 марта 2022, 18:05
0
Вооот ещё одна странность.
Илья Уткин
23 марта 2022, 16:49
0
Ну так теперь же всё как раз хорошо раскрыто — теперь вы можете разрабатывать дополнение, которое повторяет функциональные возможности существующих пакетов. Статья ведь про то, что ограничение сняли, теперь об этом не надо думать.
Александр Мельник
23 марта 2022, 15:40
0
Тоже постоянно сталкиваюсь с такой проблемой.
Обычно отказываюсь от использования pdoPage и придумываю что-то сам.
Вот недавно делал такое.
В шаблоне
{set $result = '!pdoResources'|snippet:[
'parents'=>$id,
'depth'=>0,
'limit'=>3,
'includeTVs'=>'',
'tvPrefix'=>'',
'tpl'=>'@FILE tpls/oneSolution.tpl'
]}
{if $result}
<section class="current-projects-use ip-decisions-slider wrapper">
    <div class="h4 completed-projects__title">name</div>
    <ul class="completed-projects__list-slider ip-decisions__slider" id="solutionsWrapper-{$id}">
        {$result}
    </ul>
    <a href="#" class="completed-projects__order button loadDataByAjax completed-projects__order-text"
        data-parent="{$id}" data-limit="3">
       Показать больше
    </a>
</section>
{/if}
на ссылке при клике по которой идет загрузке висят два дата атрибута. С идентификатором родителя и с числом, по сколько данных подгружать.

Есть javascript
const loadDataByAjaxs = document.querySelectorAll('.loadDataByAjax');
if (loadDataByAjaxs) {
    loadDataByAjaxs.forEach((btn) => {
        btn.addEventListener('click', async (event) => {
            event.preventDefault();
            const btn = event.target;
            const parent = btn.dataset.parent;
            const limit = btn.dataset.limit;
            const wrapper = document.querySelector(`#solutionsWrapper-${parent}`);
            const offset = wrapper.childElementCount ? wrapper.childElementCount : 3;
            console.log(wrapper.childElementCount);

            const data = new FormData();
            data.append('parent', parent);
            data.append('limit', limit);
            data.append('offset', offset);

            let response = await fetch('/core/elements/snippets/getData.php', {
                method: 'POST',
                headers: {},
                body: data
            });

            let result = await response.text();
            if (result) { wrapper.innerHTML += result; } else { btn.remove(); }
        });
    });
}
Он навешивает функцию на событие click, собирает данные о родителе, сколько загружать и высчитывает, а сколько данных уже отображено на странице, чтобы создать offset

И есть php файл
<?php
require_once 'path_to/config.core.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('web');
$modx->getService('error','error.modError', '', '');
$parent = $_POST['parent'];
$limit = $_POST['limit'];
$offset = $_POST['offset'];

$output = $modx->runSnippet('pdoResources',array(
    'parents' => $parent,
    'limit'=> $limit,
    'offset'=>$offset,
    'includeTVs'=>'',
    'tvPrefix'=>'',
    'tpl'=>'oneSolution.tpl'
 ));
 echo $output; 
die();
К этому скрипту отправляет запрос javascript и получает назад html нужных элементов которые потом подставляются на страницу.
Такой способ позволяет на странице иметь сколько угодно блоков, потому что каждый из них имеет свой уникальный идентификатор, в которые информация будет погружать отдельно.
Роман
23 марта 2022, 15:26
0
Используй pdoPage
Андрей
23 марта 2022, 15:01
0
Ну вероятно надо смотреть скрипт который возвращает данные, т.к. он скорее всего возвращает в блок с классом ajax-container. Соответственно просто скопировав блоки сделать не получится, надо править скрипт.
Александр Быковский
23 марта 2022, 14:49
0
изначально тестировал на хроме, потом уж сафари (всё ios). Ни там ни там
Артем
23 марта 2022, 14:20
0
Ну на самом деле вы придумываете несуществующую ситуацию.
Я бы очень поспорил с этим заявлением.
Достаточно открыть тред недельной давности и посмотреть на споры в комментах между «дублирует» и «не дублирует».
Если бы эти условия были четко прописаны, то никто не спорил.
Артем
23 марта 2022, 14:17
0
то это явно претендент на размещение и ни у кого не будет никаких претензий.
Только об этом нигде не написано и узнать об этом можно только из комментариев к этому треду или в техподдержке, о чем я выше и говорил.
Где та грань, при которой «очевидно», а где та, при которой «спорно», а где та, при которой «всего скорее нет»?

Я даже процитирую свои слова, чтобы не повторять это снова.

В общем, мой посыл в том, что было бы хорошо раскрыть этот пункт и внести больше ясности, которая позволила разработчикам меньше ломать голову и больше заниматься разработкой, а не бюрократией и переписками с техподдержкой.
Артур Шевченко
23 марта 2022, 14:07
0
Ну да, к сафари вопрос.
Николай Савин
23 марта 2022, 13:59
0
Давай будем корректны — Как бы Ios сам по себе ничего не рендерит. Это вопросы к движку браузера тогда уж.
Илья Уткин
23 марта 2022, 13:47
+2
Этим правилом решается проблема несправедливости. Всё мы понимаем, что сделать аналог какого-то дополнения будет проще, чем придумать его с нуля. И такие аналоги могут начать демпинговать — пострадает и автор, и магазин. Так что это правило защищает в первую очередь авторов. И вы как разработчик можете быть уверены, что после размещения компонента будете защищены от демпинга.
Илья Уткин
23 марта 2022, 13:44
+2
Ну на самом деле вы придумываете несуществующую ситуацию. Если дополнение включает в себя только 30% функционала «похожего» дополнения, а на 70% состоит из нового функционала, то это явно претендент на размещение и ни у кого не будет никаких претензий. У нас есть msDiscount и msPromoCode. И то, и другое — скидки, но всем абсолютно очевидно, что это разные дополнения и выполняют они разные функции разными способами.
Артур Шевченко
23 марта 2022, 13:41
0
Спасибо за подробности, пока нет времени разбираться, но как появится погляжу.
Артур Шевченко
23 марта 2022, 13:40
0
Согласен звучит бредово, но я реально не понимаю почему на ios может не работать. У меня была похожая ситуация с другим скриптом, там замена на var помогла. Думаю дело в области видимости, но вот что конкретно… Ладно будет время поковыряю этот момент.
Артур Шевченко
23 марта 2022, 13:37
0
Странно. Значит дело не в этом.
Vladimir
23 марта 2022, 11:56
0
Ошибка в посте, и происходит после кода как у вас, я читал доки.
Zhan
23 марта 2022, 11:16
0
У меня почему-то не работает, хотя кнопка появляется, но не подгружает новости
Роман
23 марта 2022, 10:27
0
Чтобы он стал возможен, необходимо однократно выполнить код (можно в Console):
$modx->addExtensionPackage('simplequeue', '[[++core_path]]components/simplequeue/model/');
Дмитрий
23 марта 2022, 09:40
0
Открыл
Александр Быковский
23 марта 2022, 09:00
0
Для чистоты эксперимента переключил работу дополнения в дефолтный режим. Форма на айфонах отправляется и проходит валидацию




По моим наблюдениям в режиме nojq затык происходит в момент отправки запроса: форма будто бы замирает, либо пытаясь отправить данные, либо ожидая ответа от сервера