Joomla 5 Developer Documentation
Joomla Developers Manual: http://pr-240.manual.joomlacode.org/docs/
Classes: https://api.joomla.org/cms-5/classes
Quick notes for Joomla 5 Component Developers
(Joomla Modules have a simpler structure and is not covered here).
Model: Place for Functions and Database Calls. populateState, getItem, getTable,
View: builds the display. Calls a function database to populate the data. Sets the page name, metadata, breadcrumbs, all the other standard bits.
Controller: Where the edit, remove, checkin, publish functions live. Like a toolbar.
Helper: Component specific functions Service: Where the Router.php file lives. The Router builds the component URL.
Calling a component page:
index.php?option=com_organic_shop&view=buyproduct&id='.(int) $item->id . '&catid=' . (int) $item->product_category_id);?>"
Joomla Form calling to self...
<form action="<?php echo htmlspecialchars(Uri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm">
This line (in above) means to get the current URL complete with filename of the current script...
Uri::getInstance()->toString());
To call a component page and execute a task (a function stored in the controller file)... in this case run the paypalReturn function. Note the "view.task".
index.php?option=com_organic_shop&view=checkout$task=checkout.paypalReturn
Getting a Component Config Parameter
Parameters are defined in administrator/components/my_com/config.xml
Getting from within the component
$app = Factory::getApplication(); $params = $app->getParams(); $param = $params->get('paypal_api');
From within another component:
$content_params = ComponentHelper::getParams( 'com_content' ); $show_date = $content_params->get( 'paypal_api' );
Getting Page Inputs
Basic page input from GET or POST
use Joomla\CMS\Factory; $input = Factory::getApplication()->getInput();
$name = $input->getInput('name',"Joe","STRING")
Filter types:
- INT
- UNIT
- FLOAT
- BOOL
- WORD
- ALNUM
- CMD
- BASE64
- STRING
- HTML
- ARRAY
- RAW
- USERNAME
Example... getting all page inputs, without knowing their names... and processing them...
use Joomla\CMS\Factory; $input = Factory::getApplication()->getInput(); $post = $input->post->getArray(); //echo "<pre>Input:".print_r($post,1)."</pre>"; // DEBUG
foreach ($post as $key=>$value){ if (str_contains($key, "needle_")) { // Looks for something in the input // Do Something here
} } }
More info on getting other inputs...
http://pr-240.manual.joomlacode.org/docs/general-concepts/input
Joomla J5 Constants
Visit https://docs.joomla.org/Constants
These return paths (some of these will be depreciated in Joomla 6...)
JPATH_ADMINISTRATOR | The path to the administrator folder. |
JPATH_BASE | The path to the installed Joomla! site, or JPATH_ROOT/administrator if executed from the backend. |
JPATH_CACHE | The path to the cache folder. |
JPATH_COMPONENT | The path to the current component being executed. |
JPATH_COMPONENT_ADMINISTRATOR | The path to the administration folder of the current component being executed. |
JPATH_COMPONENT_SITE | The path to the site folder of the current component being executed. |
JPATH_CONFIGURATION | The path to folder containing the configuration.php file. |
JPATH_LIBRARIES | The path to the libraries folder. |
JPATH_PLUGINS | The path to the plugins folder. |
JPATH_ROOT | The path to the installed Joomla! site. |
JPATH_SITE | The path to the installed Joomla! site. |
JPATH_THEMES | The path to the templates folder. |
JPATH_XMLRPC | The path to the XML-RPC Web service folder.(1.5 only) |
These return URLS...
use \Joomla\CMS\Uri\Uri;
echo Uri::getInstance()->toString(); //returns https://organicdemo.com.au/index.php?option=com_organic_shop&view=checkout
echo Uri::base(); //returns https://organicdemo.com.au/
echo Uri::root(); //returns https://organicdemo.com.au/
echo Uri::current(); //returns https://organicdemo.com.au/index.php
More info on using URLs in Joomla here: https://docs.joomla.org/URLs_in_Joomla
More info on Uri class... https://api.joomla.org/cms-5/classes/Joomla-CMS-Uri-Uri.html
Calling Component Style Sheets
We do this now through WebAssetManager. In the component tmpl page... add this
// Import CSS
$wa = $this->document->getWebAssetManager();
$wa->useStyle('com_organic_shop.organicshop');
You will also need to add your stylesheet asset in the json file of your component. (Not the template json). When a component is installed, it is located in the media folder... media/com_mycomponent/joomla.asset.json
{
"$schema": "https://developer.joomla.org/schemas/json-schema/web_assets.json",
"name": "com_organic_shop",
"version": "CVS: 5.0.1",
"license": "GNU General Public License version 2 or later; see LICENSE.txt",
"assets": [
{
"name": "com_organic_shop.organicshop",
"type": "style",
"uri": "com_organic_shop/organicshop.css"
}
]
}
Sessions
Currently (July 2024) the Joomla Devloper Docs does not adequalty cover sessions cookie use. This is how we use them for Joomla 5...
$session = Factory::getSession();
$cart = $session->get('cart');
if (is_null($cart)) {
// No cart yet - so make a new Cart
$cart = array($product_id=>$buy_qty);
}
else {
// There is a Cart in session - so add items
$cart[$product_id] = $buy_qty;
}
//echo "<pre>".print_r($cart,1)."</pre>"; //DEBUG
// Store cart in session
$session->set('cart',$cart);
Making a system message
In the controller file....
$this->setMessage("We have a problem", 'warning');
$this->setMessage("Saved OK");
In the model file...
Factory::getApplication()->enqueueMessage('Sorry - We have a big problem.', 'error');
Modal Confirm then Action
Placed in a tmpl file (and example delete button):
<?php echo HTMLHelper::_(
'bootstrap.renderModal',
'deleteModal',
array(
'title' => 'Delete item',
'height' => '50%',
'width' => '20%',
'modalWidth' => '50',
'bodyHeight' => '100',
'footer' => '<button class="btn btn-outline-primary" data-bs-dismiss="modal">Close</button>
<a href="' . Route::_('index.php?option=com_mycomponent&task=myviewform.remove&id=' . $this->item->id, false, 2) .'" class="btn btn-danger">Delete</a>'
),
"Delete item $this->item->id ?"
);
?>
Sample Tasks
Task Function are found in the Controller folder, with a filename like MyviewController.php
Code to call a task in the tmpl file...
Cancel button:
<a class="btn btn-danger"
href="/<?php echo Route::_('index.php?option=com_mycomponent&task=myviewform.cancel'); ?>"
title="<?php echo "Cancel";?>">
<span class="fas fa-times" aria-hidden="true"></span><?php echo "Cancel"; ?>
</a>
Save:
Route::_('index.php?option=com_mycomponent&task=myviewform.save')
Delete:
Route::_('index.php?option=com_mycomponent&task=myviewform.remove&id=' . $this->item->id, false, 2)
Cancel:
Route::_('index.php?option=com_mycomponent&task=myviewform.cancel')
Redirecting to pages
To redirect to an edit page...
// Redirect to the edit screen.
$this->setRedirect(Route::_('index.php?option=com_mycomponent&view=myviewform&layout=edit', false));
Icons
Font awesome icons... (https://fontawesome.com/icons)
<span class="fas fa-circle-check" aria-hidden="true"></span>
Bootstrap 5 Icons: (https://icons.getbootstrap.com/)
<i class="bi bi-check-circle"></i>