Обновлено: 27 марта 2017, 15:40
 Marabar

Создание ресурсов из фронтенда и публикация в выбранный раздел.

Есть много способов как создавать новые ресурсы в MODX revolution из фронтенда, в этом топике будет приведён пример, или рассмотрен способ, как такое реализовать при помощи сниппета NewsPublisher. Даже, хотелось бы рассмотреть не саму реализацию этого применения, т.к. очень подробный мануал можно найти на сайте автора, а публикацию вновь созданного документа в определённый контейнер — блог. Собственно, топик об этом.
Что нам понадобится: сам сниппет NewsPublisher — качаем через репозиторий и сниппет Wayfinder. Предположим, что на сайте есть раздел — Блоги, который, в свою очередь, содержит все категории блогов сайта. И естественно, в эти категории должны попадать вновь созданные документы. А попадать они должны каждый в свою категорию — блог. И всё это из фронтенда. Витиевато...)) Вообщем, нам нужен выпадающий список с выбором конкретного блога.
По умолчанию NewsPublisher размещает созданные ресурсы в себя. Можно, конечно, в параметрах указать ID ресурса, куда публиковать, но это тоже узко и придётся посещать админку для правки… Что-то длинно — пора к практике. Создадим ресурс, где поместим вызов сниппета NewsPublisher — add. Пускай код будет таким:
[[!NewsPublisher? 
    &show=`pagetitle,parent,longtitle,description,introtext,content,pub_date,published`
    &initrte=`1`
    &rtcontent=`1`
    &inttpl=`userIntTpl`
    &required=`pagetitle,content,parent,description`
]]
  • &show — содержит все поля, которые будут доступны для редактирования.
  • &initrte=`1` — разрешаем редактор, по умолчанию TinyMCE
  • &rtcontent — указываем где будет редактор — content
  • &inttpl — нам понадобиться пользовательский чанк
  • &required — обязательные поля к заполнению
В этом коде нам будет интересен parent в параметре &show, как раз он и отвечает за родительский ресурс и чанк userIntTpl. Уже сейчас, созданный ресурс после сохранения, будет помещён в контейнер с ID, указанный нами в поле parent. Но мы помним про список.
Поле parent использует чанк intTpl, вот его мы и переименуем и немножко отредактируем.
<div id="np-[[+npx.fieldName]]-container" class="np-integer">
    [[+np.error_[[+npx.fieldName]]]]
    <label class="fieldlabel intfield" for="np-[[+npx.fieldName]]" title="Нужно выбрать родительский ресурс">Выберите, в какой блог публиковать: </label>
    [[Wayfinder? 
        &startId=`17` 
        &level=`1` 
        &ignoreHidden=`1` 
        &outerTpl=`userOuterTpl` 
        &rowTpl=`userRowTpl`
     ]]
</div>
Как видно, сюда помещаем вызов сниппета Wayfinder — кэшируемый.
  • &startId — стартуем отсюда. Указываем ID родительского ресурса, который содержит все блоги
  • &level — глубина
  • &ignoreHidden — показываем и те, которые исключены из меню
  • &outerTpl — чанк с внешним контейнером
  • &rowTpl — чанк с элементами списка
Wayfinder использует, по умолчанию, маркированный список — нужен выпадающий. Создадим чанк userOuterTpl и поместим в него следующее:
<select name="[[+npx.fieldName]]" [[+npx.readonly]]>
    <option></option> <!-- нам нужно будет пустое поле -->
    [[+wf.wrapper]]
