Сравнение дат в админке

Добрый день.

Есть два TV поля с типом «дата».
Первое поле — «Дата начала»
Второе поле — «Дата завершения»

Есть ли возможность сделать так, чтобы менеджер не мог поставить дату завершения меньше даты начала?
Сергей
21 января 2020, 20:21
modx.pro
2
169
0

Комментарии: 8

Станислав
21 января 2020, 20:26
+1
если в админке, то нужно плагин написать
    Сергей
    21 января 2020, 21:19
    0
    Спасибо!

    Разбираюсь с плагинами.
    Подскажите, как получить TV до сохранения ресурса.

    $resource->getTVValue('date') — таким образом берет уже существующее значение

    Событие использую OnBeforeDocFormSave. Или нужно другое событие?
      Станислав
      21 января 2020, 21:29
      0
      я думаю да, можете еще тут посмотреть https://www.riwkus.pro/notes/web/back-end/modx/plugins-and-events/
        Сергей Шлоков
        22 января 2020, 11:45
        +2
        $resource->getTVValue('date') — таким образом берет уже существующее значение
        Это метод стучится в базу. А в базе ещё старое значение.

        По-моему, к ТВшке можно обратиться через свойство изменяемого ресурса — «tv» + id ТВ.
        // Для ТВ с id 7
        $resource->tv7
          Сергей
          22 января 2020, 11:55
          0
          Действительно, работает. Большое спасибо!)

          Может вам так же известно как подсветить поле красным и сфокусироваться на нем?
          Как это работает с стандартной валидацией полей в MODx при сохранении.
            Сергей Шлоков
            22 января 2020, 12:35
            0
            Сие мне неведомо. А ковырять код не имею желания. ;)
      Сергей
      22 января 2020, 13:30
      0
      В итоге плагин сделал вот так:
      switch ($modx->event->name) {
          case 'OnBeforeDocFormSave':
              $id = $resource->get('id');
              $parent = $modx->getParentIds($id, 10, array('context' => 'web'));
              
              $datestart = date("Ymd", strtotime($resource->tv17));
              $dateend = date("Ymd", strtotime($resource->tv18));
              
              if ($parent[0] == 2) {
                  if ($datestart > $dateend) {
                      $modx->event->output('Сообщение о ошибке');
                  }
              }
              break;
      }
      OnBeforeDocFormSave — плагин срабатывает до сохранения ресурса
      $modx->event->output() — выводит текст о ошибке в модальном окне и не сохраняет ресурс
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      8