30 января 2011 в 09:27

MODx — немного улучшаем админку Evolution

MODX*
Последние 3 дня я провел за изучением Revolution, и решил, что мои проекты пока еще рано переводить на нее. Но мне очень понравилась там одна фишка в админке, а именно: при открытии любого ресурса тырчик сохранения стоит на «Продолжить редактирование». То есть, вы открываете ресурс, редактируете, сохраняете и можно редактировать дальше.

Лично мне это очень удобно, так как все чанки и сниппеты я редактирую в аминке с помощью EditArea.
Но в Evolution нужно при заходе в ресурс переставить тырчик с «Закрыть» на «Продолжить», что очень раздражает, ведь EdiatArea умеет сохранять документ по Ctrl+S, и если в пылу изменений забыл переставить тырчик и нажал, по привычке Ctrl+S — придется искать, что ты только что редактировал.

Мелочь, но не приятно. А из таких мелочей складывается рабочий день и настроение в целом.

Вариант решения простой: нужно сделать плагин, который за меня будет переключать тырчик на нужную позицию.





5 минут на изучения разметки админки, и нужный элемент найден — это select#stay.
Дальше дело техники:
Создаем плагин (Управление элементами->Плагины->Создать плагин), называем его AlwaysStay и копируем код
$e = & $modx->Event;
if ($e->name == "OnDocFormRender" ||
    $e->name == "OnTempFormRender" ||
    $e->name == "OnChunkFormRender" ||
    $e->name == "OnSnipFormRender" ||
    $e->name == "OnPluginFormRender"
   ) {
      $html = "
          <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'  type='text/javascript'></script>
          <script type='text/javascript'>
              var j = jQuery.noConflict();
              j(document).ready(function() {
                  if (j('#stay #stay3').attr('selected') == true) {
                      j('#stay #stay2').attr('selected', true)
                  };
              })
          </script>
      ";
      $e->output($html);
}

Updated
Спасибо камраду Andchir за более приятный код, советую использовать его, если вам не нужен jquery.
    <script type='text/javascript'>
        if(!$('stay').value) $('stay').value=2;
    </script>


На вкладке «Системные события» отмечаем
OnDocFormRender
OnTempFormRender
OnChunkFormRender
OnSnipFormRender
OnPluginFormRender

Сохраняем и все готово.

Заходим в любой документ или сниппет и видим, что тырчик стоит в положении «Продолжить». Если его переставить в положение «Создать новый» — то оно также сохранится.
Если хотите, чтобы плагин не работал на чанках, к примеру, отключите соответствующее событие (OnChunkFormRender).
Василий Наумкин @bezumkin
карма
28,0
рейтинг 0,0
Похожие публикации
Самое читаемое Разработка

Комментарии (15)

  • 0
    Да, действительно, приятная вещь получилась.
  • +2
    Поздравляю. Вы написали топик о том, как на jQuery переключить селект. Браво! Статья достойна быть на хабре.
  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Мне помогло. Спасибо.
    • 0
      На здоровье!
  • 0
    На Mootools, который всегда есть в MODx (или даже чистом JS) такое сделать тоже очень просто. Не вижу необходимости подключать jQuery. И могут быть проблемы с плагином ManagerManager, который тоже подключает свой jQuery.
    • 0
      Да, согласен, но я не знаю mootools, не использую managermanager и в моем плагине jQuery запускается через noConflict.

      Напишите вариант на mootools, я буду вам благодарен!
      • 0
        j('#stay #stay3')

        и это очень не красиво.

        Вот Mootools:
        if($('stay').value!=2) $('stay').value=2;
        

        А вот чистый Javascript:
        var staySelect = document.getElementById('stay');
        if(staySelect.value!=2) staySelect.value=2;
        

        • 0
          А j(document).ready() в данном случае не нужно.
        • 0
          Вариант с mootools не работает, а на чистом js — работает, но при выборе «создать новый» при сохранении переключает на «продолжить»!

          Правильнее будет:
          var staySelect = document.getElementById('stay');
          if (staySelect.value == 3) {staySelect.value=2;}
          


          Спасибо за более приятный код! Добавил в пост.
          • –1
            А нет, я поспешил — так не работает.

            При загрузке новой странички не читает value. Дело, видимо, как раз в отсутствии $(document).ready()

            Нужно либо добавлять функцию в body onload='' или писать вот такого монстра.

            Я буду дальше использовать jquery.

            Скажите честно, вы не проверяли свой код, когда писали комментарии?
            • 0
              Скажите честно, вы не проверяли свой код, когда писали комментарии?
              Проверял. Работают оба варианта. Может у вас какой-то другой плагин подгружает jQuery или вы его забыли убрать.
              Зачем там $(document).ready()? Посмотрите по HTML-коду, нужный селект загружается в DOM раньше вашего скрипта.
              Я буду дальше использовать jquery.

              Это называется — деградация, ИМХО.
        • +1
          if(!$('stay').value) $('stay').value=2;

          Так будет корректнее.
          • 0
            Писал длинный каммент, обновил и увидел ваше сообщение :-)

            Спасибо — тут все отлично работает. Добавляю в топик.
  • 0
    Отлично работает — полезный плагин, в копилку

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.