Продолжение первой части статьи посвященной доработкам для SugarCRM.
Напомню что если у вас есть возможность, то рекомендую вам скачать power point презентацию, которую мы и рекомендуем для ознакомления. Для тех у кого нет возможности или желания в данной теме немного более краткий eё web вариант.
Логические ловушки (hooks)
- after_ui_frame — Срабатывает после того, как фрейм был вызван, и перед тем как вызывается футер. Эта ловушка не получает доступа к текущему объекту bean (что означает, что вы не можете видеть изменения в значении записи)
- after_ui_footer — Срабатывает после того, как футер был вызван. Эта ловушка не получает доступа к текущему объекту bean
- server_round_trip — Срабатывает в конце каждой страницы SugarCRM. Она вызывается в методе sugar_cleanup () , который вызывается как функция завершения работы в Sugar. Эта ловушка не получает доступа к текущему объекту bean (что означает, что вы не можете видеть изменения в значении записи)
- before_delete — Срабатывает перед тем, как запись удаляется с использованием SugarBean::mark_deleted ()
- after_delete — Срабатывает после того, как запись удаляется с использованием SugarBean::mark_deleted ()
- before_restore — Срабатывает перед отменой удаления с использованием SugarBean::mark_undeleted () method
- after_restore — Срабатывает после отмены удаления с использованием SugarBean::mark_undeleted () method
- before_retrieve — Срабатывает перед получением записи из БД с использованием SugarBean::retrieve () method. Эта ловушка не срабатывает, когда вы создаете новую запись
- after_retrieve — Срабатывает после получения записи из БД с использованием SugarBean::retrieve () method. Эта ловушка не срабатывает, когда вы создаете новую запись
- before_save — Срабатывает перед тем, как запись сохранена с использованием метода SugarBean::save (). Следует отметить один момент, что с конкретными модулями, такими как Cases и Bugs, человекопонятное ID записи (подобно полю case_number в модуле Case), недоступно в пределах вызова before_save , т.к. бизнес логика, которая вычисляет это значение попросту еще не выполнилась
- after_save — Срабатывает после того,как запись сохранена с использованием метода SugarBean::save (). Следует отметить один момент, что с конкретными модулями, такими как Cases и Bugs, человекопонятное ID записи (подобно полю case_number в модуле Case), недоступно в пределах вызова before_save , т.к. бизнес логика, которая вычисляет это значение попросту еще не выполнилась
- process_record — Срабатывает непосредственно перед получением результатов запроса в записи, которую сделали текущей. Это даёт разработчикам возможность проверить и прошить подлежащие этому запросу. Это также прекрасное место для установки значений в поля записи перед отображением в DetailView или List View. Это событие не срабатывает в EditView
- before_logout — Срабатывает перед тем, как юзер разлогинивается из системы
- after_logout — Срабатывает после того, как юзер разлогинивается из системы. Эта ловушка не получает доступ к текущему объекту bean (что означает, что нельзя считать или изменить текущую запись)
- after_login — Срабатывает после того, как пользователь успешно залогинился в системе
- before_login — Срабатывает перед тем, как юзер логинится в системе. Эта ловушка не получает доступ к текущему объекту bean ( что означает, что нельзя считать или изменить текущую запись)
- login_failed — Срабатывает, если попытка логина провалилась. Эта ловушка не получает доступ к текущему объекту bean ( что означает, что нельзя считать или изменить текущую запись)
- after_relationship_add — Срабатывает после того, как было установлено отношение между двумя записями. Вызывается для обоих записей, участвующих в отношении
- after_relationship_delete — Срабатывает после того, как отношение между двумя записями было удалено. Вызывается для обоих записей, участвующих в отношении.
logic_hooks.php
<?php $hook_version = 1; $hook_array = Array(); $hook_array['before_save'] = Array(); $hook_array['before_save'][] = Array(1, 'AccountHooks', 'custom/Accounts/AccountHooks.php','AccountHooks', 'getParentAccountIndustry');
Параметры для определения логической ловушки.
Параметр 1 – индекс для сортировки, использующийся для сортировки массивов определений логических ловушек, перед тем как их обрабатывают.
Параметр 2 — Строковое имя для идентификации ловушки
Параметр 3 – Путь к PHP файлу для включения, который содержит код логической ловушки.
Параметр 4 – Имя PHP класса, методом которого является ловушка.
Параметр 5 – Имя PHP метода ловушки.
AccountHooks.php
<?php class AccountHooks { public function getParentAccountIndustry( SugarBean $bean, $event, $arguments ) { if ( empty($bean->industry) && !empty($bean->parent_id) ) { $parentAccountFocus = new Account(); $parentAccountFocus->retrieve($bean->parent_id); if ( !empty($parentAccountFocus->id) ) $bean->industry = $parentAccountFocus->industry; } } }
Куда я должен поместить доработки?
- Логические ловушки уровня приложения в /custom/modules/
- Логические ловушки уровня модуля в /custom/modules/Modulename/
Темы
Дерево каталогов
- css/ — содержит все css файлы
- images/ — содержит все рисунки
- js/ — содержит все файлы js
- tpls/ — шаблоны smarty
- themedef.php файл определения
Темы могут наследоваться от других тем
Модель наследования тем
- Все темы могут быть модифицированы заменой файлов в custom/theme/<themename> директории
- Изображения, HTML шаблоны могут быть перезаписаны в данной директории (Пример: изображение theme/<themename>/dog.gif изменяем, заливая новое в папку custom/theme/<themename>/dog.gif )
- CSS и Javascript файлы объединяются в порядке наследования
- Используйте cssmin и jsmin чтобы уменьшить их размер
- Никакого измения кода не требуются. Изменения будут видны автоматически после запуска быстрого восстановления.
Высказать своё мнение о статье Вы можете в комментариях. Если Вас интересуют какие либо вопросы или дополнения, то обсуждение по данной теме доступно на нашем форуме.
Неплохо было бы еще более подробно остановиться на локализации.
Поскольку многие поставляемые модули не имеют ее, а те которые имеют — не всегда срабатывают. Например ECalendar имеет файл руссификации, но почему то на версии 6.3 выдает ошибку.