Добрый день.
Сегодня мы предлагаем вашему вниманию перевод презентации, которая была показана Джоном Мертиком(один из разработчиков SugarCRM) на SugarCON в прошлом году.
Здесь можно скачать power point презентацию, которую мы и рекомендуем для ознакомления. Для тех у кого нет возможности или желания в данной теме немного более краткий eё web вариант.
Золотые правила доработок
- Используйте Конструктор модулей/Студию для работы по доработкам, если возможно.
Зачем это делать?
- Изменения в Конструкторе модулей / Студии хорошо поддерживаются и ими легко управлять
- Доработки отделены от поставляемого кода
(позволяет вам управлять индивидуальными изменениями через систему контроля версий (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
Продолжение статьи здесь.
Высказать своё мнение о статье Вы можете в комментариях. Если Вас интересуют какие либо вопросы или дополнения, то обсуждение по данной теме доступно на нашем форуме.






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