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

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

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

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

  1. maverikod:

    Неплохо было бы еще более подробно остановиться на локализации.

    Поскольку многие поставляемые модули не имеют ее, а те которые имеют — не всегда срабатывают. Например ECalendar имеет файл руссификации, но почему то на версии 6.3 выдает ошибку.

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

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