Практическое занятие по доработкам в 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 Фреймворк – Пример контроллера

<?php

class ExampleController extends SugarController
{
    public function action_hello()
    {
        echo "Hello World!";
    }
    public function action_goodbye()
    {
        $this->view = 'goodbye';
    }
}

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

  • Если ваш модуль не использует какую-либо логику контроллера, используйте вместо него действия;
  • Создайте файл под названием action_view_map.php со следующим содержимым
<?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 Фреймворк – Пример вида

<?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

<?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

<?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

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

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

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

  1. dmitrysorokin:

    Подскажите, изменяю файл ответственный за формирование списка сабпанелей modules\Users\metadata\subpanels\ForCalls.php, для того чтобы не потерялись изменения при обновлении куда в директории custom необходимое его сохранить?

Написать комментарий

Вы должны войти чтобы комментировать.