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

Задача: Организовать анонимные комментарии с премодерацией + 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
3 748
0

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

Виталий Киреев
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

    попробую разобраться и добавить туда свои поля.
    или если есть готовый способ — будет супер.
    Денис Райх
    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 ((( Голову сломал
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      14