Rapid application development using Akeeba FOF and Joomla 3.2
-
Upload
joomladay-sydney -
Category
Technology
-
view
5.413 -
download
0
description
Transcript of Rapid application development using Akeeba FOF and Joomla 3.2
WHAT IS FOF?
• FOF = Framework on Framework
• Rapid application development framework for Joomla
• Not standalone – it extends Joomla
• Aim to not break backwards compatibility without a clear deprecation and migration path.
WHAT IS FOF?
• D.R.Y. – Don’t Repeat Yourself
• Uses Bootstrap & jQuery
• Web services. Integrated JSON support
• Almost RESTful, not entirely
• Hierarchical MVC (HMCV)
– Include the results of component views anywhere (other views, other component, modules etc)
KEY DATES
• May 2012 – First public release
• June 2012 – Bootstrap & jQuery
• March 2013 – XML view templates
• September 2013 – Added to Joomla 3.2 alpha
BENEFITS
• Less code = less bugs
• Less code = quicker to develop
• Automagic stuff to make your life easier
WHERE IS FOF USED?
• By Akeeba products
– Akeeba Backup
– Admin Tools
– Akeeba Subscriptions
– Akeeba Ticket System
– Akeeba DocImports
• Now in Joomla 3.2
– Post Installation Messages
KEY FEATURES
• Reuse views while respecting template overrides – loadAnyTemplate() allows you to load any view
• Media files overrides – effectively create template overrides for css and js files
• Automatic JSON and CSV in views– Just add format=json or format=csv
• XML-based views– You can mix PHP-based and XML-based templates
MAGIC FIELDS
• Just add to your database table and all these just magically work and implement required functionality– enabled (like state or published)– created_by– created_on (like created)– modified_by– modified_on (like modified)– locked_by (like checked_out)– locked_on (like checked_out_time)– hits
WHY FOF?
• Less than half the files*
• Less than half the code*
• More functionality
• Much lower barrier of entry for new developer
*based on the example coming up
com_helloworld part 9Language Files Lines of code
PHP 19 285
XML 3 89
SQL 2 10
HTML 2 2
Total 26 386
Language Files Lines of code
PHP 2 15
XML 6 130
SQL 3 18
HTML 1 1
Total 12 164
com_yellow (using FOF)
TIP 1
• Don’t use Joomla 3.2 beta 1 (it has bugs)
• At this stage, Joomla 3.2 alpha 1 is better for FOF dev
/administrator/components/com_yellow/sql/install/mysql/install.sql
DATABASE
CREATE TABLE IF NOT EXISTS `#__yellow_items` (`yellow_item_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`title` varchar(255) NOT NULL,`ordering` int(10) NOT NULL DEFAULT '0',`created_by` bigint(20) NOT NULL DEFAULT '0',`created_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',`modified_by` bigint(20) NOT NULL DEFAULT '0',`modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',`locked_by` bigint(20) NOT NULL DEFAULT '0',`locked_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',PRIMARY KEY (`yellow_item_id`)
) DEFAULT CHARSET=utf8;
component name view name (plural)
view name (singular)id field as per above
magic fields
ENTRY POINT
<?php
defined('_JEXEC') or die();
// Load FOF
include_once JPATH_LIBRARIES.'/fof/include.php';
if(!defined('FOF_INCLUDED')) {
JError::raiseError ('500', 'FOF is not installed');
}
FOFDispatcher::getTmpInstance('com_yellow')->dispatch();
component name
/administrator/components/com_yellow/yellow.php
DISPATCHER
<?xml version="1.0" encoding="UTF-8"?>
<fof>
<backend>
<dispatcher>
<option name="default_view">items</option>
</dispatcher>
</backend>
</fof>
/administrator/components/com_yellow/fof.xml
default view
CONFIG
<?xml version="1.0" encoding="UTF-8"?><config>
<fieldsetname="permissions"label="JCONFIG_PERMISSIONS_LABEL"description="JCONFIG_PERMISSIONS_DESC">
<fieldname="rules"type="rules"label="JCONFIG_PERMISSIONS_LABEL"class="inputbox"filter="rules"component="com_yellow"section="component" />
</fieldset></config>
/administrator/components/com_yellow/config.xml
component name
ACCESS
<?xml version="1.0" encoding="utf-8"?><access component="com_yellow">
<section name="component"><action name="core.admin" title="JACTION_ADMIN"
description="JACTION_ADMIN_COMPONENT_DESC" /><action name="core.manage" title="JACTION_MANAGE"
description="JACTION_MANAGE_COMPONENT_DESC" /><action name="core.create" title="JACTION_CREATE"
description="JACTION_CREATE_COMPONENT_DESC" /><action name="core.delete" title="JACTION_DELETE"
description="JACTION_DELETE_COMPONENT_DESC" /><action name="core.edit" title="JACTION_EDIT"
description="JACTION_EDIT_COMPONENT_DESC" /><action name="core.edit.state" title="JACTION_EDITSTATE"
description="JACTION_EDITSTATE_COMPONENT_DESC" /></section>
</access>
/administrator/components/com_yellow/access.xml
component name
LIST VIEW
Refer to live demo, couldn’t fit all the code on this page
<header name="title" type="fieldsearchable" sortable="true"
buttons="yes" buttonclass="btn"
/>
<field name="title" type="text"
show_link="true"
url="index.php?option=com_yellow&view=item&id=[ITEM:ID]"
empty_replacement="(no title)"
/>
/administrator/components/com_yellow/views/items/tmpl/form.default.xml
FORM
<?xml version="1.0" encoding="utf-8"?><form
validate="true">
<fieldset name="basic_configuration"label="COM_YELLOW_ITEMS_GROUP_BASIC"description="COM_YELLOW_ITEMS_GROUP_BASIC_DESC"class="span6"
><field name="title" type="text"
class="inputbox"label="COM_YELLOW_ITEMS_FIELD_TITLE"labelclass="yellow-label yellow-label-main"required="true"size="50"
/></fieldset>
</form>
/administrator/components/com_yellow/views/item/tmpl/form.form.xml
ADD ENABLED
• enabled (aka state or published)
• ALTER TABLE jos_yellow_items ADD `enabled` tinyint(3) NOT NULL DEFAULT '1';
/administrator/components/com_yellow/views/items/tmpl/form.default.xml• <header name="enabled" type="published" sortable="true"
tdwidth="8%" />
• <field name="enabled" type="published"/>
ADD ENABLED
/administrator/components/com_yellow/views/item/tmpl/form.form.xml<field name="enabled" type="list" label="JSTATUS"
labelclass="hello-label"
description="JFIELD_PUBLISHED_DESC" class="inputbox"
filter="intval" size="1" default="1"
>
<option value="1">JPUBLISHED</option>
<option value="0">JUNPUBLISHED</option>
</field>
ADD FIELD TO FORM
• ALTER TABLE jos_yellow_items ADD `country` varchar(255) NOT NULL;
• /administrator/components/com_yellow/views/item/tmpl/form.form.xml
<field name="country" type="text"description="COM_YELLOW_FIELD_COUNTRY_DESC"label="COM_YELLOW_FIELD_COUNTRY_LABEL"required="true"class="inputbox"size="60"/>
ADD FIELD TO FORM
• /administrator/language/en-GB/en-GB.com_yellow.ini
• COM_YELLOW_FIELD_COUNTRY_DESC="What country is this greeting for? "
• COM_YELLOW_FIELD_COUNTRY_LABEL="Country"
JSON FORMAT
• Append &format=json to any view
• /administrator/index.php?option=com_yellow&format=json
• [{"yellow_item_id":"1","title":"Hello World!","slug":"hello-world","ordering":"0","created_by":"857","created_on":"2013-10-13 07:04:35","modified_by":"857","modified_on":"2013-10-13 08:36:13","locked_by":"857","locked_on":"2013-10-13 08:44:12","enabled":"1","country":"Australia"},{"yellow_item_id":"2","title":"Good bye World!","slug":"good-bye-world","ordering":"0","created_by":"857","created_on":"2013-10-13 07:26:43","modified_by":"0","modified_on":"0000-00-00 00:00:00","locked_by":"0","locked_on":"0000-00-00 00:00:00","enabled":"1","country":""}]
MIX AND MATCH PHP WITH XML
• /administrator/components/com_yellow/views/items/tmpl/default.php
<?php
defined('_JEXEC') or die();
$viewTemplate = $this->getRenderedForm();
echo $viewTemplate;
echo '<div class="span12">If you like this extension, please leave a rating and review on the <a href="http://extensions.joomla.org/">JED</a>';
This bit loads the XML file
MEDIA FILES OVERRIDES
/administrator/components/com_yellow/views/items/tmpl/form.default.xml
<?xml version="1.0" encoding="utf-8"?>
<form
lessfiles="media://com_yellow/css/backend.less||media://com_yellow/css/backend.css"
type="browse"
show_header="1"
show_filters="1"
show_pagination="1"
norows_placeholder="COM_YELLOW_COMMON_NORECORDS"
>
MEDIA FILES OVERRIDES
/media/com_yellow/css/backend.css.span12{
color: #CCCCCC;
}
/administrator/templates/isis/media/com_yellow/css/backend.css.span12{
color: #FF00FF;
}
Not the HTML folder
SIDEBAR MENU
• Built automatically based on views• In alphabetical order by default, or you can specify the order by
adding /administrator/components/com_yellow/views/blah/metadata.xml
<?xml version="1.0" encoding="utf-8"?><metadata><foflib><ordering>4</ordering></foflib><view title="COM_YELLOW_VIEW_BLAH_TITLE"><message><![CDATA[COM_YELLOW_VIEW_BLAH_DESC]]></message></view></metadata>
SIDEBAR MENU
• Hide view by adding blank file skip.xml
/administrator/components/com_yellow/views/blah/skip.xml
VERSION SPECIFIC VIEW
OVERRIDES
• FOF will automatically search for view template files (or XML forms) suffixed with the Joomla! version family or version number
• Joomla! 2.5– default.j25.php, default.j2.php and default.php
• Joomla! 3.2– default.j32.php, default.j3.php and default.php
• Also applies to XML forms– form.default.j25.xml, form.default.j2.xml
RESOURCES
• https://groups.google.com/forum/#!forum/frameworkonframework