easyComm 1.1.0 beta - плагины для добавления полей

А тем временем я продолжаю развивать компонент easyComm и выпускаю еще одно большое обновление (пакет отправил в магазин на модерацию).

Что нового?

1. Система плагинов для добавления полей к сообщениям. Если вам мало тех полей, что есть сейчас — теперь их можно добавить через плагины и не боятся, что ваши добавления затрутся при обновлении пакета.
2. Доступна настройка внешнего вида окон редактирования сообщения и цепочки в админке + управление списком колонок для grid-ов.


Подробнее:

Система плагинов


Сейчас для объекта ecMessage доступны следующие поля (это основные поля, не считая вспомогательных):
user_name — автор,
user_email — почта,
user_contacts — контакты,
subject — тема сообщения,
date — дата сообщения,
text — текст
reply_author — автор ответа,
reply_text — текст ответа,
rating — оценка,
ip — IP адрес

Если вам этого мало — теперь можно добавить любое количество своих полей. Механизм был честно подсмотрен у miniShop2 и взят оттуда практически без изменений, что бы вам не пришлось привыкать к чему то новому, а мне тратить уйму времени, что бы сделать то, что уже сделано. Поэтому если вы когда-то добавляли поля к miniShop2 — здесь все тоже самое!

Для добавления своих полей (в примере custom1 и custom2) нужно проделать 7 шагов:

1. Создать папку «myplugin» (можете задать любое имя) в каталогах
/core/components/easycomm/plugins/myplugin/
/assets/components/easycomm/plugins/myplugin/

2. в каталоге /core/components/easycomm/plugins/myplugin/ создать файлы index.php:
<?php
return array(
    'xpdo_meta_map' => array(
        'ecMessage' => require_once dirname(__FILE__) .'/ecmessage.map.inc.php'
    )
    ,'manager' => array(
        'ecMessage' => MODX_ASSETS_URL . 'components/easycomm/plugins/myplugin/ecmessage.js'
    )
);

и ecmessage.map.inc.php:
<?php
return array(
   'fields' => array(
        'custom1' => NULL,
        'custom2' => NULL,
    )             
   ,'fieldMeta' => array(
        'custom1' => array(
            'dbtype' => 'varchar'
            ,'precision' => '50'
            ,'phptype' => 'string'
            ,'null' => true
            ,'default' => NULL
        ),
        'custom2' => array(
            'dbtype' => 'varchar'
            ,'precision' => '50'
            ,'phptype' => 'string'
            ,'null' => true
            ,'default' => NULL
        )
    )
    ,'indexes' => array(

    )
);

3. В каталоге /assets/components/easycomm/plugins/myplugin/ создать файл ecmessage.js:
easyComm.plugin.myplugin = {
      getFields: function(config) {
            return {
                  custom1: {xtype: 'textfield', fieldLabel: _('ec_message_custom1'), anchor: '99%'},
                  custom2: {xtype: 'textfield', fieldLabel: _('ec_message_custom2'), anchor: '99%'},
            }
      }
      ,getColumns: function() {
            return {
                  custom1: {width:50, sortable:true, name: 'custom1'},
                  custom2: {width:50, sortable:true, name: 'custom2'}
            }
      }
};

4. Создать поля в таблице modx_ec_messages.

5. Добавить записи в словари системы ec_message_custom1 и ec_message_custom2 (пространство имен easycomm).

6. В системных настройках message_grid_fields и message_window_layout прописать добавленные поля. Про это ниже.

7. Организовать работу с новыми полями на frontend (добавить в форму и т.д).

Настройка внешнего вида в админке



Появились специальные настройки, отвечающие за отображение списка и окна редактирования сообщений и цепочек:

ec_thread_grid_fields. Поля, которые будут доступны в таблице цепочек. По умолчанию id, resource, name, title, count, rating_simple, rating_wilson. Если у вас на сайте что-то не используется, например рейтинг, вы просто убираете эти поля.

