Плагин editButton

Возможно я снова изобрел велосипед, но сегодня надоело ходить по админке в поисках нужного ресурса для редактирования.
Представляю вам плагин editButton, который просто выводит ссылку на редактирование текущей страницы в админке.

Скопипастить, назначить событие OnWebPagePrerender, поменять стили по вкусу:
<?php
if ($modx->event->name == 'OnWebPagePrerender') {
    if (!$modx->user->isAuthenticated('mgr')) {return;}
    
    $html = '
        <div style="position:absolute;z-index:1000;left:5px;top:5px;" id="editButton">
            <a href="/manager/index.php?a=30&id='.$modx->resource->id.'">Редактировать эту страницу</a>
        </div>';
    $modx->resource->_output .= $html;
}
Работает, понятно, только для авторизованного менеджера.

По желанию, можно добавить еще ссылок — смотрите на параметр &a= в строке браузера, когда гуляете по админке. Меня уже очень радует этот плагин, особенно при редактировании статей блога.

Следующая заметка
Модификация getPage
Предыдущая заметка
Jason Coward обновил getPage до версии 1.2.3


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

  1. Toyo 28 июня 2012, 10:11 # 0
    Василий, есть только один косячок:
      <a href="http://manager/index.php?a=30&id=1">Редактировать страницу</a>
    
    Быть может есть возможность в Modx прикрепить этот код к коду ресурса?
    1. Василий Наумкин 28 июня 2012, 10:14 # 0
      Какая разница, что код невалидный, если он работает и его видит только авторизованный в админке человек?
      1. Василий Наумкин 28 июня 2012, 10:17 # 0
        Ну и на всякий случай — да, возможность есть. Это функция
        $modx->regClientHTMLBlock($html);

        Но плагином она работает только при событии OnWebPageInit, когда еще нет ресурса и нет его id.

        Поэтому сделал так — легко, просто и невалидно.
        1. Toyo 28 июня 2012, 10:20 # 0
          Спросил на всякий случай) Вдруг такая возможность имеется, а мы ее не используем.
          1. Василий Наумкин 28 июня 2012, 10:23 # 0
            Я не особо разбирался, ибо это действительно не важно.

            Но конечно, можно просматривать весь html контента страницы и вставлять этот блок перед при помощи str_replace().

            Только зачем нам эта лишняя работа?
            1. Toyo 28 июня 2012, 10:28 # 0
              Это было первое, что я придумал…

              Вот получилось так:

              <?php
              if ($modx->event->name == 'OnWebPagePrerender') {
              if (!$modx->user->isAuthenticated('mgr')) {return;}

              $output = $modx->resource->_output;

              $html = '
              Редактировать страницу
              ';

              if (preg_match("|.*?|is", $output)) {
              $output = preg_replace("|.*?|is", '', $output);
              $output .= $html;
              $output .= '';
              }
              else {
              $output .= $html;
              }

              $modx->resource->_output = $output;
              }
              1. Василий Наумкин 28 июня 2012, 10:34 # 0
                Если уж дополнительно обрабатывать каждую страницу, используйте хотя бы более быстрый str_replace(), нежели регулярное выражение:

                $modx->resource->_output = str_replace('', $html.'', $modx->resource->_output);
      2. Valentin Rasulov 28 июня 2012, 13:45 # 0
        Не знаю. на сколько это для вас удобно. Но я просто копирую алиас ресурса с урла и в админки вбиваю его в поиск. Ресурс сразу найден
        1. Василий Наумкин 28 июня 2012, 13:51 # 0
          Ваш вариант:
          1. Скопировать (без html и сайта)
          2. Перейти на страницу с админкой (если не открыта — открыть)
          3. Найти в меню Сайт — Поиск
          4. Вставить, поискать
          5. Правой кнопкой на найденном — редактировать
          6. Добрались, ура!

          А у меня — один клик. Заранее только в админке надо авторизоваться, чтобы ссылка появилась. Или просто, запомниться в админке на год.
          1. Valentin Rasulov 29 июня 2012, 11:43 # 0
            это не вариант — это решение. А вообще в проектах (правда редактировалось с фронта), я использовал снипет. Т.е. в шаблоне воткнул- и всё. А самое главное, что вы выводите только там где нужно. Ведь плагином муторно ограничить на каких ресурсах нужно.
            С другой строны, т.е. в твоём варианте — тоже не вижу ничего плахого, чтобы ссылка выводилась на всех ресурсах :) (кушать не просит).
            1. Василий Наумкин 29 июня 2012, 11:50 # 0
              Можно еще javascript`ом ее скрывать и показывать при наведении.

              Сейчас дальше пошел извращаться — сделал ссылку на редактирование товара в miniShop — и его научил вызывать окно с товаром в админке, если в url определенные $_GET параметры.

              Очень жизнь на магазинах упростит.
              1. Valentin Rasulov 29 июня 2012, 11:52 # 0
                тоже логичный вариант!
                1. Иван Брежнев 29 июня 2012, 12:22 # 0
                  Ждем
                2. Valentin Rasulov 29 июня 2012, 11:51 # 0
                  ааа. вспомнил почему снипетом! Ведь легче найти нужный ресурс, к примеру Новости в пагинации. т.е. у нас выводятся к примеру новости с пагинацией… и в шаблоне вывода getResources ты вставляешь этот снипет.
                  Скрин — screencloud.net/v/k7G
                  Если в админке или зарегился с фронта — то появляется карзинка и значок редактировать…
                  1. Василий Наумкин 29 июня 2012, 11:52 # 0
                    На 10 новостей 10 вызовов сниппета.

                    Плагин лучше — один вызов всегда. А перейти на новость и там нажать на ссылку просто.

                    В общем, на вкус и цвет.
                    1. Valentin Rasulov 29 июня 2012, 11:56 # 0
                      20 вызовов — или 30, ведь мы не к БД обращаемся — хотя тоже время выгребаем.

                      И то, согласен с тобой. В таком случае самы оптимальный вариант — это сделать через яваскрипт. Тогда можно добавлять хоть сорок таких кнопок на страницу, привязываясь к контейнеру ресурса по id.

                      Лады, главное идея — а уже извращаться каждый по своему может!
              2. Василий Наумкин 28 июня 2012, 13:51 # 0
                И вообще, хватит уже «на вы», как будто не знакомые.

                Чего мы с тобой тут из себя культурных строим? =)
                1. Valentin Rasulov 28 июня 2012, 13:52 # 0
                  ну, правило приличия чтоли… :)
              3. Viktor Minator 28 июня 2012, 14:24 # 0
                Представляю вам Лагин
                1. Василий Наумкин 28 июня 2012, 14:26 # 0
                  Молниеносно поправил =)
                2. Иван Брежнев 28 июня 2012, 16:25 # 0
                  Отличное решение!
                  1. Viktor Minator 01 июля 2012, 02:31 # 0
                    хехе. прилепил себе. сижу радуюсь =) сэкономлю месяц жизни одной кнопкой. спасибо.
                    1. Василий Наумкин 01 июля 2012, 03:39 # 0
                      В новом минишопе, наверное, этот плагин сразу в комплекте будет идти.
                    2. СикретНаме 16 октября 2012, 13:33 # 0
                      Велосипед-не велосипед, а штука офигенная. Думаю, манагеры будут визжать и хрюкать от восторга! Я, так уже! На выхах займусь изучением &a= :0) Спасибо, Василий!
                      1. СикретНаме 16 октября 2012, 13:38 # 0
                        Вопрос, не стоит ли сразу поменять «target=»_blank" на "_top", чтобы избежать bezumkin.ru/help/220/?
                        1. Василий Наумкин 16 октября 2012, 13:43 # 0
                          Поменял.
                      2. Александр Наумов 16 октября 2012, 18:39 # 0
                        Удобная плюшка, спасибо!
                        1. Denys Butenko 16 октября 2012, 20:47 # 0
                          Угу, удобная, сделал эту панельку через twitter-bootstrap — navbar-bottom-fixed.
                          1. Антон Соловьёв 14 сентября 2013, 13:12 # 0
                            А есть преимущество перед
                            <div class="debug" style='background:#fff;position:absolute;z-index:1000;left:5px;top:5px;'>
                            Всего: [^t^] [время запросов: [^qt^], всего запросов: [^q^], время парсинга: [^p^] источник: [^s^]
                                    <div id="editButton">
                                        <a href="/manager/index.php?a=30&id=[[*id]]">Редактировать эту страницу</a>
                                    </div>'
                            </div>
                            [[!$[[+modx.user.id:memberof=`Administrator`:then=`DEBUG`]]]]
                            
                            ?
                            1. Василий Наумкин 14 сентября 2013, 13:33 # 0
                              Плагином будет чуть быстрее — не нужно парсить плейсхолдеры.

                              Ну и вообще, идея эволюционировала в гораздо более гибкое решение.
                              1. Антон Соловьёв 14 сентября 2013, 13:59 # 0
                                В отсутствии тикеттов и ms2 — только ссылка редактировать + настройки стилей и кому показывать? Двадцать минут работы экономит, но и денех отнимает немного.
                                1. Василий Наумкин 14 сентября 2013, 16:10 # 0
                                  Показывать заказчику, ему же наделать разных быстрых кнопок на нужные разделы админки.
                                  1. Антон Соловьёв 14 сентября 2013, 19:46 # 0
                                    Не, я имел ввиду, если авторизован и админ или в группе копирайтер — показывать, если аноним или какая-нить левая группа — не показывать.
                                    Разных быстрых это удалить и редактировать? Что там ещё можно, если нет тиккетов и минишоп2?
                                    1. Василий Наумкин 14 сентября 2013, 20:21 # 0
                                      Любые ссылки можно, любые.

                                      Хоть на Яндекс.
                            2. Сергей 11 июля 2014, 13:21 # 0
                              Подскажите, как исключить страницу из обработки этого плагина
                              if ($modx->resource->id !== '51') { ...} Не помогает…
                              нужно убрать этот плагин из страницы sitemap.xml иначе выдает ошибку
                              «Ошибка синтаксического анализа XML: лишние данные после элемента документа»

                              Спасибо!
                              1. Василий Наумкин 11 июля 2014, 13:22 # 0
                                Есть разница между != и !==.
                                1. Сергей 11 июля 2014, 13:30 # 0
                                  Да, Василий спасибо.
                                  Смотрел смотрел что не так, а это не увидел сразу
                              Добавление новых комментариев отключено.