</select>
Ну и чанк userRowTpl с элементами списка:
<option value="[[+id]]">[[+wf.linktext]]</option>
Всё просто, в value="" — указываем ID ресурса, +wf.linktext — заголовок (pagetitle).
Собственно и всё!!!
Что получилось — видео.

   Marabar Инструкции 0    5 +1

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

  1. snov 01 декабря 2013, 22:09 # 0
    Админ, с админкой и созданием статей стало все более менее ясно.Интересует вывод статей/новостей/ресурсов только от пользователей состоящих в опр. группах. Ну и или наоборот вывод всех статей за искл. тех, которые созданы пользователями, состоящими в скажем Группе 2.Стоит ждать статей на эту тему? Очень животрепещущая в данный момент
    1. Marabar 02 декабря 2013, 14:32 # 0

      Может и стоит, я не веду уроки, если навеет и будет интересно — пишу.

    2. snov 07 декабря 2013, 23:32 # 0
      Марат, в процессе разборов NewsPublisher возникла проблема — для пользователей недостпуно добавление/изменение.Ну т.е. вызывая страничку добавляния (Add в твоем примере) все элементы видны, но на месте NewsPublisher'а появляется ошибка: У Вас нету прав на создание документов. При этом на созданных страницах NpEditThisButton просто не появляется.Сам ресурс создан админом (заходя под админом на этот ресурс все нормально), но если зайти каким-либо другим пользователем, то появляется ошибка. Понимаю, что где-то могут быть проблемы с правами, но найти никак не могу — вроде уже все доступы дал группе пользователей у которых это происходит… Даже изменил поля createdby, editedby и publishedby на одного из пользователей группы которая не видит форму. Результат — нулевой.Не сталкивались с подобным? 2й день голову ломаю…
      1. Marabar 08 декабря 2013, 00:07 # 0

        Всё верно, нужно добавить права NewsPublisherEditor.

        Для этого, Безопасность/Контроль доступа. Далее открываем таб Доступ к контекстам и жмём Добавить контекст — указываем контекст, роль и в разделе политика доступа выбираем из списка NewsPublisherEditor. Должно всё получиться. О результатах отпишитесь.

        1. snov 08 декабря 2013, 10:12 # 0
          Марат, Спасибо. Это действительно помогло. Теперь пользователи пользователи могут успешно добавлять ресурсы.Однако с редактированием все равно беда — кнопка «Редактировать» успешно отображается, но при нажатии обычный пользователь видит ошибку: У Вас нету прав чтобы редактировать ресурс содержащий modx tags.. У пользователей с права администратора таких проблем нет. Скорее всего что-то опять с настройками безопасности.
          1. Marabar 08 декабря 2013, 11:40 # 0
            Для того чтобы пользователи могли редактировать ресурсы необходимо включить allow_modx_tags.

            Безопасность/Контроль доступа, перейти в таб — Политики доступа. В списке есть NewsPublisherEditor.

            Может целесообразней было бы создать копию NewsPublisherEditor, переименовать и там отметить чекбокс allow_modx_tags, т.к при обновлении всё сбросится.

            1. snov 08 декабря 2013, 12:10 # 0
              Марат, ну огромное спасибо. Забавно, что в списке NewsPublisherEditor я видел allow_modx_tags. Вот и подумал, что она активирована — на чекбокс, почему-то не хватило ума посмотреть))Огромное спасибо еще раз.
              1. Marabar 08 декабря 2013, 12:49 # 0
                Пожалуйста))
                1. Marabar 08 декабря 2013, 12:52 # 0
                  По умолчанию, только для SuperUser.
        2. snov 08 декабря 2013, 14:48 # 0
          Марат, полюбопытствую еще один вопросу, у Вас, как у эксперта по NewsPublisher: можно в нем как-то использовать упрощенный вариант загрузки картинок, как у Вас в загрузке аватара, а не стандартный лоадер MODx с видимостью уже загруженных картинок. Ввиду того, что подразумевает, что пользователей будет несколько не хотелось бы показывать, что было загружено другими пользователями. Да и опять же получается придется давать права на контект mgr
          1. Marabar 08 декабря 2013, 15:12 # 0
            NewsPublisher даёт возможность создавать ресурсы из фронтенда. Про отдельные папки под каждого юзера — где-то в другом месте нужно ковырять, а лучше всего написать сниппет. Мне так кажется. Я думал об этом, но к реализации ещё не подходил.

            А вообще, мне не нравиться во фронтенде редактор с таким количеством кнопок (возможностей). Думаю, лучше подгружать, для пользователя, упрощённую версию TyneMCE или markitup и из этого исходить.

          2. Irina Soloveva 07 декабря 2014, 21:33 # 0
            Здравствуйте!

            Мне понравился Ваш метод добавления новых ресурсов на сайт, но с ним возникли проблемы, которые я никак не могу разрешить. Не подскажете ли, в чем может быть проблема?

            В поле выбора родительского ресурса появляется только одна категория. При нажатии на выпадающий список дочерние категории не появляются, т.е. в выпадающем списке всегда только 1 категория: родительская, указанная в чанке intTpl
            1. Marabar 08 декабря 2014, 01:07 # 0
              Здравствуйте!
              Проверяйте поле hidemenu. И должны быть созданы правильные права на публикацию.
              1. Irina Soloveva 09 декабря 2014, 02:08 # 0
                я нашла причину.
                У меня почему-то шаблон вывода категорий не такой: &inttpl=`userIntTpl`, а &listoutertpl=`userIntTpl`
            2. jep 16 февраля 2015, 15:05 # 0
              Приветствую, Марат.
              Спасибо большое за материал и активные ответы в комментах.
              столкнулся с двумя проблемами, а именно:
              1. Реализовывая все по инструкции получаю проблему с правами, т.е. при авторизации пользователя из группы USERS «Извините... В форме были допущены ошибки: У Вас нету прав на создание документов.» но при авторизации как админ все работает. Пробовал давать права группе USERS на NewsPublisherEditor, не помогло.
              2. под админом я столкнулся с проблемой списка куда публиковать. Он показывает лишь родительский документ, пробовал сделать список вне формы, список работает корректно.
              Ломаю голову уже дня 4… Прошу помощи в поиске проблемы.
              1. Marabar 16 февраля 2015, 15:34 # 0
                1. Почистить кеш. Перезагрузить права доступа. Использовать другой браузер юзером, если авторизован в админке.

                А лучше всего рекомендовал бы использовать Tickets для этих целей. Он сейчас на несколько порядков выше, чем NewsPublisher. И в плане безопасности, и в плане удобства.

                У меня на сайте, сейчас, всё реализовано через Tickets.
                1. jep 16 февраля 2015, 17:03 # 0
                  Спасибо на наводку! с Tickets значительно удобней реализовать мою задумку!
              2. Роман Лазарев 30 июля 2015, 18:50 # 0
                Как получить ссылку на редактируемую страницу!? К примеру хочу, отредактировать страницу с ID 15 — !?
                1. Marabar 31 июля 2015, 09:02 # 0
                  Что-то типа этого там.
                  [[!NpEditThisButton? &np_edit_id=`[[+id]]`]]
                  
                  Ну и конечно, нужно добавлять проверку на автора, типа:
                  [[+createdby:is=`[[!+modx.user.id]]`:then=`[[!NpEditThisButton? &np_edit_id=`[[+id]]`:else=``]]
                  
                  А лучше использовать Tickets.
                  1. Роман Лазарев 31 июля 2015, 10:02 # 0
                    У Тикета есть свои ограничения, в связи чем он не подходит! Через NewsPublisher я так понимаю можно вывести все стандартные поля из админки во фронтенд!?
                    1. Marabar 31 июля 2015, 10:31 # 0
                      Статья писалась давно, что я уже и не помню. Скорее можно, да. Так же как и у Тикета.
                      1. Роман Лазарев 31 июля 2015, 10:34 # 0
                        О нет! С Тикетом такое не проканает, там все жестко привязано, кто Василий сделал то и есть — ну или самому дописывать. Сейчас из коробки сделать не чего нельзя, в смысле более чем задумано автором!

                        У меня зада сделать для себя, кроме меня ни кто на сайт не чего добавлять не будет!
                        1. Marabar 31 июля 2015, 10:39 # 0
                          Ты ошибаешься — можно в форму добавлять всё, вплоть до тегов.
                          В общем — любые стандартные и дополнительные поля ресурса можно изменять из фронтенда.
                          1. Роман Лазарев 31 июля 2015, 10:42 # 0
                            Хорошо! Покажи код, как вывести в форму фронтенда стандартный чекбокс «Удалён»!?
                            1. Marabar 31 июля 2015, 10:51 # 0
                              Элементарно, как и другие поля
                              <form action="" method="post">
                              .....
                              <input type="checkbox" name="deleted" />
                              ....
                              </form>
                              
                              1. Роман Лазарев 31 июля 2015, 10:55 # 0
                                Ахахах… я тоже могу написать HTML и даже CSS! Хорошо, давай перефразирую вопрос!

                                Как вывести в форму редактирования Тикета стандартный черкбокс «Удалён», что бы он отрабатывал, т.е. был рабочий. Что бы когда редактируешь Тикет, поставил галочку и этот тикет удалился!? Приведи мне рабочий пример/код как это реализовать!?
                                1. Marabar 31 июля 2015, 11:07 # 0
                                  Вверху рабочий пример. При редактировании выглядит, примерно так

                                  1. Роман Лазарев 31 июля 2015, 11:14 # 0
                                    Я тоже могу картинку показать! Вот, я вывел!


                                    Проблема шире, только что попробовал и вот так прописать этот чекбокс, и как ты выше указал
                                    <div class="ticket-sections-del">Удалить</div>
                                    	        <input type="checkbox" autocomplete="off" name="deleted" class="input-group-select-checkbox" id="ticket-deleted" value="[[+deleted]]"/>
                                    	    </div>
                                    
                                    Вопрос в чем? Вывести я могу, но работает ли он у тебя или нет!?
                                    1. Marabar 31 июля 2015, 11:50 # 0
                                      Хм, точно не работает)) Что-то с политикой безопасности. Вернее, там этого вообще нет. Только снятие с публикации. Только так или свой сниппет написать.
                                      1. Роман Лазарев 31 июля 2015, 12:08 # 0
                                        Вооот! Марат, я тебе про это с самого начала говорю, что:

                                        — в Тикете, что предусмотрено Василием (функционал), то и есть — это из коробки, а если что то большее, то нужно самому писать и т.д.

                                        Я Тикет уже в доль и поперек перепробовал! Как освободится время, возьмусь за «NewsPublisher» буду тестировать.

                                        У меня только один вопрос про «NewsPublisher» — создавая «публикацию» из фронтенда, он создает «простой документ» или в типе как у Тикета свои ресурсы!?
                                        1. Marabar 31 июля 2015, 12:20 # +1
                                          У тикета прописывается свой класс — Ticket
                                          NewsPublisher работает, на сколько я помню, со стандартным MODX-ским — modDocument
                                          1. Роман Лазарев 31 июля 2015, 12:22 # 0
                                            ок, спасибо! Думаю дискуссию по этому поводу на этом можно закончить!
                                  2. Роман Лазарев 03 сентября 2015, 16:28 # 0
                                    Добрый день!

                                    Марат, посмотрите пожалуйста! В приведем примере где то закралась ошибка. Поставил чистый MODx, NewsPublisher и Wayfinder — все сделано по инструкции, но вот прям в никакую не хочет видеть &outerTpl=`userOuterTpl` — в списке видит только себя!

                                    Буду очень благодарен!

                                    1. Marabar 04 сентября 2015, 18:35 # 0
                                      Не подскажу, к сожалению. Статья писалась давно, банально — я не помню.
                                      Используй Tickets — он безопасней будет.
                                      1. Роман Лазарев 04 сентября 2015, 18:37 # 0
                                        Тикет не подходит по некоторым критериям!

                                        Другой вопрос, вывод parent твоя наработка или подсмотрел где?
                                        1. Marabar 04 сентября 2015, 18:44 # 0
                                          Моя конечно.
                                          1. Роман Лазарев 04 сентября 2015, 18:48 # 0
                                            Понятно, спасибо! Если дам доступ к чистой MODx где будет стоять NewsPublisher и Wayfinder = сможешь посмотреть? Делов на 5ть минут вроде как? Потом статью можно будет подправить!? Если в скайп постучу, что скажешь?
                                            1. Marabar 04 сентября 2015, 19:26 # 0
                                              Я на турбазе, в скайпе буду с понедельник. Я тебе на мыло скину доступ на один сайт — там всё работает, только что проверил. Вспомнил про него))
                                    2. Антон Попов 08 февраля 2016, 17:25 # 0
                                      Добрый день. Спасибо за статью.
                                      Хотел бы задать два вопроса:
                                      1 Какая переменная отвечает за формат вывода информации?(
                                      т.е. мне необходимо, чтобы пост выводился в определённом стиле(изображение и текст).)
                                      2 Новые посты у меня создаются, используя шаблон по умолчанию, а мне необходим определённый шаблон!
                                      Возможно-ли это сделать!?
                                      Заранее спасибо!
                                      1. Семён 05 мая 2017, 20:27 # 0
                                        Вопрос про NewsPublisherEditor
                                        «Для этого, Безопасность/Контроль доступа. Далее открываем таб Доступ к контекстам и жмём Добавить контекст — указываем контекст, роль и в разделе политика доступа выбираем из списка NewsPublisherEditor. Должно всё получиться. О результатах отпишитесь.»
                                        У меня в списке отсутствует NewsPublisherEditor, это как-то можно исправить или вручную прописать в бд?
                                        1. Семён 05 мая 2017, 23:30 # 0
                                          Разобрался.
                                          В общем мне не нравится использовать тикет для публикации в фронтенде.
                                          Мало ли кому понадобтися в общем в новых версиях NewsPublisherEditor вроде особой роли не играет вообще не нашёл где его можно прописать и можно ли…
                                          Чтобы работала посл. версия 2017 года, по мне это удобнее чем тикетс, нужно грамотно настроить политики Пользователей для этого нужно обязательно оставить галочки на:
                                          Сохранять ресурсы, Создавать ресурсы.



                                        Вы должны авторизоваться , чтобы оставлять комментарии.

                                        Marabar 21 сентября 2018, 00:32
                                        Login в MODX revolution 25
                                        Marabar 17 мая 2018, 12:22
                                        Выводим облако тегов в MODX revo 17
                                        medortex 14 июля 2017, 16:26
                                        Меню Аккордеон в MODX revo 54
                                        Madao 16 мая 2017, 18:28
                                        msMiniCartDynamic 3
                                        Семён 05 мая 2017, 23:30
                                        Создание ресурсов из фронтенда 41
                                        Филитович Владимир 26 февраля 2017, 22:25
                                        Apache 2.2.22, установка и настройка 41
                                        valery 30 ноября 2016, 15:51
                                        phpMyAdmin 3.5.1, установка и настройка 3