The document discusses the FOF (Framework on Framework) extension for Joomla. It provides a summary of FOF's features and conventions including:
- FOF extends the Joomla framework to make application development easier and more standardized.
- It promotes conventions over configuration to reduce code duplication and bugs. This includes standardized naming for tables, fields, and default controller/model tasks.
- FOF has features like HMVC which allow embedding one component's views within another, and reusable view templates. It also supports automatic JSON and CSV views for APIs and exporting data.
- The document outlines FOF's history and provides examples of how its conventions streamline controller, model, and view
22. Convention over configuration in
the Dispatcher
✤ The Dispatcher is your component’s router. It routes the request to the
appropriate Controller based on conventions:
✤ A POST request gets routed to the save task
✤ A GET request to a plural view name gets routed to the browse
task
✤ A front-end GET request with an ID gets routed to the read task
✤ A back-end GET request with an ID gets routed to the edit task
23. Convention over configuration in
Models
✤ Tables are named as #__component_view, e.g. #__todo_items
✤ Auto increment field is named component_view_id, e.g. todo_item_id
✤ Magic fields: enabled, created_by, created_on, modified_by,
modified_on, locked_by, locked_on, hits
✤ You can override defaults without copying & pasting code, ever.
Copy & paste is the devil!
24. Convention over configuration in
Controllers
✤ Default tasks (not RESTful!): browse, read, edit, add, delete, save,
apply, ...
✤ Customize with onBeforeMethod and onAfterMethod methods, e.g.
onBeforeSave. Don't copy & paste code.
✤ All MVC objects can be passed a $config array to customize them. It
"flows" from dispatcher to component to model and view.
✤ FOF guesses the task if it's missing based on plural/singular view
name and existence of ID in the query
25. Convention over configuration in
Views
✤ Views inherit from FOFView and its specialized children, e.g.
FOFViewHtml
✤ Customize using the onTask methods, e.g. onBrowse
✤ The toolbar is handled outside the view, in a FOFToolbar descendant
class. Override it with a toolbar.php file in the component's root.
✤ Magic toolbar methods, e.g. onItemsBrowse allow you to customize
the toolbar without copying & pasting code.
27. HMVC – Hierarchical MVC
✤ Include the results of component views anywhere (other views, other
component, modules, ...)
✤ FOFDispatcher::getTmpInstance(‘com_foobar’, ‘items’, array(‘layout’
=> ‘fancy’))->dispatch();
28. Reuse view templates
✤ Load a view template from another view, component, ...
✤ echo $this->loadAnyTemplate('site:com_foobar/item/form');
29. Media files overrides
✤ Load media files like this:
FOFTemplateUtils::addCSS('media://com_foobar/css/frontend.css');
✤ Media overrides are inside the template folder, e.g.
templates/tpl_example/media/com_foobar/css/frontend.css
30. Services first – automatic JSON
and CSV views
✤ Just add format=json or format=csv
✤ JSON: You have an instant JSON-based remote API for your
components
✤ CSV: You can quickly export whatever you see in the backend to
Excel, Numbers, LibreOffice, Google Docs, etc.
✤ Transparent authentication support using URL parameters or HTTP
Basic Authentication
31. XML-based views
✤ It’s JForm on double dose of steroids
✤ Browse, read and edit views from XML templates
✤ You don’t need to write any PHP or HTML, but you can mix
traditional PHP-based and XML-based templates, even in the same
view
✤ Overridable with Joomla! template overrides