Дополнительные поля в комментариях и премодерация

Задача: Организовать анонимные комментарии с премодерацией + 2 дополнительных текстовых поля.

доп поля в шаблоне формы:
<div class="form-group">
			<label for="comment-plus">Достоинства</label>
			<input type="text" name="comment-plus" value="" id="comment-plus" class="form-control" maxlength="200" />
		</div>

		<div class="form-group">
			<label for="comment-minus">Недостатки</label>
			<input type="text" name="comment-minus" value="" id="comment-minus" class="form-control" maxlength="200" />
		</div>
плагин:
<?php
if ($modx->event->name == 'OnBeforeCommentSave') {
	$properties = array(
		'comment-plus' => $modx->stripTags($_POST['comment-plus']),
		'comment-minus' => $modx->stripTags($_POST['comment-minus'])
	);
	$modx->event->params['TicketComment']->set('properties', $properties);
}
Эта схема хорошо работает только для комментариев без премодерации. Если включаешь премодерацию — то информация из доп полей попадает в базу, но в момент публикации стирается.
скрин таблицы в базе: joxi.ru/YmEN6bnuJz1L26

подскажите пожалуйста как исправить ситуацию
Андрей Рябченко
06 декабря 2014, 19:28
modx.pro
7
4 247
0

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

Виталий Киреев
07 декабря 2014, 08:56
+1
Нужно выполнять этот код только, если $_POST['comment-plus'] и $_POST['comment-minus'] существуют.
    Андрей Рябченко
    07 декабря 2014, 12:51
    0
    Огромная вам благодарность.
    не знал, что плагин выполняется при публикации из админки… получается я сам стирал эти поля.
    добавил проверку, теперь работает.
    <?php
    if ($modx->event->name == 'OnBeforeCommentSave') {
        if(!empty($_POST['comment-plus']) OR !empty($_POST['comment-minus'])){
            $properties = array(
                'comment-plus' => $modx->stripTags($_POST['comment-plus']),
                'comment-minus' => $modx->stripTags($_POST['comment-minus'])
            );
            $modx->event->params['TicketComment']->set('properties', $properties);
        };
    }
      Виталий Киреев
      07 декабря 2014, 17:13
      +1
      Еще бы на isset проверить, т.к. так предупреждения генерируются на несуществующие элементы массива. По админке тут: github.com/bezumkin/Tickets/blob/master/assets/components/tickets/js/mgr/comment/comments.grid.js
        Андрей Рябченко
        07 декабря 2014, 18:07
        0
        добавил проверку, спасибо.

        ExtJs темный лес к сожалению.

        добавил строку:
        ,{xtype:'textarea', fieldLabel: _('ticket_comment_properties'), name: 'properties', id:'tickets-'+this.ident+'-properties',anchor: '99%',hidden: config.record.createdby ? 1 : 0}
        под 216 (https://github.com/bezumkin/Tickets/blob/master/assets/components/tickets/js/mgr/comment/comments.grid.js#L216)

        получил в окне поле с Object: joxi.ru/BA0RK8pfPaaYmy

        оно и понятно, там же json строка, которую нужно как-то извлечь… в общем что делать дальше не знаю.
    Андрей Рябченко
    07 декабря 2014, 16:12
    0
    Попутный вопрос: Дополнительные поля в премодерируемых комментариях было-бы логично показывать модератору в админке.
    Подскажите пожалуйста где код отвечающий за вывод формы комментария: joxi.ru/MAjpxg1IxJdLme

    попробую разобраться и добавить туда свои поля.
    или если есть готовый способ — будет супер.
      Вячеслав Варов
      13 декабря 2017, 00:54
      0
      Получилось сделать?
        Михаил
        13 декабря 2017, 05:49
        0
        Спустя три года)))
          Вячеслав Варов
          13 декабря 2017, 10:20
          0
          Вопрос так и остался актуален! И за три года неужели его никто не решил?
            Михаил
            13 декабря 2017, 11:37
            0
            Там надо расширять ExtJs. Готового способа нет. Но Tickets в открытом доступе исходники, поэтому можно делать все
              Вячеслав Варов
              13 декабря 2017, 14:00
              0
              в каком файле это все надо править?
                Руслан
                25 ноября 2022, 22:48
                0
                Решение нашёл. В файле /assets/components/tickets/js/mgr/comment/comment.window.js добавляете дополнительное поле

                , {
                		  xtype: 'displayfield',
                		  fieldLabel: 'Комментарий',
                		  html: config.record.properties['comment-plus'],
                		  anchor: '99%',
                		}
                config.record.properties['comment-plus'] вместо comment-plus любой объект из поля properties в БД.
      Денис Райх
      12 декабря 2014, 02:22
      0
      Здравствуйте! Андрей, подскажите пожалуйста, Вы плагин дописывали отдельным сниппетом и вызывали его в чанке создания комментария?
        Андрей Рябченко
        12 декабря 2014, 11:18
        0
        нет. плагин так и называется «плагин» смотри в дереве «элементов» в админке есть плагины. создаешь новый, пишешь код, потом галочкой отмечаешь событие на которое запускается этот плагин. в данном случае: OnBeforeCommentSave
      Андрей
      27 декабря 2020, 21:23
      0
      Здравствуйте!
      Подскажите, пожалуйста, не смог понять как ни пытался )
      На гитхабе есть файл info c таким содержимым
      /* Плагин с событием на OnBeforeCommentSave
         https://modx.pro/help/4370
         https://bezumkin.ru/sections/522/1540/ */
      
      if ($modx->event->name == 'OnBeforeCommentSave') {
        if(!empty($_POST['my_property_prop'])){
        	$properties = array(
            'my_property' => $modx->stripTags($_POST['my_property_prop'])
          );
        } else {
          $properties = array(
            'my_property' => $modx->stripTags($_POST['my_property'])
          );
        }
        
        $modx->event->params['TicketComment']->set('properties', $properties);
      }
      
      
      /* core/components/tickets/processors/mgr/comment/get.class.php
         Костыль для функции cleanup() */
         
      if (isset($comment['properties'])) {
        foreach($comment['properties'] as $comment_key => $comment_value) {
          $comment[$comment_key."_prop"] = $comment_value;
        }
      }
      
      
      /* assets/components/tickets/js/mgr/comment/comment.window.js
         Добавление нового поля в getFields */
         
      {
        xtype: 'textarea',
        fieldLabel: _('comment'),
        name: 'my_property_prop',
      }
      
      
      /* Вывод в чанке */
      [[+properties.gender]]
      Нигде в кодах не упоминается название поля gender но в выводе в чанк оно есть, не понимаю, как прописывать доп. поля, если у меня их, например два — title и dop ((( Голову сломал
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        15