Роман

Роман

Был в сети 23 августа 2025, 12:04
Заказы не принимаю
ну вот да, такая задача, есть разные ресурсы, в них заполнен один и тот же TV MIGX, и вот все эти данные нужно вывести на главной странице, с трех id, друг за другом, но дублировать циклы друг за другом, совсем не хочется :(
Понял идею, спасибо! Да можно и так, пока вроде получилось, своим снипетом 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}
Пока для массива $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
)
Суть такая, есть список ресурсов контейнеров по месяцам, структура документов такая

-Туры (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. Но пока слабоват как решить эту задачу.
Пока так получилось, осталось отсортировать по дате по полю 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'].'---
';
  }
}
да разницы нет я думаю MIGx просто или db, все равно придется для $field_date массива вывод делать не через fenom, а своим снипетом просто. Думаю хватит ума, передать в сниппет массив $field_date и там поле date получить и сформировать массив отсортировав по дате ил поля date и уже через echo распечатать.