Всего 125 701 комментарий

Ivanov Alexandr
15 июня 2021, 15:23
0
Только с Fenom работает? Почему то плейсхолдеры modx не срабатывают [[+answer]]
Ivanov Alexandr
15 июня 2021, 15:11
0
Я и в файлах делал чанки но все равно не подтягивало.
Спасибо сейчас вижу что заработало. Буду пробовать дальше.
Aleksandr Huz
15 июня 2021, 14:54
0
Такс, во первых спасибо, обязательно нужно изменить чанк. Я привык работать с файловыми элементами и поэтому чанк сделал для вывода файловых элементов. А по умолчанию, лучше выводит обычные чанки.
Вам нужно его изменить:
{$_modx->getChunk($chunk, $values)}
На тестовом сайте поменял.
Ivanov Alexandr
15 июня 2021, 14:51
0
Я так в принципе изначально делал, но так как чанк указанный не подтягивался я и начала ковырять по разному пробуя.
Ivanov Alexandr
15 июня 2021, 14:46
0
{'!pdoResources' | snippet: [
'frontend_css' => '',
'class' => 'pageBlock',
'loadModels' => 'pageBlocks',
'sortby' => 'rank',
'sortdir' => 'asc',
'limit' => 1,
'tpl' => 'tpl.PageBlocks',
'where' => [
'id' => 1,
'active' => 1
],
]}

Вызвал так как в документации
Получаю
Array ( [blocks] => Array ( [0] => Array ( [vopros] => Первый вопррос ) [1] => Array ( [vopros] => Второй ) ) )

Как мне чанк вызвать?
Aleksandr Huz
15 июня 2021, 14:41
0
Если посмотреть чанк, который идет с компонентом tpl.PageBlocks, то можно увидеть, что в соответствующий чанк передается только одно значtние — $values
{$_modx->getChunk('@FILE chunks/'~$chunk~'.tpl', $values)}
А вы вызываете чанк напрямую, значит он принимает только один параметр $values — это массив, и в нем уже все необходимые данные.
Ivanov Alexandr
15 июня 2021, 14:14
0
Да я уже написал вам и доступы скинул на почту через сайт.
Ковыряю как только могу ничего в голову не приходит.
Aleksandr Huz
15 июня 2021, 14:12
0
Скорее всего, что чанк не загрузился. Скинуть доступы в админку можете?
Ivanov Alexandr
15 июня 2021, 13:42
0
И очередно вопрос.
Создал таблицу, создал поле. Захожу добавляю блок вроде все красиво и понятно, удобней чем через migx
На сайте же мне выводит следующее
Array ( [blocks] => Array ( [0] => Array ( [vopros] => Первый вопррос ) ) )

Чанк который указал создан.
Евгений Лазарев
15 июня 2021, 11:35
0
Роман, извините, не хотел Вас обидеть. Эту документацию я уже много раз читал и понимаю что там находится. Там говорится лишь о удобности использования объекта msProduct, который объединяет в себе другие таблицы. Так же там сказано о возможности подключения своих плагинов и рассказан принцип. Я же хочу написать свой компонент (minishop2 в данном случае не установлен). Но спасибо за Ваше участие. Еще раз прошу прощения, если показался грубым.
Роман
15 июня 2021, 11:27
0
Не буду вам больше писать. Я понял, что это бесполезно, когда даже прочитать документацию до конца не могут.
Евгений Лазарев
15 июня 2021, 11:18
0
Спасибо Роман конечно, но вы уже второй раз не по делу пишите. Тут речь идет о СОЗДАНИИ своего компонента на основе существующего.
Роман
15 июня 2021, 10:33
0
Да можно через sobe.ru или yookassa.ru(для юр.лиц), бывшие сервисы яндекса.
Роман
15 июня 2021, 10:23
0
Вот тут почитайте про плагины товаров, думаю, все встанет на свои места.
Дмитрий
15 июня 2021, 01:17
+1
Выглядит очень достойно! Давно хотел такой конструктор. Возможно, он пригодится не только для контентных сайтов, но и в некоторых местах, где раньше приходилось использовать MIGX. Ждем расширения функционала!
Евгений Лазарев
14 июня 2021, 15:57
0
Короче вдруг кому пригодится. Вся магия происходит в msproduct.class.php, пока еще я там не разбирался. Но вызываться этот класс просто так не будет. Чтобы он вызывался, необходимо как в minishop2 добавить существующее поле class key с именем твоего класса
<object class="hdOrder" extends="modResource">
        <field key="class_key" dbtype="varchar" precision="100" phptype="string" null="false" default="hdOrder"/>

        <composite alias="Data" class="hdOrderData" local="id" foreign="id" cardinality="one" owner="local"/>
    </object>
