add-on development: ee expects that every developer will do his duty
DESCRIPTION
Add-Ons are what make ExpressionEngine the flexible powerhouse that it is today. Being able to write your own simple plugins or incredibly expansive modules allows you to mold ExpressionEngine to nearly any task that your website might require. However, with that power comes a great responsibility to insure that your code is not slowing down the entire site or unduly stressing the server through bad code architecture.There are simple tools already built into ExpressionEngine and PHP that you can use to see precisely what your Add-On is doing during page processing and where it might be doing more work than is absolutely necessary. Every developer should use these to optimize their work from the very beginning of development, prior to release. This workshop will explain these tools and how you can use them effectively. It will also delve deeper into optimization techniques and tricks that will keep your code light and clean, while finding a balance between functionality and performance.TRANSCRIPT
![Page 1: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/1.jpg)
Add-On Development:EE Expects that Every
Developer will do his Duty
Paul Burdick, Lead Developer
solspace
http://solspace.com/downloads/eeci2009/presentation.txt
![Page 2: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/2.jpg)
Summary of Talk
• What are Add-Ons?
• The Three Types of Add-Ons in EE
• Overview of Accessories in EE 2.x
• Add-On Development Skills
• Developing Add-Ons in ExpressionEngine
• Writing Code
• Debugging & Improving Performance
![Page 3: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/3.jpg)
Summary of Talk
• What are Add-Ons?
• The Three Types of Add-Ons in EE
• Overview of Accessories in EE 2.x
• Add-On Development Skills
• Developing Add-Ons in ExpressionEngine
• Writing Code
• Debugging & Improving Performance
![Page 4: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/4.jpg)
I.What are Add-Ons?
![Page 5: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/5.jpg)
Three Types of Add-Ons in EE 1.x and 2.x
• Extensions
• Modules
• Plugins
![Page 6: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/6.jpg)
Extensions
![Page 7: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/7.jpg)
• Extends the base functionality of ExpressionEngine
• Allows developers to interpose their own code into EE's codebase.
• Restrained by where hooks are placed in the code and what arguments are sent with the extension call
![Page 8: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/8.jpg)
• More and more Third Party developers are adding hooks to their own code, allowing extensions for Third Party Add-Ons. Pretty darn cool.
• Typically no DB tables, but there are always exceptions
• Settings Form CP
![Page 9: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/9.jpg)
function settings(){ $settings = array(); $settings['butter'] = "Quite Tasty"; $settings['buttery'] = array('r', array('yes' => "yes", 'no' => "no"), 'no'); // Complex: // [variable_name] => array(type, values, default value) // variable_name => short name for setting and key for language file variable // types: t - textarea // r - radio buttons // s - select // ms - multiselect // f - function calls // values: can be array (r, s, ms), string (t), function name (f) // default: name of array member, string, nothing // // Simple: // [variable_name] => 'Butter' // Text input, with 'Butter' as the default. return $settings;}
![Page 10: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/10.jpg)
![Page 11: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/11.jpg)
Modules
![Page 12: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/12.jpg)
• The Mighty Workhorses of EE
• Complete and expansive Control Panels.
• Database Tables
• Template Tags
• Own extensions possible
![Page 13: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/13.jpg)
Plugins
![Page 14: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/14.jpg)
• No settings, no tables, no CP, no install
• Text manipulation either via Template Tags or Custom Fields
• Or, functionality "plugged" into your Templates.
![Page 15: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/15.jpg)
Add-On Quantities @ devot-ee.com18 October 2009
Extensions:Modules:Plugins:
17073248
![Page 16: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/16.jpg)
Examples of Extensions
• Edit Tab AJAX - AJAX enabled search for Control Panel's Edit area
• FieldFrame - Easily create new custom field types for ExpressionEngine.
• LG Add Sitename - Site Label in upper left of your CP
![Page 17: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/17.jpg)
Examples of Modules
• Structure - Create Static and Listing pages, editable via a tree sitemap
• Tag - Folksonomy functionality for Weblog and Gallery Entries
• User - EE's Member Functionality in Templates
![Page 18: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/18.jpg)
Examples of Plugins
• EE Gravatar - Global Avatars for site members
• Image Sizer - Resizes and caches images on the fly
• Markdown - Markdown formatting in EE Custom Weblog Fields
![Page 19: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/19.jpg)
Accessoriesin EE 2.0
![Page 20: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/20.jpg)
• Accessories provide tools, references, or abilities at the bottom of your EE Control Panel in ExpressionEngine 2.0
• No CP page for each Accessory
• Can have own DB tables
• View files! Lovely lovely View files!
![Page 21: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/21.jpg)
![Page 22: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/22.jpg)
II.Add-On
Development Skills
![Page 23: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/23.jpg)
PHP
![Page 24: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/24.jpg)
• Duh...
• PHP: Hypertext Preprocessor. You really have to love recursive acronyms.
• Server side programming language. Processed at runtime.
• No Compiling! Viewable Source!
![Page 25: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/25.jpg)
• PHP files contain code, but they can also have HTML, JS, XML, et cetera inside them.
• Extremely widespread on hosting environments.
![Page 26: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/26.jpg)
PHP Learning References
PHP Docs: http://php.net/manual/
W3C Tutorial: http://www.w3schools.com/PHP/php_intro.asp
Zend Tutorial: http://devzone.zend.com/article/627
![Page 27: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/27.jpg)
SQL
![Page 28: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/28.jpg)
• Required for advanced Add-On development
• Active Record only *helps* build queries
![Page 29: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/29.jpg)
MySQL
• Popular, open-source, relational database.
• Simple to setup and administrate.
• Fast for reading, decent for writing
• Dominant on hosted environments
![Page 30: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/30.jpg)
MySQL Learning References
• MySQL Docs: http://dev.mysql.com/doc/
• Buy a book. ( O'Reilly Books are well done )
• Learn JOINs
• http://www.informit.com/articles/article.aspx?p=30875&seqNum=5
• http://en.wikipedia.org/wiki/Join_(SQL)
![Page 31: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/31.jpg)
HTML/CSS
![Page 32: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/32.jpg)
View Files
• Essentially HTML files with PHP inside for outputting data
• Part of ExpressionEngine 2.0 by default
• Available in ExpressionEngine1.x using Hermes or custom include code
![Page 33: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/33.jpg)
<?php echo $this->view('header.html');?><h4 class="alertHeadingCenter"><?php echo $LANG->line('error');?></h4>
<div class='defaultCenter' > <div class="box"> <strong><?=$error_message?></strong> <br /><br /> <strong> <a href='javascript:history.go(-1)'>« <?=$LANG->line('back')?></a> </strong> </div></div><?php echo $this->view('footer.html'); ?>
![Page 34: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/34.jpg)
User Interfaces
• Build in static HTML, CSS, JS files before converting to View files.
• Easier development.
• Easier bug testing.
• No need to create data variables/objects first.
• UI developer does not need to understand PHP.
![Page 35: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/35.jpg)
jQuery/JavaScript
![Page 36: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/36.jpg)
• jQuery available in EE 1.x via an extension (not enabled by default)
• jQuery available in EE 2.x with no additional work
• Relatively easy to add other libraries or custom JS if need be.
![Page 37: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/37.jpg)
global $EXT;
if ( ! isset($EXT->version_numbers['Cp_jquery'])){ return $OUT->show_user_error('general', $LANG->line('cp_jquery_requred')));}
![Page 38: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/38.jpg)
III.Developing Add-Ons in ExpressionEngine
![Page 39: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/39.jpg)
Never, Ever Just Start Coding!
![Page 40: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/40.jpg)
![Page 41: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/41.jpg)
• Previous Approaches
• Required Features
• Alternative Approach in ExpressionEngine?
• Can this be done in EE in any other way?
• Is a Module required? Could an Extension do it?
• Could a Plugin output weblog data in the way you need?
Research
![Page 42: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/42.jpg)
Tell a Story
• How will Person A do Task 1?
• Question Previous Approaches.
• Is X Really the BEST way to do it?
• What Would Apple Do?
• Eliminate Steps, Make Process Intuitive.
• Follow your instincts.
![Page 43: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/43.jpg)
Map Out Features
• Major• Functionality required for module to serve
its market/purpose
• Minor• Not Necessarily Required.
• Features are cuttable for a 1.0 release.
• Icing• For specific clients or users
• Think and consider them
![Page 44: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/44.jpg)
Database Structure
• Tables for your Major and Minor Features
• Normalization: Eliminate Data Duplication
• http://en.wikipedia.org/wiki/Database_normalization
• Indexes!
• Specific, Sensical Field Names
• 'event_title' vs 'event'
• 'event_short_name' vs 'name'
![Page 45: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/45.jpg)
Tags Structure
• The Naming and Functionality of Template tags
• For Each Tag
• Describe
• Name
• Parameters
• Variable Pairs and Single Variables
• Consider this a precursor to your documentation
![Page 46: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/46.jpg)
Tags Structure: Describe
• Descriptions for each Tag, Parameter, and Variable.
• Explain what each one does.
![Page 47: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/47.jpg)
Tags Structure: Tag Name
• Simple and Obvious
• No Abbreviations, No Ambiguity
• {exp:module:g_entries} vs {exp:module:gallery_entries}
![Page 48: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/48.jpg)
Tags Structure: Parameters
• Prefix?
• form:id="" or form_id=""
• Use prefixes to break up parameters into "groups" of functionality.
• notify:admin_email=""
• notify:user_email=""
![Page 49: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/49.jpg)
Tags Structure: Variables
• No Ambiguity, No Abbreviations
• {group}{/group} vs {category_group}{/category_group}
• {title} vs {event_title}
• Prevent collisions in nested tags
• Underscores recommended
![Page 50: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/50.jpg)
Tags Structure:Show to Other People
• Get Feedback
• Revise until the Spec feels solid.
![Page 51: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/51.jpg)
Building a Control Panel
![Page 52: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/52.jpg)
Workflow Module’s CP
![Page 53: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/53.jpg)
Control Panel: Break Up into Sections
• Data Adding, Deleting, and Manipulation
• Create/Modify/Delete Items
• Ex: Calendar, Wiki, Forum
• Build only one main interface
• Preferences/Settings/Permissions
• Per Site, Per Weblog, Per Member Group, Per X
• Actions
• Ex: Recount, Re-Cache, Clear Caches
• Version Number and Documentation Link
![Page 54: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/54.jpg)
KISS: Keep It Simple, Stupid
![Page 55: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/55.jpg)
Control Panel: Design• Build an HTML/CSS/JS mockup first
• Put into a View file
• PHP into HTML, Not HTML into PHP
• documentDOM in Hermes - Builds HTML in PHP, specifically form fields
• Ignore IE6
• EE 2.x no longer supports it
• Solspace no longer supports it
• Neither should you.
![Page 56: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/56.jpg)
Making Software Support IE6 Upgrading Users
Time Wasted on IE6
vs.
![Page 57: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/57.jpg)
8%92%
Making Software Support IE6 Upgrading Users
Time Wasted on IE6
vs.
![Page 58: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/58.jpg)
Have Goals,Even Milestones,Never Deadlines
![Page 59: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/59.jpg)
IV.Writing Code
![Page 60: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/60.jpg)
Follow the EllisLab Development Guidelines!
http://expressionengine.com/docs/development/guidelines/index.html
![Page 61: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/61.jpg)
"Prolific and informative commenting using proper comment style"
• We want to know your thinking! Why this way?
• Expect people to learn from your code.
• Helps you understand your *own* logic
![Page 62: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/62.jpg)
• Be Paranoid! Nothing is Immune! Constant Vigilance!
• If you DID NOT set or get data yourself, assume it is tainted, even EE variables
• If you DID set or get yourself, but not within ten lines of code, assume it is tainted.
• Sanitize and Escape at the Query
• No Security Exceptions for SuperAdmins
Sanitize and Escape Everything
![Page 63: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/63.jpg)
Abstraction
• Use Twice, Write Once
• Create Libraries!
• Reduces Work and Mistakes
• Purpose of Hermes
![Page 64: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/64.jpg)
Simplify, Simplify,Simplify
![Page 65: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/65.jpg)
Simplify: Reduce Code Work• Do the Least Amount of Effort to produce results
• Bail Out First, Work Second
• Invalid variable type? Bail.
• No Permissions? Bail.
• Error? Bail.
• Don’t Do Serious Work Until You Know You Have Work To Do
![Page 66: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/66.jpg)
Simplify: Reduce DB Work
• Performing Multiple Queries are OK.
• Validate, Check Pagination, Then Retrieve Data
![Page 67: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/67.jpg)
Simplify: Models
• Abstract common SELECTs into separate methods
• INSERTs/UPDATEs for a DB Table in one method
• Hermes has per Add-On model caching caching built into it.
• Speaking of caching...
![Page 68: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/68.jpg)
Per Page Load Caching
• Use $SESS->cache
• Suggested:
• $SESS->cache['modules']['module_name']['some_cache'] = array();
• Alternative:
• $SESS->cache['Solspace']['module_name']['some_cache'] = array()
• Try a Reference!
• $this->cache =& $SESS->cache['modules']['module_name'];
• $this->cache[‘some_cache’] = array();
![Page 69: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/69.jpg)
Weblog Module Class
• Very powerful code, no need to write your own.
• Code was written so that it could be used elsewhere.
• Returns Results based on tag parameters
• You can modify $TMPL->tagparams!
![Page 70: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/70.jpg)
require_once PATH_CORE.'core.typography'.EXT;require_once PATH_MOD.'/weblog/mod.weblog'.EXT;
$TMPL->tagparams['entry_id'] = '1|2|3|4';$TMPL->tagparams['dynamic'] = 'off';
$TMPL->tagdata = $TMPL->assign_relationship_data( $TMPL->tagdata );$TMPL->var_single = array_merge( $TMPL->var_single, $TMPL->related_markers );
$weblog_object = new Weblog;
$weblog_object->fetch_custom_weblog_fields();$weblog_object->fetch_custom_member_fields();$weblog_object->fetch_pagination_data();$weblog_object->create_pagination();$weblog_object->build_sql_query();
if ($weblog_object->sql == '') return $this->return_data = $TMPL->no_results();
$weblog_object->query = $DB->query($weblog_object->sql);
if ($weblog_object->query->num_rows == 0) return $this->return_data = $TMPL->no_results();
$weblog_object->TYPE = new Typography;
$weblog_object->fetch_categories();$weblog_object->parse_weblog_entries();$weblog_object->add_pagination_data();
return $this->return_data = $weblog_object->return_data;
![Page 71: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/71.jpg)
Provide Tools for Keeping Things Tidy
• Removal of Old Data.
• Removal of Old Caches
• Optimize Tables - Reduce DB Overhead
![Page 72: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/72.jpg)
V.Debugging and
Improving Performance
![Page 73: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/73.jpg)
Consider Performance an Aspect of Add-On
Debugging
![Page 74: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/74.jpg)
Turn on PHP Debugging
• Insure Display Errors Setting is On in php.ini
• Error Reporting is E_ALL
• No PHP Errors! Ever!
• Remove All Deprecated PHP Functions.
![Page 75: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/75.jpg)
Turn on SQL Queries
• Admin => System Preferences => Output and Debugging
• Queries appear on both CP and User side of EE
• Review Queries
• Check the Add-On's CP
• Extensions: Check areas of usage in CP
• Check EVERY single tag in a Template.
• Eliminate Duplicates!
![Page 76: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/76.jpg)
Turn on SQL Queries• Are Certain Queries Necessary on EVERY load?
• Settings/Preferences
• Caching (Checks, Re-caching, Emptying)
• Statistics
• Evaluate Queries for Performance
• Run in phpMyAdmin or similar
• Try Making the Query More Efficient
• Add a WHERE clause on indexed field
• Remove Extraneous JOINs when possible
![Page 77: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/77.jpg)
Turn on SQL Queries
• De-Normalization.
• Duplicating Data or Grouping It to Reduce Work
• http://en.wikipedia.org/wiki/Denormalization
• Best example? Statistics: Hit count.
• Abstract methods for data consistency (i.e. correct values)
• Learn About Optimizing MySQL
• MySQL Performance Blog
• http://mysqlperformanceblog.com
![Page 78: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/78.jpg)
SuperSearch SQL Queries
![Page 79: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/79.jpg)
Turn on Template Debugging• Admin => System Preferences => Output and Debugging
• Outputs Elapsed Time during Add-On processing
• What Code is Taking the Longest to Process?
• $TMPL->log_item()
• $TMPL->log_item('Freeform Module: Run Query');
• Disable Processing
• Disable Parameter ( disable="feng_shui" )
• Auto-detect Variables and Remove Queries and Processing
![Page 80: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/80.jpg)
Vanilla Template Log
![Page 81: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/81.jpg)
SuperSearch Processing
![Page 82: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/82.jpg)
Knowing is Half the Battle!
![Page 83: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/83.jpg)
Automated Actions• Example: Caching or Retrieving Remote Data
• Can Seriously Slow Down an Add-On
• Try AJAX
![Page 84: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/84.jpg)
Deprecated Code• Consider using trigger_error()
• trigger_error('Favorites Module: The Favorites Count tag has been deprecated. Use the Entry Count tag instead');
• Don't Leave It Around Forever, Discontinue Support, Then Remove It
![Page 85: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/85.jpg)
Ask for Help
• Plenty of EE, PHP, SQL Knowledge out there. Use it.
• Often just discussing a problem will lead to a solution.
![Page 86: Add-On Development: EE Expects that Every Developer will do his Duty](https://reader038.vdocuments.us/reader038/viewer/2022103116/558fbf141a28ab7b488b45c3/html5/thumbnails/86.jpg)
V.Presentation Over, So
Let's Talk