ec_thread_window_fields. Поля, которые доступны при редактировании и создании цепочки из админки. По-умолчанию resource, name, title, rating_simple, rating_wilson

ec_message_grid_fields. Поля, которые доступны в таблице сообщений, по-умолчанию id, thread, subject, date, user_name, user_email, user_contacts, rating, text, reply_author, reply_text, ip

ec_message_window_layout. Разметка окна редактирования сообщения. тут все сложнее. Это не просто список полей, а разметка для окна редактирования. Задается строкой в формате json. Позволяет поместить определенное поле на произвольную вкладку (tab) и разбить часть полей на колонки.

По-умолчанию эта настройка выглядит так:
{  
   "main":{  
      "name":"main",
      "columns":{  
         "column0":[  "user_name", "user_email"],
         "column1":[  "date","user_contacts"]
      },
      "fields":[  "subject", "rating","text", "published" ]
   },
   "reply":{  
      "name":"reply",
      "columns":{  },
      "fields":[   "reply_author", "reply_text", "notify", "notify_date" ]
   },
   "settings":{  
      "name":"settings",
      "columns":{ },
      "fields":[ "thread",  "ip",  "extended"
      ]
   }
}
здесь мы располагаем поля на 3-х вкладках: main, reply, settings, а внутри вкладки main у нас еще есть 2 колонки. Механизм обработки этой настройки весьма примитивен, в принципе большего он и не позволяет =) Но уже и это неплохо и позволяет без проблем настроить расположение полей так, как вам удобно.

Пример:
Здесь я убрал тему, рейтинг, контакты, а на место контактов поместил IP адрес.



Настройка ec_message_window_layout при этом выглядит так:

{  
   "main":{  
      "name":"main",
      "columns":{  
         "column0":[  "user_name","user_email"],
         "column1":[  "date", "ip" ]
      },
      "fields":[  "custom1", "custom2","text","published" ]
   },
   "reply":{  
      "name":"reply",
      "columns":{  },
      "fields":[  "reply_author","reply_text", "notify","notify_date"]
   },
   "settings":{  
      "name":"settings",
      "columns":{  },
      "fields":[   "thread", "extended" ]
   }
}
Наумов Алексей
13 апреля 2015, 12:30
modx.pro
4
1 503
+8

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

Наумов Алексей
13 апреля 2015, 15:34
0
После этого обновления думаю сделать легкий перерыв в добавлении новых функций. Все функции, которые я хотел, я сделал в easyComm, больше не знаю что делать. Буду только баги исправлять. И еще теперь нужно привести в порядок документацию и описание в магазине.
    Wassi Wassinen
    13 апреля 2015, 23:31
    +1
    Скажите, а можно создать несколько рейтингов? Чтобы оценить параметр1, параметр2 и параметр3, а потом вывести среднее по каждому рейтингу?

    Заранее благодарен.
      Наумов Алексей
      14 апреля 2015, 08:29
      0
      Понял вопрос… ну скажем так, что пока что нет такой возможности… подумаю над этим!
        Wassi Wassinen
        14 апреля 2015, 14:34
        0
        Спасибо за ответ! Я почему написал — часто дается не одна общая оценка, а несколько (оперативность, вежливость, цена и т.д.) из которых потом по десятибалльной или пятибалльной системе вычисляется среднее общее.
    yani
    17 апреля 2015, 16:54
    0
    А у меня такой вопрос, на вкладке ОТВЕТ есть поле АВТОР ОТВЕТА, если на сайте сидит ОДИН менеджер и отвечает от имени MANAGER, то, имхо, было бы удобно вынести параметр reply_author как системную настройку.
      Наумов Алексей
      18 апреля 2015, 21:31
      +1
      Я думал, что автор ответа — вообще далеко не всем нужная вещь и добавил скорее «чтобы было». Если он один — думаю проще всего прописать его в чанке вывода сообщения.
        yani
        18 апреля 2015, 22:00
        0
        Блин, а до Чанка я как то не догадалась) тестила просто с готовыми
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      8