И только после этого msproduct.class.php или в данном случае hdorder.class.php будет вызываться.
Сергей Малышев
14 июня 2021, 15:11
0
Быстро не нашел. Поэтому оставил все как есть.
Денис
14 июня 2021, 12:36
0
Нашли какое-нибудь решение?
Александр
14 июня 2021, 10:04
0
Если в коде не заменить вызов настроек $this->modx->getOption на свои значения, то выдает 500.
Сергей
14 июня 2021, 00:48
0
Спасибо за предложение! Я в итоге увлекся и сделал сам :)
Результат прикрепляю ниже. Может кому пригодится.
На правильность метода не претендую, для меня это рабочий вариант) От прорисовки страницы до загрузки таблицы с 30000 строк = 2,1 сек.

pdoPage сниппет. С ним одна проблема — он выводит результат на страницу, который нам не нужен. Пока не понял как его убрать — просто вывожу в скрытый div.
<div style="display:none">
[[!pdoPage?
    &parents=`2`
    &ajaxMode=`default`
    &sortby=`[[!#GET.sortby:default=`Id`]]`
    &sortdir=`[[!#GET.sortdir:default=`desc`]]`
    &tvFilters=`SecondName==%[[!#GET.search:default=``]]%`
    &tpl=`patientListTpl`
    &includeTVs=`Id,SecondName,Note` 
    &limit=`10`
]]
</div>

Комментарии:
  1. [[!#GET.sortby:default=`Id`]] — через GET из dataTable с помощью ajax передаем параметры для сортировки
  2. &tvFilters=`SecondName==%[[!#GET.search:default=``]]%` — точно так же передаем данные для поиска
  3. &tpl=`patientListTpl` — данные которые необходимо передать dataTable с целью отображения их в таблице. Формат данных:
    ["[[+tv.Id]]","[[+tv.SecondName]]","[[+tv.Note]]"],
    Каждое значение в кавычках соответсвует столбцам таблицы. В конце строки нужна запятая!

Инициализация dataTable:
$(function () {
    var orderparam = [0, "desc"]; //сортировка по дефолту по первому столбцу таблицы
    var columnparam = ["Id", "SecondName", "Note"]; //столбцы таблицы
    var table = $("#example1").DataTable({
        "order": [orderparam],
        "lengthChange": false,
        "processing": true,
        "serverSide": true, //определяет в каком формате мы отправим данные для dataTable в callback
        "ajax": function (data, callback, settings) {
            var pageinfo = table.page.info(); //узнаем номер страницы для передачи в pdoPage
            var orderinfo = table.order(); //узнаем сортировку для pdoPage
            var searchinfo = table.search(); //данные поиска для pdoPage

            //перед заполнением таблицы запрашиваем данные у pdoPage с помощью get запроса
            $.ajax({
                url: "kartoteka?page=" + (pageinfo.page + 1) + '&sortby=' + columnparam[orderinfo[0][0]] + '&sortdir=' + orderinfo[0][1] + '&search=' + searchinfo,
            }).then(function (json, textStatus, jqXHR) {
                var json = JSON.parse(json); //получаем JSON от pdoPage
                var output = json.output.replace(/,\s*$/, ""); //берем только нужные нам данные. Убираем лишнюю запятую.
                var dr = JSON.parse('{"data":[' + output + ']}'); //полученные нами данные - текст. Конвертируем его в JSON.

                //все что мы получили отдаем для заполнения таблицы
                callback({
                    draw: data.draw, //специальный счетчик обращений dataTable
                    recordsTotal: json.total, //количество строк в ответе от pdoPage
                    recordsFiltered: json.total, //количество строк в ответе от pdoPage
                    data: dr.data //данные для заполнения
                });
            });

        },
        //если вдруг нужны кнопки. Они отрисовываются после заполнения таблицы. Поэтому, кнопки добавляем с помощью initComplete
        "buttons": ["colvis"],
        "initComplete": function () {
            table.buttons().container().appendTo($('#example1_wrapper .col-md-6:eq(0)')); //обратите внимание не селекторы, у вас они могут отличаться
        }
    });
});