SugarTalk - ресурс для администраторов и разработчиков системы SugarCRM.

Практическое занятие по доработкам в SugarCRM. Часть 1

Добрый день.
Сегодня мы предлагаем вашему вниманию перевод презентации, которая была показана Джоном Мертиком(один из разработчиков SugarCRM) на SugarCON в прошлом году.

Здесь можно скачать power point презентацию, которую мы и рекомендуем для ознакомления. Для тех у кого нет возможности или желания в данной теме немного более краткий eё web вариант.

Золотые правила доработок

  • Используйте Конструктор модулей/Студию для работы по доработкам, если возможно.
  • В противном случае, поместите код в отдельный каталог custom Custom директория

Зачем это делать?

  • Изменения в Конструкторе модулей / Студии хорошо поддерживаются и ими легко управлять
  • Доработки отделены от поставляемого кода
    (позволяет вам управлять индивидуальными изменениями через систему контроля версий (SVN, Git, etc))
  • Файлы, хранящиеся в конструкторе модулей, не затрагиваются какими-либо обновлениями SugarCRM (Исключением могут являться некоторые  обновления, затрагивающие шаблоны метаданных для новых или удалённых полей .)
  • делает ваше приложение «Апргейд-безопасным»

Противопоказания

  • Новые модули должны быть в каталоге modules
  • Доработки Bean класса в модулях должны проводиться в оригинальном bean файле. (В силу различных причин мы предпочитаем избегать этого подхода, поэтому обращаем ваше внимание на использование логических ловушек (hooks) и других техник. Также будет нужно вручную управлять этими доработками во время обновлений, и это еще один довод, чтобы избегать такого подхода.)

MVC Фреймворк

SugarCRM MVC основывается на Модели, Виде и Контроллере


MVC Фреймворк – SugarApplication

  • Управление загрузкой приложения;
  • Загрузка многих параметров приложения по умолчанию: язык , тема, сессия;
  • Обработка аутентификации пользователя;
  • Загрузка контроллера.

MVC Фреймворк — SugarController

  • Обрабатывает все операции с модулем
  • Содержит логику для обработки запросов, которые не требуют вида (Пример, сохранение записи)
  • Обеспечивает правильное представление всех запросов
  • может определять, должна ли использоваться MVC или классическая модель

MVC Фреймворк – SugarController API

  • ??public function pre_action () -Вызывается перед действием action

  • public function action_action () -Вызывается для действия action

  • public function post_action () -Вызывается после действия action

  • public function loadBean () -Загружает bean и запись для модуля

  • public function preProcess () -Используется для вставки некоторой логики в контроллер перед обработкой контроллера

MVC Фреймворк – Пример контроллера

01
02
03
04
05
06
07
08
09
10
11
12
13
<?php
 
class ExampleController extends SugarController
{
    public function action_hello()
    {
        echo "Hello World!";
    }
    public function action_goodbye()
    {
        $this->view = 'goodbye';
    }
}

MVC фреймворк– Бесконтроллерное отображение

  • Если ваш модуль не использует какую-либо логику контроллера, используйте вместо него действия;
  • Создайте файл под названием action_view_map.php со следующим содержимым
1
2
<?php
$action_view_map['goodbye'] = 'goodbye';

MVC Фреймворк — SugarView

Содержит логику вида для действий.

  • Использует бэк-енд метаданных для отображений Edit, Detail, List, Popup (и Convert появится в Sugar 6.0)
  • Для остальных отображений, вы можете написать код для отображения и поместить его в modules/modulename/views/view.viewname.php

MVC фреймворк – SugarView API

  • public function preDisplay () — Вызывается до вывода чего-либо из отображения
  • public function display () — Вызывается для показа отображения
  • protected function _getModuleTab () — Возвращает имя  модуля, вкладка которого выделена. (только начиная с Sugar 6.0)
  • protected function _getModuleTitleParams () — Возвращает навигационный трек , показываемый в верхней части отображения. (только начиная с Sugar 6.0)

MVC Framework – SugarView API

  • public $ss — Объект Smarty
  • public $module — Имя модуля
  • public $action — Имя действия
  • public $errors — Массив ошибок, возвращаемых отображением или контроллером
  • public $options — Опции для отображения, определяемые массивом:
    Варианты выбора: show_header, show_title, show_subpanels, show_search, show_footer, show_javascript

MVC Фреймворк – Пример вида

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<?php
 
class ViewExample extends SugarView
{
    public function preDisplay()
    {
        if ( !is_admin($GLOBALS["current_user"]) )
         sugar_die("Not an Admin");
    }
    public function display()
    {
        echo "Hello Admin!";
    }
}

Куда я должен поместить свои индивидуальные разработки?

  • Контроллеры (Класс CustomModuleNameController extends SugarController)
  • Вид (/custom/modules/Modulename/views/view.viewname.php)
  • Класс (CustomModuleNameView Viewname extends ModulenameViewViewname. Если класс не существует, наследуется от ViewViewname или SugarView.)

Виды метаданных

  • Editviewdefs.php — редактирование записи
  • detaiviewdefs.php — просмотр записи
  • quickcreatedefs.php — создание записи в субпанели
  • Subpaneldefs.php — субпанели
  • Listviewdefs.php — список записей
  • Searchdefs.php — форма поиска
  • SearchFields.php — поля и алгоритмы для поиска

editviewdefs.php

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$viewdefs[$module_name]['EditView'] = array(
    'templateMeta' => array(
        'maxColumns' => '2',
        'widths' => array(
            array('label' => '10', 'field' => '30'),
            array('label' => '10', 'field' => '30'),
            ),
        ),
    'panels' =>array (
        'default' =>
            array (
                array (
                  'name',
                  'assigned_user_name',
                ),
                array(array (
                  'name' => 'date_modified',
                  'customCode' => '{$fields.date_modified.value} {$APP.LBL_BY} {$fields.modified_by_name.value}',
                  'label' => 'LBL_DATE_MODIFIED',
                )),
            ),
            array(
                array (
                    'description',
                ),
            ),
        ),
);

subpaneldefs.php

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$layout_defs[$module_name] = array(
     'subpanel_setup' => array(
    'contacts' => array(
        'order' => 20,
        'module' => 'Contacts',
        'sort_by' => 'last_name, first_name',
        'sort_order' => 'asc',
        'subpanel_name' => 'default',
        'get_subpanel_data' => 'contacts',
        'title_key' => 'LBL_CONTACTS_SUBPANEL_TITLE',
        'top_buttons' => array(
            array('widget_class' => 'SubPanelTopButtonQuickCreate'),
            array(
                'widget_class'=>'SubPanelTopSelectButton',
                'mode'=>'MultiSelect’
            ),
        ),
    ),
    ),
);

Куда я должен поместить свои индивидуальные разработки?

  • Subpaneldefs

В директорию custom/Extension/modules/Modulename/Ext/Layoutdefs/NameWhateverYouWant.php
После нужно запустить «Быстрое восстановление», после того как были сделаны изменения.

  • Что-либо другое

В директорию /custom/modules/Modulename/metadata

Продолжение статьи здесь.

Высказать своё мнение о статье Вы можете в комментариях. Если Вас интересуют какие либо вопросы или дополнения, то обсуждение по данной теме доступно на нашем форуме.

Последнее изменениеПонедельник, 10 июля 2017 18:12
  • Оцените материал
    (0 голосов)
  • Опубликовано в SugarCRM
  • Прочитано 30331 раз

9502 комментарии

Оставить комментарий

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены

Наверх

Последние новости

  • 1
  • 2
  • 3
  • 4

Популярные новости

  • 1
  • 2
  • 3
  • 4