CiviCRM/Joomla development/customization Brian Shaughnessy Lighthouse Consulting & Design www.lcdservices.biz why customize?  not-for-profits… o range widely in the services they provide o range widely in the business processes they implement  impossible to have one-size-fits-all  overkill to move everything to configuration options goals     code review/architecture customization methods best practices examples architecture DB DAO PEAR BAO Smarty Web jQuery User directory structure       CRM: application templates: Smarty .tpl files packages: included libraries extern: externally triggered files (IPN) css Joomla directory structure: CRM  component/feature area o o o o o DAO: data access objects BAO: business access objects Form Page [Controller/Selector/xml/StateMachine] example class/tpl correlation  CRM/Event/Form/Registration/Register.php  CRM_Event_Form_Registration_Register  templates/CRM/ Event/Form/Registration/Register.tpl standard form flow      ::preProcess ::setDefaultValues ::buildQuickForm ::formRule ::postProcess customization methods  PHP overrides  Smarty overrides o file.extra.tpl addendum  Joomla plugin  CiviCRM extensions o o o o reports search payment gateway modules* don’t hack core!  just don’t do it… unless you have no other choice… debugging tips  print variables o CRM_Core_Error::debug(�varname’, $varObj); [log to screen] o CRM_Core_Error::debug_var(�varname’,$varObj); [log to file] o CRM_Core_Error::debug_log_message($msg, TRUE/FALSE); [log to screen or file] o CRM_Core_Error::backtrace();  tail log file o /media/civicrm/ConfigAndLog/FILE.log debugging tips  enable debugging  display smarty variables o append: &smartyDebug=1  search “.tpl” in page source to trace file  log queries to file o define( 'CIVICRM_DAO_DEBUG', 1 );  log mail to file o define('CIVICRM_MAIL_LOG', '/path/to/mail.log'); php/tpl overrides  define location o Administer > System Settings > Directories  follow folder pattern for core files  pros: o complete control over code flow/layout without hacking core  cons: o must be maintained through upgrades  be sure to comment thoroughly! php override example  report templates are a common area where clients want customizations.  the template defines the fields, filters, sort options, calculations, action options, and display  most of those options are defined in a large array during class construction  current employer report: o remove country o add relationship end date o add relationship enabled/disabled smarty override example  any page rendered by CiviCRM is pushed through the Smarty templating engine  the Smarty file contains the html and passed variables to be rendered  events and profiles may have ID-specific subfolders o CRM/Event/Form/Registration/1/Register.tpl file.extra.tpl files  instead of overriding Smarty files, you can create a new file named filename.extra.tpl  benefit: avoid modifying and maintaining the entire .tpl file – only need to interact with the elements you are modifying  relies on js/jquery for most implementations  limitations: template files included via another template file is not captured by the .extra insertion code Joomla plugins  use plugins to implement hooks (events)  wiki.civicrm.org/confluence/display/CRMDOC /Hook+Reference  within your plugin class, implement: o civicrm_hookName(…) { } hooks       modify forms process impact objects before/after saving extension lifecycle ACL impact GUI (links, page, nav, etc.) other… plugin example  CiviCRM has a user dashboard page that summarizes the contact’s involvement with your organization  Let’s create a plugin to retrieve the contact’s product purchases from RedShop and include the list in the dashboard api v3  wiki.civicrm.org/confluence/display/CRMDOC /API+Reference  drupal.demo.civicrm.org/civicrm/ajax/doc/api #explorer  Bindings: PHP/AJAX/REST/Smarty  Actions: Create/Delete/Get/GetCount/ GetSingle/GetFields/GetValue/Replace/ Update  Chainable api:php  standard format to work with objects $params = array( 'version' => 3, 'last_name' => 'Doe', 'contact_type' => 'Individual', ); $contact = civicrm_api('contact', 'get', $params); Array ( [is_error] => 0 [version] => 3 [count] => 2 [values] => Array ( [4] => Array ( [contact_id] => 4 [contact_type] => Individual [contact_sub_type] => [sort_name] => Doe, John [display_name] => Mr. John Doe [do_not_email] => 0 [do_not_phone] => 0 [do_not_mail] => 0 [do_not_sms] => 1 [do_not_trade] => 0 [is_opt_out] => 0 [legal_identifier] => [external_identifier] => [nick_name] => J.D. [legal_name] => [image_URL] => [preferred_mail_format] => Both [first_name] => John [middle_name] => P. [last_name] => Doe [job_title] => Executive Director api:php civicrm extensions  CMS-agnostic  can be submitted to the CiviCRM extension directory  installed through: Administer » System Settings » Manage Extensions  payment processors, custom search, custom report, module* extension  create folder in custom extension directory: domain.type.name  create info.xml to define the extension parameters  refer to documentation for xml options and naming conventions  create php and tpl files o php files reside in base directory o tpl files reside in  install/enable/run/test extension  wiki.civicrm.org/confluence/display/CRMDOC /Extensions  wiki.civicrm.org/confluence/display/CRMDOC /Extension+Reference  wiki.civicrm.org/confluence/display/CRMDOC /Create+a+Module+Extension  github.com/totten/civix/  civicrm.org/extensions sample civi module  custom birthday search via module  provide advanced tools to search contacts by birthday, including searching by month, year range, age range, day range joomla extensions  various states of development/version compatibility  http://wiki.civicrm.org/confluence/display/CR MDOC/Joomla%21+Extensions+for+CiviCRM+ %283rd+party%29  http://civicrm.org/extensions  http://extensions.joomla.org/extensions/exte nsion-specific/civicrm  https://github.com/lcdservices extensions         CiviSearch plugin CiviCRM Group Sync component CiviAuthenticate plugin CiviEvent module CiviUser component CiviLinker plugin Gloriant CiviCRM component CiviLead resources  www.civicrm.org  book.civicrm.org/ [user admin and developer guides]  wiki.civicrm.org/confluence/display/CRMDOC /CiviCRM+Documentation [online documentation] community      wiki: http://wiki.civicrm.org forum: http://forum.civicrm.org/ IRC: #civicrm on irc.freenode.net blogs: http://civicrm.org/blog/ bug: http://issues.civicrm.org
© Copyright 2024 Paperzz