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

    Последние 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).
    Поделиться публикацией

    Похожие публикации

    Комментарии 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
                    Отлично работает — полезный плагин, в копилку

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

                    Самое читаемое