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
e
cho 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"
}
]
}

 

Using Bootstrap in Joomla Components

See https://docs.joomla.org/J4.x:Using_Bootstrap_Components_in_Joomla_4

Your Joomla template may not load up all the Bootstrap JS and CSS. This is to save bandwidth and speed up pages.

The Bootstrap bundled with Joomla 5 can be found here... media/vendor/bootstrap

You call in modular parts of Bootstrap JS that you need. Here are the modular JS:

  • alert.js
  • button.js
  • carousel.js
  • collapse.js
  • dom.js
  • dropdown.js
  • modal.js
  • offcanvas.js
  • popover.js
  • popper.js
  • scrollspy.js
  • tab.js
  • toast.js

 

Use the /media/com_mycom/joomla.asset.json file to load in the modular Bootstrap scripts.

 

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>