Всего 123 801 комментарий

Дима Касаткин
22 января 2023, 16:34
0
Подскажите кто в курсе, какой лучший рецепт сейчас, для создания универсальных компонентов под MODX2+MODX3?

Если я соберу компонент способом из статьи, совместимости с MODX2 ведь не останется, а она пока нужна.
Роман
22 января 2023, 14:32
0
Понял идею, спасибо! Да можно и так, пока вроде получилось, своим снипетом tours_sort вот так,

$array;

foreach($array as $key => $val) {

$res = $modx->getObject('modResource',$val['id']);
$field_date = $res->getTVValue('field_date');
$array_field = json_decode($field_date, true);

foreach($array_field as $key => $val) {
      $sort_array[] = $val['date1'];
}
}
array_multisort($sort_array, SORT_ASC, $array);
return $array;
И подставляю уже на сайте вместо массива $tours {foreach $tours as $el}

{set $tours_sort = $_modx->runSnippet('!tours_sort', ['array' => $tour])}
{foreach $tours_sort as $el}
Артур Шевченко
22 января 2023, 13:54
0
Я бы сделал так. Создал бы для каждого тура отдельное поле date1. написал бы плагин, который из migx вытаскивал бы значение и клал в созданное поле date1. Вызывал бы pdoMenu с сортировкой по полю date1.
Роман
22 января 2023, 13:14
0
Пока для массива $tour пишу свой снипет,

<?php
$tour;
foreach($tour as $key => $val) {

$res = $modx->getObject('modResource',$val['id']);
$field_date = $res->getTVValue('field_date');
$array_field = json_decode($field_date, true);

foreach($array_field as $key => $val) {
      $date_tour[] = $val['date1'];
}
}
echo '<pre>';
print_r($date_tour);
echo '</pre>';
Получил тады, теперь хочу отсортировать их, но пока не получается

Array
(
[0] => 2023-02-18 14:21:00
[1] => 2023-02-11 15:06:00
)
Роман
22 января 2023, 12:45
0
Суть такая, есть список ресурсов контейнеров по месяцам, структура документов такая

-Туры (id 6)
-январь
— тур1
— тур2
-февраль
-март


Месяцы вывожу через pdoResources
{set $month = 'pdoResources' | snippet : [
'return' => 'json',
'parents' => 6,
'depth' => '0',
'limit' => '12',
'sortby' => ['menuindex' => 'asc'],
'where' => [
    'isfolder:=' => 1,
    'AND:published:=' => 1,
    'AND:hidemenu:=' => 1
]
] | json_decode : true}

///месяцы
{foreach $month as $item}
{$item.pagetitle} //название месяца 

///туры
{set $tour = '!pdoResources' | snippet : [
'return' => 'json',
'parents' => $item.id,
'showHidden' => 0,
'showUnpublished' => 0,
'sortby' => ['menuindex' => 'asc'],
] | json_decode : true}

{foreach $tour as $el}
{$el.id | resource: 'title'}  ///название тура

{set $date = json_decode($el.id | resource: 'field_date', true)}  //ДАТЫ ТУРА
{foreach $date as $idx => $item}
{$item.date1 | date_format : "%e %b %Y"} ////ДАТА ТУРА
{/foreach}

{/foreach}

{/foreach}
Так вот у туров ресурсов, есть TV MIGX FIELD_DATE у которого разные поля есть и нужное мне поле date1, вот по этому полю я хочу отсортировать вывод самих ТУРОВ. Это {foreach $tour as $el} массив $tour. Но пока слабоват как решить эту задачу.
Артур Шевченко
22 января 2023, 12:11
0
$resources = $modx->getIterator('modResource', array('parent' => 'id родителя А'));
foreach($resources as $resource){
$resource->set('parent', 'id родителя B');
$resource->save();
}
Артур Шевченко
22 января 2023, 12:08
0
Подход с контекстами самое гибкое решение, но самое неудобное с точки зрения администрирования. Если же без контекстов, то я чаще всего использую cityFields там есть определение по IP и для каждого города можно свои поля определить.
Артур Шевченко
22 января 2023, 12:04
0
Вообще непонятно чего ты хочешь получить сразу отсортированные данные или получить все данные, а потом отсортировать?
Артур Шевченко
22 января 2023, 11:58
0
А как вы поняли, что на странице такой конструкции нет?
Артур Шевченко
22 января 2023, 11:51
0
В нормальной вёрстке, меню можно отрендерить один раз, сохранить в плейсхолдер и вставить куда надо. Если же у вас вёрстка не позволяет так сделать, можно получить JSON и его разобрать дважды, это будет быстрее. Ещё можно использовать мой компонент MigxPageConfigurator он может отрендерить меню на этапе сохранения ресурса, тогда на фронт будет отдаваться чистый html.
Роман
22 января 2023, 10:36
0
Осталось понять как это сделать
Николай Савин
22 января 2023, 08:52
0
Хорошо посмотрю на досуге. Спасибо.
Stepan
22 января 2023, 06:13
0
я там пару изменений внес
мне помогли может и вам пригодится
Ильмир
21 января 2023, 23:53
0
Возникла проблема при подключении модуля ms_cdek2. Установил данное дополнение.
Подскажите, пожалуйста!
Кроме подключения Jquery-библиотек, вставки на страницу заказа вызова сниппета [[!ms_CDEK2]] что ещё не необходимо в обязательном порядке сделать, чтобы карта выбора ПВЗ СДЭК отобразилась на странице? Всё проделал из этого перечня, но не отображается.
Роман
21 января 2023, 14:55
0
Пока так получилось, осталось отсортировать по дате по полю date1 которое содержит дату

<?php
$array;

foreach($array as $key => $val) {

$res = $modx->getObject('modResource',$val['id']);
$field_date = $res->getTVValue('field_date');
$array_field = json_decode($field_date, true);

  foreach($array_field as $key => $val) {
      echo $val['date1'].'---
';
  }
}
Роман
21 января 2023, 12:10
0
да разницы нет я думаю MIGx просто или db, все равно придется для $field_date массива вывод делать не через fenom, а своим снипетом просто. Думаю хватит ума, передать в сниппет массив $field_date и там поле date получить и сформировать массив отсортировав по дате ил поля date и уже через echo распечатать.
Алексей Смирнов
21 января 2023, 09:45
0
Если прям сильно постараться, то можно, наверное.
А вообще мигикс хранит данные в json посему, ответ простой: никак.
Только если делать MIGXdb. Тут точно получится сделать по человечески сортировку.
Майкл
20 января 2023, 13:10
0
Интересно, собирал все webpack-ом, не работает, а если загрузить скрипт отдельно все отлично работает
<script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@17.8.3/dist/lazyload.min.js"></script>
<script>
var lazyLoadInstance = new LazyLoad({
    elements_selector: ".lazy"

});
    $(document).on('pdopage_load', function () {
    lazyLoadInstance.update();
});
</script>
Майкл
20 января 2023, 13:09
0
да конечно все подключаю в самом конце