Реализация раздела "Вопрос - ответ"

День добрый.
Необходимо на сайте реализовать функционал «Вопрос — ответ». Для этого выбрал компонент «Tickets».
что-то типа того — www.moihottur.ru/faq/

читал вот эту тему modx.pro/help/2793/ похожие проблемы.

Необходимо чтобы кнопка «ответить» была только у администратора сайта.

если вызвать так
[[!TicketComments? 
    &allowGuest=`1`
    &autoPublishGuest=`0`
    &autoPublish=`0`
]]
то чанк tpl.Tickets.comment.one.guest игнорируется

а если так:
[[!TicketComments? 
    &allowGuest=`0`
    &autoPublishGuest=`0`
    &autoPublish=`0`
]]
то отзывы не могут писать неавторизованные пользователи.

Как быть в этой ситуации?
Какая возможна реализация без костылей как предлагал автор в теме modx.pro/help/2793/

Глеб
19 апреля 2017, 11:38
modx.pro
3
3 336
+1

Комментарии: 32

Олег
19 апреля 2017, 16:33
+4
Я сделал такой компонент, но его нет в магазине.
Могу поделиться, если понравится.
Ответ осуществляется из админки.
Вот ссылка (пример работы): yaguar-m.ru/vopros-i-otvet
Вот так редактируется в админке:
joxi.ru/p27Wz9DHovRa72
    Stan Ezersky
    19 апреля 2017, 20:29
    0
    Может в магазин выложите?
      Олег
      19 апреля 2017, 20:53
      +1
      Я бы с радостью, но, как оказалось, для этого нужно времени потратить больше, чем сам компонент писать (у меня он простой, как калаш). Выложу, как будет время и силы.

      Если кому интересно — можете попробовать 1drv.ms/u/s!Aryb646WHtY9uFCHYVe5fHDpSnkC
      Буду рад отзывам и предложениям, но если компонент сильно усложнять — получим еще один tickets :)

      Запланирован сейчас для простейшего функционала — реализации страницы «вопрос-ответ» на сайте. Для добавления новых вопросов используется formit + ajaxform.
      На всякий случай перед установкой лучше сделать бэкап — я проверял только на своих сайтах, там все работало как часы.

        Алексей
        20 апреля 2017, 10:13
        0
        Олег, добрый день!
        Подскажите пожалуйста вызов на странице, если не сложно? Спасибо.
          Олег
          20 апреля 2017, 10:19
          0
          Здравствуйте!
          Есть примеры в описании компонента.
          Вывод без пагинации:

          [[!FAQ_get_questions?
          &limit=`100`
          ]]

          Вывод с pdoPage
          [[!pdoPage?
          &element=`FAQ_get_questions`
          &limit=`4`
          &ajaxMode=`default`
          &sortdir=`DESC`
          &sortby=`id`
          ]]

          [[!+page.nav]]


          Также можно использовать pdoResources, если мне не изменяет память вот так:
          [[pdoResources?
          &class=«FAQItem»]]
            Алексей
            20 апреля 2017, 10:36
            0
            Спасибо огромное! Описание нашел. Только ставлю:
            &tpl=`tpl.FAQ.outer`
            и пишет ошибку.

            А все допер:)). Он по умолчанию! Еще раз спасибо!!!
              Олег
              20 апреля 2017, 12:06
              0
              Что за ошибка? Не должно ее быть.
                Алексей
                20 апреля 2017, 12:13
                0
                Там шаблон выставлен по умолчанию, а я его еще раз в pdoPage вызывал. В общем все работает! Компонент действительно простой, спасибо огромное. Сейчас вызываю вот так:
                <div id="pdopage">
                    <div class="rows">
                        [[!pdoPage?
                            &element=`FAQ_get_questions`
                            &limit=`3`
                            &ajaxMode=`default`
                            &sortdir=`DESC`
                            &sortby=`id`
                        ]]
                    </div>
                    [[!+page.nav]]
                </div>
                [[!AjaxForm?
                    &snippet=`FormIt`
                    &emailFrom=`[[++emailsender]]`
                    &emailFromName=`Мой сайт`
                    &emailTo=`myemail@site.com`
                    &hooks=`FAQ_add_question,email,FormItSaveForm`
                    &formName=`FAQ - новый вопрос`
                    &emailSubject=`Новый вопрос на моем сайте!`
                    &emailTpl=`tpl.FAQ.email`
                    &form=`tpl.FAQ.form`
                    &validate=`question:required, email:required`
                ]]
                Вот только пагинация чет не работает, но думаю разберусь.
                А вот так на сайте:
                Скрин
                  Олег
                  20 апреля 2017, 12:36
                  0
                  Попробуйте сделать вот такой вызов:

                  [[!pdoPage?
                              &element=`pdoResources`
                              &class=`FAQItem`
                              &limit=`3`
                              &ajaxMode=`default`
                              &sortdir=`DESC`
                              &sortby=`id`
                          ]]
                  Вообще пагинация должна работать, у меня с ней проблем не было.
                    Алексей
                    20 апреля 2017, 12:58
                    0
                    А так вообще все пропадает. У меня сборка siteExtra. Убрал галку «Показывать дочерние ресурсы» и заработала пагинация по старому моему вызову. Все как надо!
                    Скрин

                    Еще раз спасибо!
                      Олег
                      20 апреля 2017, 13:37
                      0
                      Не знал, что это так сказывается. Надо будет посмотреть, благодарю.

                      Всегда пожалуйста :)
        Роман
        20 сентября 2018, 07:50
        0
        Добрый день!

        А можно маленькую дороботку сделать, что бы была возможно перетаскивать ответы в админке? т.е. менять их порядок?
          Андрей
          06 апреля 2019, 13:29
          0
          Спасибо за модуль, подскажите куда вставить форму для отправки Вопроса?
            Сергей
            23 апреля 2019, 13:27
            0
            Автор Вы гений! Могу помочь допилить компонент! По сути там осталось внешний вид сделать нормальный. Он обязательно должен быть в репозитории!
              Олег
              23 апреля 2019, 13:50
              0
              Я больше не создаю сайты на modx, можно на основе моего кода делать что угодно.
                Сергей
                23 апреля 2019, 16:21
                0
                Ясно. Компонент оказался неподходящим для меня т.к он делает общий список вопрос-ответов и выводит на всех страницах все подряд. Мне же нужен свой список вопрос ответов для каждой страницы индивидуально.
                  Олег
                  23 апреля 2019, 16:24
                  0
                  Это можно легко поправить, добавив новое Поле в таблицу, фильтровать записи по этому полю.
                    Сергей
                    25 апреля 2019, 14:41
                    0
                    Если я вам заплачу вы можете поправить?
        Глеб
        19 апреля 2017, 19:10
        0
        Могу поделиться, если понравится.
        было бы чудесно, моя почта hellhands@yandex.ru
          Наумов Алексей
          19 апреля 2017, 20:23
          +6
          Ну а что бы свое дополнение не прорекламировать:)
          modstore.pro/packages/utilities/easycomm
            Aleksey
            08 мая 2018, 16:19
            0
            Доброго дня, уточните пожалуйста, как можно сделать, чтобы появлялось сообщение об успешной отправки. Ну чтобы было понятно, что вопрос был отправлен.
              Алексей
              28 мая 2018, 18:45
              0
              Добрый день, вы оставили заявку, modx.pro/work/15531/ но в чём соль как с вами связаться? данных в заявке нет ваших, комментировать этот раздал нельзя, в Вашем профиле стоит запрет на отправку сообщений, напишите мне в скайп, мой логин она же почта likelid@yandex.ru
              Kirill
              04 марта 2020, 11:50
              0
              Добрый день,
              возникла потребность в данном дополнении, но возникла проблема.
              При добавлении вопроса в базу через админку и в поле вопрос и в поле ответ пишет 0. Если руками поправить в базе, то отражает нормально, но если в админке отредактировать запись, то и в вопрос и в ответ опять пишутся 0.
              modx 2.7.2.
              Может кто подскажет, что где поправить?
                Наумов Алексей
                04 марта 2020, 11:57
                0
                Прям штатная установка и ничего не меняли?
                Версия компонента свежая?
                  Kirill
                  04 марта 2020, 12:19
                  0
                  абсолютно чистая установка… вообще ничего нету…
                  я про компонент FAQ из сообщения Олега, вот отсюда
                  1drv.ms/u/s!Aryb646WHtY9uFCHYVe5fHDpSnkC
                    Kirill
                    04 марта 2020, 12:42
                    0
                    вот так получается





                      Александр
                      04 марта 2020, 23:49
                      +1
                      Известная проблема :-)
                      В файле faq.mysql.schema.xml
                      <field key="question" dbtype="text" length="1023" phptype="text" null="false" default=""/>
                      phptype=«text» нет такого. Когда-то работало, а сейчас надо phptype=«string». Замените phptype=«text» на phptype=«string» везде в схеме и перегенируйте классы XPDO. Я с помощью migx это делаю. Создание таблиц через MIGX
                        Kirill
                        05 марта 2020, 08:15
                        0
                        спасибо. поправил в 3 файлах

                        components/faq/model/faq/mysql/faqitem.map.inc.php
                        components/faq/model/bd_faq/mysql/bd_faqitem.map.inc.php
                        components/faq/model/schema/faq.mysql.schema.xml

                        тип на string и все заработало
                          R2m0x94 (Vasily)
                          02 мая 2022, 12:44
                          0
                          А как в Ответ «answer» к полю в окне редактирования включить редактор Ace?

                          // assets/components/faq/js/mgr/widgets/items.windows.js
                          Ext.onReady(function(){
                          	if(MODx.ux.Ace.replaceTextAreas) {
                          		MODx.ux.Ace.replaceTextAreas(Ext.query('[name="answer"]'));
                          	}
                          });
                          добавляю Ext, но почему-то не получилось
                  R2m0x94 (Vasily)
                  02 мая 2022, 12:54
                  0
                  По сути на обновление надо повесить ace, и на создание, вопрос как?
                  FAQ.window.UpdateItem = function (config) {
                      config = config || {};
                      if (!config.id) {
                          config.id = 'faq-item-window-update';
                      }
                      Ext.applyIf(config, {
                          title: _('faq_item_update'),
                          width: 550,
                          autoHeight: true,
                          url: FAQ.config.connector_url,
                          action: 'mgr/item/update',
                          fields: this.getFields(config),
                          keys: [{
                              key: Ext.EventObject.ENTER, shift: true, fn: function () {
                                  this.submit()
                              }, scope: this
                          }]
                      });
                      MODx.ux.Ace.replaceTextAreas(Ext.query('[name="answer"]')); // вроде правильно, но не работает
                      FAQ.window.UpdateItem.superclass.constructor.call(this, config);
                  };
                    R2m0x94 (Vasily)
                    03 мая 2022, 00:10
                    0
                    в FAQ_get_questions добавьте idx для удобства в отображении корректных нумераций
                    // строка ~37
                    $idx = 0;
                    foreach ($items as $item) {
                        $idx += 1;
                        $list[] = $modx->getChunk($tpl, array_merge($item->toArray(), ['idx' => $idx]));
                    }
                    В чанке просто [[+idx]] или {$idx}
                      R2m0x94 (Vasily)
                      10 мая 2022, 03:18
                      0
                      А если с pdoPage, то $idx не пашет, как вариант просто отключить удаление, чтоб id не сбивался.
                      Возможно в ext.как-то заменить record.id и будет от последнего из бд, а не из record.id x2
                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                      32