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

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

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

Виталий Киреев
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
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    13