Продолжение первой части статьи посвященной доработкам для 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 выдает ошибку.