sabato 17 novembre 2012

Posizione moduli Joomla 2.5

Per definire una nuova posizione per i moduli di un sito web sviluppato con Joomla 2.5 dobbiamo eseguire le seguenti operazioni:

Inserire posizione nel file di definizione del template

Nel file xml di definizione del template, solitamente templateDetails.xml, sono dichiarate le posizioni modulo:

   <positions>
      <position>debug</position>
      <position>position-0</position>
      <position>position-1</position>
      <position>position-2</position>
      <position>...</position>
      <position>position-14</position>
   </positions>

I nomi delle posizioni non sono fissi ma possono variare da template a template. Inseriamo semplicemente un nuovo nome per la nostra posizione.

<position>myposition</position>


Inserire il codice php per la nuova posizione

Aprire il file sorgente del template selezionato (di solito index.php). Aggiungere queste righe nella posizione desiderata:

  <?php if ((bool)$this->countModules('myposition')) : ?>
    <div id="mydiv">
      <jdoc:include type="modules" name="myposition" style="xhtml" />    </div>
  <?php endif; ?>

Consiglio sempre di mettere la verifica che ci sia almeno un modulo pubblicato nella nostra posizione. In questo modo evitiamo di inserire un div vuoto se non abbiamo moduli in quella posizione.
La direttiva jdoc:include serve a definire il segnaposto che il motore di rendering di Joomla andrà a sostituire con i moduli associati alla posizione specifica (myposition in questo caso). Il parametro style serve ad indicare le varianti al codice html di generazione del modulo. Esso può assumere i seguenti valori standard: none, table, horz, xhtml, rounded e outline, definiti in templates/system/html/modules.php, oppure valori arbitrari definiti con un override nel file html/modules.php specifico del template.

Definiamo lo stile del modulo

Modifichiamo il foglio di stile associato al template, solitamente /templates/nome del template/css/position.css, inserendo le regole necessarie:

#mydiv {
  color: #000000;
  width: 90px;
}

Non resta che creare un nuovo modulo dal backend di Joomla ed assegnarlo alla posizione appena creata.
giovedì 23 agosto 2012

Call-time pass-by-reference is deprecated

Deprecated: Call-time pass-by-reference has been deprecated in filename.php

A partire dalla versione 5.3.0 di PHP è stato deprecato il passaggio per riferimento quando si chiama un metodo o una funzione.
l'utilizzo dell'operatore & nelle chiamate dei vostri metodi - esempio: metodo(&$a) - genera il messaggio di warning mostrato all'inizio.
In PHP 5 infatti gli oggetti vengono sempre passati per reference (per riferimento) e quindi in questo caso l'operatore & non serve. Per i tipi di dati primitivi basta indicarlo nella definizione del metodo.
Ricordo infatti che dalla versione 5.3.0 di PHP è stato deprecato il passaggio per riferimento nella chiamata di un metodo ma non certo il passaggio per riferimento. Vediamo un esempio:

