Infocurci - programmatore Php Roma
Infocurci - programmatore Php Roma
"faster than 98% of all tested websites" (tools.pingdom.com) - 100/100 Google PageSpeed Insights - Benvenuti :)

Cms / framework : Aggiungere un campo per le date in Joomla

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.

Cms / framework

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