(a forum component) extension as an example:var LinkrAgora = LinkrObject.getInstance();
The getInstance method takes 4 arguments:
- Object options: options related to the LinkrAgora object
- Search settings: settings related to the search functionality
- Layout methods: functions to display content
- Template methods: helper functions
Object options example:
var LinkrAgora_options = { title : 'Agora', objName : 'LinkrAgora' };
Search settings example:
var LinkrAgora_search = { defaultType : 'category', multiple : true, options : {}, results : {} };
for SQL tutorials.// SQL queries. // For every "type" there's an object. LinkrAgora_search.sql = { category : {}, forum : {}, topic : {} }; // SQL query for retrieving all categories LinkrAgora_search.sql.category.all = 'SELECT id, cat_name AS name '+ 'FROM #__agora_categories '+ 'WHERE enable = 1 '+ 'ORDER BY disp_position ASC, cat_name ASC'; // SQL for searching categories LinkrCCB_search.sql.category.query = 'SELECT id, cat_name AS name '+ 'FROM #__agora_categories '+ 'WHERE enable = 1 AND cat_name LIKE [query] '+ 'ORDER BY disp_position ASC, cat_name ASC'; // SQL query for forums and subforums. // This one here is tricky, since forums // and subforms should be treated slightly // differently, and that's why we should // opt for a function instead of an object // to handle them. LinkrAgora_search.sql.forum = function(id, query, opts) { var sql = ' SELECT id, forum_name AS name '+ ' FROM #__agora_forums '+ ' WHERE enable = 1 '; // Add search query if (q) { sql += ' AND ( LOWER(forum_name) LIKE '+ q + ' OR LOWER(forum_desc) LIKE '+ q + ' OR LOWER(forum_mdesc) LIKE '+ q + ' OR LOWER(forum_key) LIKE '+ q +' ) '; } // Parent id if ($type(id) == 'number') { // The column name will determine // if the parent is a forum or a category var col = $pick(opts.column, 'cat_id'); sql += 'AND '+ col +' = '+ id; if (cn == 'cat_id') sql += ' AND parent_forum_id = 0'; } return sql +' ORDER BY disp_position, forum_name'; }; // SQL query for forum topics LinkrCCB_search.sql.topic.all = 'SELECT id, subject AS name '+ 'FROM #__agora_topics '+ 'ORDER BY posted ASC'; // SQL for searching topics LinkrCCB_search.sql.topic.query = 'SELECT t.id, t.subject AS name '+ 'FROM #__agora_topics AS t '+ 'LEFT JOIN #__agora_posts AS p ON p.topic_id = t.id '+ 'WHERE ( LOWER(t.poster) LIKE [query] '+ 'OR LOWER(t.subject) LIKE [query] '+ 'OR LOWER(t.descrip_t) LIKE [query] '+ 'OR LOWER(p.message) LIKE [query] ) '+ 'GROUP BY t.id ' 'ORDER BY t.last_post DESC, t.posted DESC'; // SQL for topics within a forum LinkrCCB_search.sql.topic.id = 'SELECT id, subject AS name '+ 'FROM #__agora_topics '+ 'WHERE forum_id = [id]'+ 'ORDER BY posted';
Layout methods example:
var LinkrAgora_layout = { // Category layout category : function(dbCategory) { // First call: // Retrieve category from database if ($type(dbCategory) == 'number') { // SQL query var q = '... insert query here ...'; // Query database and use this // method as callback var callback = this.layout.category.bind(this); return this.tmpl.dbObject(q, callback); } // Second call: dbCategory is an object // (not a number, like in the first call). // Check for errors var e = this.tmpl.isError(dbCategory); if (e !== false) return this.display(e); // Fade in layout this.layout._genericLayoutDelayed({ // ... // ... layout options // ... }); }, // Forum layout forum : function(dbForum) { // ... dislpay forum layout }, // Topic layout topic : function(dbTopic) { // ... } };
.Template methods example:
var LinkrAgora_tmpl = { url : function(type, id) { // Base for all URLs var url = 'index.php?option=com_agora'; // View switch (type) { // Category case 'category': url += '&id='+ id; break; // Forum, Topic case 'forum': case 'topic': url += '&task='+ type +'&id='+ id; break; } // Return URL return url; } };
Thus, the final statement for getting an object instance will look like:
var LinkrAgora = LinkrOject.getInstance( // 1st argument: object options LinkrAgora_options, // 2nd: search settings LinkrAgora_search, // 3rd: layout methods LinkrAgora_layout, // 4th: helper methods LinkrAgora_tmpl );
Get the fully working plugin from JoomlaCode
.| < Prev | Next > |
|---|



