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).
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 15
    • 0
      Да, действительно, приятная вещь получилась.
      • +2
        Поздравляю. Вы написали топик о том, как на jQuery переключить селект. Браво! Статья достойна быть на хабре.
        • НЛО прилетело и опубликовало эту надпись здесь
          • 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
                  Отлично работает — полезный плагин, в копилку

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