Il framework di Joomla consente, con poche righe di codice, di estendere facilmente il form di inserimento articoli, arricchendolo cosi con i nostri campi personalizzati. Vediamo oggi come aggiungere un campo data ai testi del nostro sito.
Uno degli errori che vedo verificarsi più di frequente nei progetti che mi arrivano dai clienti, è il sovraccarico di estensioni installate nei vari Cms. Spesso si esagera, installando moduli, plugin e componenti senza farsi scrupolo del fatto che qualsiasi cosa viene aggiunta ad un cms, è potenzialmente foriera di problemi di compatibilità. Mi capita quindi di dover intervenire su siti che provano a caricare 2 versioni diverse di Jquery, o componenti che usano tabelle html ovunque vanificando di fatto il lavoro fatto dai grafici per garantire un layout responsive. Per non parlare di template -e ne ho visti anche a pagamento- che caricano ulteriori framework javascript in aggiunta a Jquery e Mootools.
Uno degli esempi di sovraccarico di estensioni Joomla, è l'utilizzo di componenti per la gestione di eventi/calendari. Ho sviluppato recentemente un componente che, basandosi su 1 plugin e un'estensione della query di base di selezione degli articoli, consente al cliente di gestire un calendario di eventi in maniera nativa: ogni evento (nel suo caso, un'associazione culturale) è un semplice articolo di Joomla. Nessuna estensione invasiva che possa creare problemi di compatibilità o di aggiornamento, nessun rallentamento nelle prestazioni, tutto grazie alla flessibilità dell'ottimo framework di base. Vi illustro ora un frammento di questo componente, ovvero il plugin che consente l'inserimento delle date.
Bastano 4 files (che trovate in allegato al termine di questo articolo)
1) calendario.xml
E' il file di configurazione del plugin:
<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin" group="content" method="upgrade">
<name>Plugin calendario</name>
<author>Claudio Curci</author>
<creationDate>May 2015</creationDate>
<copyright>(C) 2004 - 2015 Infocurci di Claudio Curci. All rights reserved.</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<authorEmail>info@infocurci.com</authorEmail>
<authorUrl>www.infocurci.com</authorUrl>
<version>2.5.0</version>
<description>Plugin per l'aggiunta di unc campo data agli eventi</description>
<files>
<folder>calendario</folder>
<filename plugin="calendario">calendario.php</filename>
<filename>index.html</filename>
</files>
</extension>
2) calendario/calendario.xml
E' il file xml che aggiunge il nostro campo per la data:
<?xml version="1.0" encoding="utf-8"?>
<form>
<fields name="attribs">
<fieldset name="calendario" label="Gestione evento">
<field name="data_evento" type="calendar" label="Seleziona data evento" description="Seleziona data evento" format="%d-%m-%Y" />
</fieldset>
</fields>
</form>
3) calendario.php
E' il plugin vero e proprio, si limita a caricare il file xml del campo aggiuntivo (previo alcuni controlli per farlo caricare solo nel form degli articoli e solo in amministrazione):
<?php
class PlgContentCalendario extends JPlugin
{
public function __construct(& $subject, $config)
{
parent::__construct($subject, $config);
$this->loadLanguage();
}
public function onContentPrepareForm($form, $data)
{
$app = JFactory::getApplication();
if(!$app->isAdmin()){
return true;
}
if (!($form instanceof JForm))
{
$this->_subject->setError('JERROR_NOT_A_FORM');
return false;
}
if($form->getName() != 'com_content.article'){
return true;
}
JForm::addFormPath(dirname(__FILE__) . '/calendario');
$form->loadFile('calendario', false);
return true;
}
}
... Tutto qui! Questi semplici files (da zippare in un archivio chiamato calendario.zip e da caricare dal pannello di amministrazione/Extesions / extension manager, ricordatevi poi di attivare il plugin!) sono sufficienti per fare in modo che ciascun articolo del nostro Joomla contenga un campo "data_evento".
Per stampare la data dell'evento è sufficiente richiamare questa istruzione:
echo $this->item->params['data_evento'];
nella view dell'articolo (templates/NOME CARTELLA TEMPLATE/html/com_content/article/default.php, se il file non esiste createlo pure).
Scarica il plugin