Aggiungere una nuova entità ad un componente Joomla

Solo per piccole integrazioni….la progettazione NON si fa a mano!

Prima di cimentarvi nella creazione ex novo di un compomente per Joomla, vi consiglio di impacchettare tutto il necessario tramite un tool che ci aiuti a creare la gran parte delle entità base che andremo successivamente a personalizzare. Dal momento che si tratta di creare un numero elevato di file (oltre 100 per un componente di bassa/media complessità), è inutile e complicato cercare di creare tutto a mano.  Personalmente, ritengo che il componente Component Architect (download diretto del file di installazione)sia molto valido in tal senso (altre che gratuito).

Tuttavia, durante lo sviluppo può capitare di avere la necessità di aggiungere una nuova entità che non è stata pensata durante la fase di progettazione iniziale. Questo articolo ha l’obiettivo di tracciare i passi necessari a creare l’infrastruttura base per la nuova entità.

Mi serve una nuova entità….e ora come faccio?

Se avete la necessità di aggiungere una nuova entità ad un component Joomla, vi elenco la lista di step necessari a costruire la struttura base della nuova entità.

  1. Creare la tabella base della nuova entità. Nel mio caso:
    CREATE TABLE `avj3_gascomponent_serialdef` (
    `id` int(5) NOT NULL,
    `area` varchar(30) NOT NULL,
    `country` varchar(50) NOT NULL,
    `country_code` varchar(10) NOT NULL,
    `default_per_country` int(5) NOT NULL,
    `default_before_1946` int(5) NOT NULL,
    `default_after_1946` int(5) NOT NULL,
    `top_00_16` varchar(5) NOT NULL,
    `ranking_minus` float NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;ALTER TABLE `avj3_gascomponent_serialdef`
    ADD PRIMARY KEY (`id`);ALTER TABLE `avj3_gascomponent_serialdef`
    MODIFY `id` int(5) NOT NULL AUTO_INCREMENT;
    COMMIT;
  2. Creare il file dedicato alla nuova tabella al path “administrator/components/mio_component/tables”. Nel mio caso:
    //serialdefs.php
    
    defined('_JEXEC') or die;
    
    use Joomla\Registry\Registry;
    
    class GasComponentTableSerialdefs extends JTable
    {
    public function __construct(&$db)
    {
    
    parent::__construct('#__gascomponent_serialdefs', 'id', $db);
    
    $date = JFactory::getDate();
    $user = JFactory::getUser();
    }
    public function check()
    {
    return true;
    }
    
    public function bind($array, $ignore = array())
    {
    
    return parent::bind($array, $ignore);
    }
    
    public function store($update_nulls = false)
    {
    
    $date = JFactory::getDate();
    $user = JFactory::getUser();
    // Attempt to store the data.
    return parent::store($update_nulls);
    }
    }
    
    
  3. Creare i file (singolare e plurale) per l’entità da creare ed inserirli all’interno della cartella “administrator/components/mio_component/models”. Nel mio caso i file saranno “serialdef.php” e “serialdefs.php”. Scarica i file dei models
  4. Stesso discorso dicasi per la cartella “administrator/components/mio_component/controllers”.  Scarica i file dei controllers
  5. Occupiamoci adesso delle viste di amministrazione. E’ necessario creare le cartelle “serialdef” e “serialdefs” (comprensive di sottocartelle) all’interno del path “administrator/components/mio_component/views”. Scarica i file relativi alle viste
  6. Lavoriamo adesso sul form necessario a gestire gli elementi della nuova entità. Creiamo l’xml relativo al form all’interno della cartella “administrator/components/mio_component/models/forms”. Nel mio caso, il file sarà “serialdef.xml”. Scarica il file relativo al form
  7. All’interno della cartella “administrator/components/mio_component”, modificare il file controller.php, aggiungendo la sezione dedicata alla nuova entità. Scarica la sezione da aggiungere
  8. Sempre allo stesso livello, editare il file nomecomponent.xml ed aggiungere la sezione relativa alla nuova entità, in maniera che sia presente una voce di menù dedicata. Nel mio caso Scarica il testo da aggiungere
  9. A questo punto, è necessario aggiungere le voci di menù direttamente a DB. Rechiamoci quindi sulla tabella “%joomla_prefix%_menu” e ricerchiamo le voci relative al nostro component, cercando nella colonna “title” il nostro component. A questo punto, duplichiamo una delle voci esistenti e modifichiamo i link delle voci di menù in modo che puntino alla nuova entità. Nel mio caso:
    INSERT INTO `avj3_menu` (`id`, `menutype`, `title`, `alias`, `note`, `path`, `link`, `type`, `published`, `parent_id`, `level`, `component_id`, `checked_out`, `checked_out_time`, `browserNav`, `access`, `img`, `template_style_id`, `params`, `lft`, `rgt`, `home`, `language`, `client_id`) VALUES (NULL, 'main', 'COM_GASCOMPONENT_SERIALDEF', 'com-gascomponent-serialdefs', '', 'com-gascomponent/com-gascomponent-serialdefs', 'index.php?option=com_gascomponent&view=serialdefs', 'component', '1', '217', '2', '10028', '0', '0000-00-00 00:00:00', '0', '1', '../media/com_gascomponent/images/gascomponent-serialdefs.png', '0', '{}', '86', '87', '0', '', '1');
  10. Modifichiamo il file “nomecomponent.php” al path “administrator/components/mio_component/helper” in maniera da mostrare il link alla nuova entità nel menù relativo al nostro component (il menù a sinistra della pagina che appare quando entriamo in una voce del component).
     $active = $view_name == 'serialdefs'? true : false;
    JHtmlSidebar::addEntry(
    JText::_('COM_GASCOMPONENT_SERIALDEFS_SUBMENU'),
    'index.php?option=com_gascomponent&view=serialdefs',
    $view_name == 'serialdefs',
    $active
    ); 

That’s all…e adesso godetevi la nuova entità  😆

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

wp-puzzle.com logo