function functionA(&$var) { 
    $var++; 

functionB($var) {
    $var++; 

$n = 1;

// corretto 
functionA($n); 

// deprecated 
// functionB(&$n);

echo $n; // output 2 

In entrambi i casi si vuole che la variabile $n venga incrementata dal metodo ma il secondo modo (commentato per non far attivare il warning) è scorretto.
Se stai utilizzando codice di terze parti ti può capitare che venga ancora utilizzato il passaggio per riferimento a tempo di chiamata. Per far funzionare la tua applicazione puoi intervenire sul php.ini attraverso la seguente direttiva

allow_call_time_pass_reference = on

Questa però deve essere presa come una soluzione temporanea in attesa della versione corretta.
giovedì 9 agosto 2012

Le Costanti di Joomla

Le costanti che Joomla ci mette a disposizione possono risultare molto utili quando scriviamo i nostri componenti
Di seguito riporto un elenco non esaustivo delle costanti che possiamo utilizzare nelle nostre estensioni di Joomla.


 Costanti legate al percorso

  • DS: il separatore di directory (/), garantisce la portabilità tra sistemi operativi diversi. Come ben sapete Windows utilizza il carattere \ a differenza di linux /
  • JPATH_ADMINISTRATOR: il percorso base dell’applicazione JAdministrator (/joomla/administrator) 
  • JPATH_BASE: il percorso base dell'applicazione corrente: assume valori diversi a seconda dell’applicazione in uso (JSite, JAdministrator, JInstallation o altre personalizzate) 
  • JPATH_COMPONENT: il percorso verso la directory del componente in uso (/joomla/components/com_in_uso) 
  • JPATH_COMPONENT_ADMINISTRATOR: il percorso verso la directory lato admin del componente in uso (/joomla/administrator/components/com_in_uso) 
  • JPATH_COMPONENT_SITE: il percorso verso la directory lato sito del componente in uso (/joomla/components/com_in_uso) 
  • JPATH_CONFIGURATION: il percorso della directory che contiene il file di configurazione (/joomla) 
  • JPATH_INSTALLATION: il percorso della applicazione di installazione JInstallation (/joomla/installation) 
  • JPATH_CACHE: il percorso della directory cache (/joomla/cache) 
  • JPATH_LIBRARIES: il percorso della cartella libraries (/joomla/libraries) 
  • JPATH_PLUGINS: il percorso della cartella plugins (/joomla/plugins) 
  • JPATH_ROOT: il percorso principale del framework Joomla (/joomla) 
  • JPATH_SITE: il percorso base dell'applicazione JSite (/joomla) 
  • JPATH_THEMES: il percorso della cartella templates (/joomla/templates)


 Costanti legate alla data

  • DATE_FORMAT_LC: mostra la data nella forma Giovedì, 09 Agosto 2012 
  • DATE_FORMAT_LC2: mostra la data e l’ora nella forma Giovedì, 09 Agosto 2012 10:00
  • DATE_FORMAT_LC3: mostra la data nella forma 09 Agosto 2012
  • DATE_FORMAT_LC4: mostra la data nella forma 09:08:12

Il mio consiglio è di utilizzare nelle operazioni di include e require le costanti messe a disposizione dal framework di Joomla in modo da garantire la corretta portabilità dei vostri componenti.
sabato 21 aprile 2012

Symfony 2: comandi del framework

Symfony 2 è un framework MVC (e non solo!) sviluppato in PHP. Riporto di seguito i comandi più utili per velocizzare lo sviluppo (per eseguire questi comandi spostarsi nella directory app della tua applicazione sviluppata con Symfony 2):

  • php console generate:bundle Genera la struttura delle directory di un nuovo bundle
  • php console gen:doctrine:entity Genera una nuova entità
  • php console doctrine:database:create Crea il database per la tua applicazione
  • php console doctrine:schema:update --dump-sql Genera le query per creare o aggiornare le tabelle corrispondenti alle entità di Symfony
  • php console doctrine:schema:update --force Aggiorna il database con le query ottenute con il comando precedente
  • php console doctrine:generate:crud Data una entity, permette di generare il controller e le relative viste  per effettuare le operazioni di creazione, lettura, aggiornamento e cancellazione di un elemento.
  • php console doctrine:generate:entities XXX Genera i metodi getter e setter per le entità del namespace indicato (XXX). Notiamo che è possibile specificare anche una singola entità.

Questi sono solo alcuni dei comandi che Symfony 2 mette a disposizione. Rimando alla guida ufficiale per una panoramica completa.
venerdì 23 marzo 2012

Joomla 2.5 Parametri del componente nel modello

Leggere i parametri di un componente dentro il modello è molto semplice con Joomla 2.5. Vediamo come fare:

Importare l'helper

Importiamo nel nostro modello la seguente classe:

jimport('joomla.application.component.helper');

Recuperiamo l'oggetto JRegistry

$params = JComponentHelper::getParams('nome_componente');

Dove nome_componente è il nome del vostro componente

Chiediamo il nostro parametro

$myParameter = $params->get('myParameter');
venerdì 6 gennaio 2012

Joomla: scegliere il gruppo utente durante la registrazione

Scegliere il proprio gruppo utente durante la registrazione ad un sito web può diventare una esigenza importante. Joomla dalla versione 1.6 in poi ha introdotto un'ottimo sistema per la gestione dei gruppi utenti e dei permessi, di cui abbiamo già parlato in joomla 1.6: permessi e utenti (ACL).
Ricordiamo però che bisogna assegnare manualmente ogni utente al relativo gruppo dal backend di Joomla. In alcuni casi questo può risultare scomodo. Infatti in alcuni siti web è l'utente stesso che deve decidere a quale gruppo appartenere e questo fin dalla fase di registrazione al sito web.

Plugin jgroup

Ho realizzato un semplice plugin che implementa questa funzionalità andando ad aggiungere un nuovo campo direttamente nel form di registrazione dove l'utente può selezionare il gruppo desiderato. Il plugin, attraverso un semplice parametro da configurare, permette di scegliere quali gruppi mostrare agli utenti semplicemente elencando gli id dei gruppi stessi.

plg_jgroup.zip