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