sabato 22 ottobre 2011

VirtueMart: importare prodotti

Importare i prodotti su VirtueMart da un software gestionale oppure da un qualsiasi sistema esterno a VirtueMart può diventare un'operazione complicata, soprattutto se in presenza di un elevato numero di prodotti.

Come importare allora i propri prodotti su VirtueMart?


La risposta è semplice: Shop Migrator

VirtueMart importare prodotti con Shop Migrator

Shop Migrator importa i vostri prodotti su VirtueMart prendendo i dati dal vostro gestionale oppure da qualsiasi altra fonte scelta da voi.
Shop Migrator importa già i prodotti da importanti gestionali ma se avete l'esigenza di utilizzare database sviluppati da voi oppure fogli di excel etc... possiamo rapidamente realizzare il codice per interfacciarci alla vostra sorgente dati.

Se sei interessato contattami

N.B. Per migrazioni da gestionali attualmente non previsti il prezzo sarà da concordare
sabato 8 ottobre 2011

Le Breadcrumbs in Joomla 1.5

Le breadcrumbs (letteralmente briciole di pane) sono dei link presenti nell'interfaccia utente che permettono di risalire alle pagine web visitate in precedenza. Infatti le breadcrumbs tengono traccia delle varie pagine che l'utente ha visualizzato durante la navigazione nel sito (ricordate Pollicino che lasciava una scia di briciole di pane lungo il suo cammino per poterlo ripercorrere all'indietro?)

Le breadcrumbs in Joomla

Ecco un'esempio di breadcrumbs in Joomla:

breadcrumbs joomla

La freccia indica le nostre briciole di pane. L'utente può così facilmente capire dove si trova all'interno del sito e come ci è arrivato.
Joomla permette di realizzare questa funzione attraverso il suo modulo Breadcrumbs fornito in ogni installazione, ma può capitare che in qualche componente esterno non venga visualizzato correttamente il percorso. Vediamo come andare a rimediare:
Dobbiamo innanzitutto recuperare il pathway corrente andandolo a chiedere all'oggetto globale $mainframe:

$pathway = &$mainframe->getPathWay();

$pathway è un oggetto della classe JPathway
Per aggiungere il nome della pagina web al percorso corrente basta scrivere:

$pathway->addItem($title);

dove $title conterrà il nome della pagina corrente. Ecco come inserire anche il link della pagina:

$pathway->addItem($title, $link);

dove $link è la variabile che conterrà il vostro link. Se volete cancellare tutte le briciole di pane e ripartire dalla home basta scrivere:

$pathway->setPathway(array());

e poi inserirete con addItem i vostri nuovi titoli.
giovedì 21 luglio 2011

Joomla 1.7

Joomla 1.7, rilasciato il 19/07/2011 a sei mesi di distanza da Joomla 1.6, propone una interessante novità per gli sviluppatori: la separazione della Joomla Platform dal resto del CMS. La Joomla Platform non è altro che un PHP Application Framework che potrà essere utilizzato indipendentemente dal Content Manager e dal suo core: ciò significa che anche applicazioni di terze parti potranno basarsi su Joomla.
Nella versione Joomla 1.7 è stata inoltre aggiunta la possibilità di tradurre in lingue diverse le varie voci di menù senza dover ricorrere a estensioni esterne.
Joomla 1.7, al pari di Joomla 1.6, è una versione di passaggio verso Joomla 1.8 che diventerà la prossima versione a lungo termine ed andrà a sostituire definitivamente la vecchia e collaudata versione 1.5.
martedì 12 luglio 2011

Scrivere plugin per Joomla (II parte)

Nell'articolo Scrivere plugin per joomla (I parte) abbiamo visto i vari tipi di plugin presenti in Joomla e i relativi eventi che possono essere utilizzati in ogni classe di plugin. Oggi andremo a scrivere un plugin di prova che chiameremo MyString.

File necessari in un plugin

Il plugin in questione appartiene alla tipologia "content" e ci permetterà di inserire una stringa a piacere ogni volta che inseriremo il segnaposto {mystring} in un contenuto di Joomla.
Il numero di files minimi necessari per la creazione di un plugin sono due:
  1. mystring.php
  2. mystring.xml
Nel nostro caso ci limiteremo a questi due soli file. Ricordiamo che in caso di bisogno, possiamo creare una cartella (nel nostro esempio "mystring") in cui collocare altri file (php, immagini o javascript), specificando la cartella aggiuntiva nel file mystring.xml.

Il cuore del Plugin mystring.php

Nel file mystring.php inseriremo il codice che verrà eseguito all'evento "onPrepareContent", ossia prima che il contenuto di un articolo (o di un modulo) venga stampato. Questo ci permetterà di trovare eventuali occorrenze della stringa {mystring} e di sostiturila con del codice html.

<?php
// impediamo l'accesso diretto allo script
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.plugin.plugin' );

class plgContentMystring extends JPlugin
{
    /**
    * Costruttore
    * Chiamiamo il costruttore della classe genitrice per inizializzare il plugin
    */
    function plgContentMystring( &$subject, $params )
    {
        parent::__construct( $subject, $params );
    }

    /**
    * MyString prepare content method
    *
    * Questo metodo viene chiamato da Joomla prima che il contenuto viene visualizzato
    *
    * @param oggetto contenente l'articolo The article object. Note $article->text is also available
    * @param oggetto contenente i parametri del plugin
    * @limitstart il numero di pagina, a noi questo non interessa qui
    */
    function onPrepareContent( &$article, &$params, $limitstart )
    {
        global $mainframe;
        // Se il plugin è attivato e se viene trovata la stringa {mystring} all'interno del contenuto
        if ($this->params->get( 'enabled', 1 ) && strripos($article->text, "{mystring}") !== false) 
        {
            // Recupero il testo da inserire
            $about_text = $this->params->get('about_text', NULL);
            // Controllo HTML
            if(intval($this->params->get('htmlentities', NULL)) == 1) $about_text = htmlentities($about_text, ENT_QUOTES);
            // Recupero il tag selezionato
            $tag = $this->params->get('tag', 'blockquote');
            // Recupero la classe css
            $class = $this->params->get('css_class', NULL);
            // Se la classe è vuota non ho bisogno di inserire l'attributo class
            $output = ($class != '') ? ' class="'. $class .'"' : "" ;
            // Inserisco il testo dentro il tag con la relativa classe
            $about_text = '<' . $tag . $output .'>' . $about_text . '';
            // Rimuovo eventuale tag inseriti automaticamente dall'editor
            $article->text = str_replace("{mystring}", "{mystring}", $article->text);
            // Effettuo la sostituzione finale
            $article->text = str_replace("{mystring}", $about_text, $article->text);
            return true;
        }
        else return false;
    }
}
?>

Anche se i commenti nel codice sono abbastanza espliciti, è necessario fare delle precisazioni:
per convenzione il nome della classe deve essere: plg + Tipologia plugin (prima lettera maiuscola) + Nome plugin (prima lettera maiuscola), quindi nel nostro caso plgContentMystring.
La prima funzione della classe è il costruttore che per retrocompatibilità con php4 deve avere lo stesso nome della classe. Se avessimo voluto scrivere un plugin non retrocompatibile e quindi disegnato per php 5 (o superiore) avremmo potuto semplicemente utilizzare "__constructor"
In questo caso il costruttore è stato inserito solo come esempio teorico: noterete infatti che non esegue nessuna operazione e può essere cancellato.
Se avessimo voluto effettuare alcune operazioni anche nel caso la stringa {mystring} non fosse stata trovata avremmo potuto inserire le istruzioni nella funzione costruttore ed in quel caso il codice sarebbe stato eseguito ad ogni caricamento della pagina.
Avremmo potuto utilizzare anche un tipo di programmazione procedurale evitando di scrivere una classe, ma dato che gli sviluppatori del framework di Joomla raccomandano di seguire questo paradigma è bene seguire il loro consiglio. Inoltre giocare con questo tipo di codice ci abitua al design strutturato a oggetti di tutte le moderne applicazioni web (e non solo web).


Il file mystring.xml

Il file mystring.xml è necessario per l'installazione del plugin e per la gestione dei parametri.

<install group="content" type="plugin" version="1.5">
<name>My String</name>
<author>Autore</author>
<creationdate>....</creationdate>
<license>http://www.gnu.org/copyleft/gpl.html GNU/GPL</license>
<authoremail>...</authoremail>
<authorurl>....</authorurl>
<version>1</version>
<description>Visualizza dele informazioni ad ogni occorrenza della stringa {mystring}</description>
<files>
<filename plugin="mystring">mystring.php</filename>
</files>
</install>

sabato 11 giugno 2011

Scrivere plugin per Joomla (I parte)

E' necessario sviluppare un plugin per Joomla ogni volta che si vuole cambiare il comportamento di Joomla al verificarsi di un determinato evento: i plugin di Joomla infatti, sono parti di codice che vengono eseguite in un dato momento del caricamento della pagina o ad una determinata azione dell'utente.
La possibilità di eseguire del codice a seconda che certe condizioni si verifichino o meno, ci da la possibilità di estendere le funzionalità di Joomla con semplicità ed eleganza rendendo il comportamento del nostro sito personalizzabile.

Tipologie di plugin in Joomla

Joomla possiede di default un certo numero di tipologie di plugin definite core.
Queste tipologie sono presenti nella cartella /plugins/ di ogni installazione Joomla e sono:

  1. authentication: per estendere l'autenticazione
  2. content: per effettuare controlli o inserire funzionalità nei contenuti
  3. editors: per realizzare editor
  4. editors-xtd: per le estensioni degli editor
  5. search: per estendere le funzionalità di ricerca
  6. system: per far eseguire codice in vari momenti del caricamento del framework
  7. user: per estendere le funzionalità degli utenti
  8. xmlrpc: per estendere l'interattività con altri servizi web (ad es: Desktop remoti)

Ogni tipologia di plugin serve quindi a svolgere delle funzionalità diverse: per permettere ciò Joomla mette a disposizione per ogni tipo di plugin una serie di eventi. Gli eventi non sono altro che diversi momenti (appunto eventi) che si susseguono nel caricamento del framework di Joomla. È possibile quindi eseguire del codice in ognuno degli eventi che Joomla mette a disposizione per una determinata tipologia di plugin.
Prima di vedere i tipi di eventi a disposizione, osserviamo che qualora se ne presentasse la necessità è possibile creare una nuova tipologia di plugin. Solitamente questo accade quando si sviluppa un componente che ha degli eventi personalizzati e che ha bisogno di effettuare certe operazioni all'esecuzione di questi eventi.

Eventi per ogni tipo di plugin

Authentication:
  1. onAuthenticate
Content:
  1. onPrepareContent
  2. onAfterDisplayTitle
  3. onBeforeDisplayContent
  4. onBeforeContentSave (aggiunto nella versione 1.5.4)
  5. onAfterContentSave (aggiunto nella versione 1.5.4)
Editors:
  1. onInit
  2. onGetContent
  3. onSetContent
  4. onSave
  5. onDisplay
  6. onGetInsertMethod
Editors XTD (Extended):
  1. onDisplay
Search:
  1. onSearch
  2. onSearchAreas
System:
  1. onAfterInitialise
  2. onAfterRoute
  3. onAfterDispatch
  4. onAfterRender
User:
  1. onLoginUser
  2. onLoginFailure
  3. onLogoutUser
  4. onLogoutFailure
  5. onBeforeStoreUser
  6. onAfterStoreUser
  7. onBeforeDeleteUser
  8. onAfterDeleteUser
XML-RPC:
  1. onGetWebServices

Nel prossimo articolo vedremo il codice di esempio di un plugin.
sabato 14 maggio 2011

Il pattern MVC

Il pattern MVC è un architectural pattern il cui scopo è quello di separare la rappresentazione del modello di dominio (model) dall'interfaccia utente (view) e dal controllo dell'interazione uomo-macchina (controller). Il pattern MVC è utilizzato ad esempio da Joomla e da molti altri framework come Ruby on Rails, Apache Struts etc...

Il pattern MVC

Il pattern MVC è basato sulla suddivisione dei compiti fra i componenti che interpretano i tre ruoli principali:

  1. il model fornisce i metodi per accedere ai dati utili dell'applicazione e agli algoritmi del programma.
  2. la view visualizza i dati elaborati dal model e li mostra agli utenti.
  3. il controller riceve i comandi dell'utente (in genere attraverso la view) e li attua modificando lo stato degli altri due componenti: in particolare recupera i dati dal model e li restituisce alla view stessa.

Questo schema, fra l'altro, implica anche la tradizionale separazione fra la logica applicativa (in questo contesto spesso chiamata "logica di business"), a carico del model, e l'interfaccia utente a carico della view.
domenica 24 aprile 2011

Promozione siti web

promozione siti web
Nuova promozione siti web valida per tutto l'anno: al prezzo di

300 € (tutto incluso)

offriamo siti web completi sviluppati con Joomla

joomla promozione siti web


La nostra promozione comprende per un sito web:
  1. registrazione dominio e hosting per un anno 
  2. installazione di Joomla e configurazione iniziale
  3. creazione di un template personalizzato
  4. home page più pagina dei contatti
  5. pagina descrizione (dell'azienda, associazione, persona ...)

Se sei interessato contattami per il tuo nuovo sito web

venerdì 22 aprile 2011

Joomla 1.6: creare un modulo (III parte)

Nel post joomla 1.6: creare un modulo (II parte) abbiamo analizzato il codice necessario per creare un modulo in Joomla 1.6: in quest'ultimo articolo vedremo come leggere i parametri dei moduli in modo da rendere più interessanti le nostre applicazioni.

Inserire i parametri nel file xml del modulo

Per prima cosa dobbiamo dire a Joomla quali parametri vogliamo usare nel nostro modulo: prendiamo il nostro mod_ciao_mondo.xml e aggiungiamo subito dopo il tag <files> i nostri parametri:

<config> 
  <fields name="params">
    <fieldset name="basic">
      <field
        name="par1"
        type="text"
        default="ciao mondo"
        label="Scrivi il tuo saluto"
        description="Questo è il saluto che comparirà nel modulo" />
      <field
        name="par2"
        type="radio"
        default="1"
        label="Mostra il saluto"
        description="Decidi se mostrare il saluto oppure no">
        <option value="1">JSHOW</option>
        <option value="0">JHIDE</option>
      </field>
    </fieldset>
  </fields> 

</config>

In pratica abbiamo due parametri: uno conterrà il nostro saluto (par1) e l'altro ci permetterà di disabilitare oppure no il nostro messaggio attraverso una radio button (par2). 
Joomla mette automaticamente a disposizione nell'entry point del modulo la variabile $params che conterrà i valori che l'utente ha salvato nel backend del sito. Come forse avrete notato, la variabile $params veniva passata come argomento al metodo getSaluto dell'helper proprio per poter utilizzare i parametri del modulo.

Passare i parametri all'helper del modulo

<?php
class modCiaoMondoHelper
{
    public static function getSaluto(&$params)
    {
        if ($params->get("par2") == 1)
        {
            return $params->get("par1");
        }
        return false;
    }
}
?>


Il codice è molto semplice: se il secondo parametro è uguale a 1 (equivale a selezionare 'Mostra' nella radio button) viene usato come saluto il valore del primo parametro.

Modifichiamo il template

<?php
defined('_JEXEC') or die;
if ($saluto)
{ 

    echo $saluto;
}
?>


Dopo aver generato lo zip dei file siamo pronti ad utilizzare il modulo nel nostro sito web.
sabato 16 aprile 2011

Joomla 1.6: creare un modulo (II parte)

Nell'articolo joomla 1.6: creare un modulo (I parte) abbiamo indicato quali sono i file necessari per creare un modulo in Joomla 1.6 e dove devono essere posizionati. In questo secondo articolo vedremo il codice necessario per realizzare il nostro modulo "Ciao mondo".

Punto di entrata del modulo

In mod_ciao_mondo.php si trova l'entry point del modulo ciao_mondo (il nome del file deve essere lo stesso della cartella che lo contiene):

<?php
// impediamo l'accesso diretto alla pagina
defined('_JEXEC') or die;
// richiesta del file helper.php
require_once dirname(__FILE__).'/helper.php';
// chiamata al metodo statico getSaluto presente nell'helper
$saluto = modCiaoMondoHelper::getSaluto($params);
require JModuleHelper::getLayoutPath('mod_ciao_mondo', $params->get('layout', 'default'));
?>

Il codice è molto semplice ed i commenti dovrebbero essere sufficienti per capirne il funzionamento.

Il file helper del modulo

Nel nostro esempio il file helper.php sarà molto semplice:

<?php
// classe del modulo
class modCiaoMondoHelper
{
    // metodo statico
    public static function getSaluto(&$params)
    {
        // valore di ritorno
        return 'Ciao Mondo!';
    }
}
?>

Osserviamo soltanto che il nome della classe è composto da mod + CiaoMondo (nome del modulo senza underscore) + Helper.

Template del Modulo

Il file del template "tmpl/default.php" si limita semplicemente a visualizzare il contenuto della variabile $saluto:

<?php
defined('_JEXEC') or die;
echo $saluto;
?>

Notiamo come la variabile $saluto creata nello script mod_ciao_mondo.php sia automaticamente presente nel template grazie al framework di Joomla.

File xml del modulo

Infine vediamo il file mod_ciao_mondo.xml: esso servirà a Joomla per poter caricare correttamente il modulo:

<extension client="site" method="upgrade" type="module" version="1.6.2">
    <name>Ciao Mondo!</name>
    <author>Paolo Mosca</author>
    <version>1.6.2</version>
    <description>Modulo Ciao Mondo</description>
    <files>
        <filename module="mod_ciao_mondo">mod_ciao_mondo.php</filename>
        <filename>mod_ciao_mondo.xml</filename>
        <filename>index.html</filename>
        <filename>helper.php</filename>
        <filename>tmpl/default.php</filename>
        <filename>tmpl/index.html</filename>
    </files>
</extension>

Per poter utilizzare questo semplice modulo basterà creare uno zip (mod_ciao_mondo.zip) di tutti i file visti nei due tutorial e utilizzare la procedura di installazione di Joomla.
giovedì 7 aprile 2011

Joomla 1.6: creare un modulo (I parte)

Joomla 1.6 permette di creare un modulo personalizzato in maniera molto semplice sfruttando le caratteristiche del framework stesso: un modulo di Joomla 1.6 è infatti essenzialmente composto da un insieme di file posizionati in determinate directory di Joomla.

File che compongono un modulo di Joomla 1.6

Come esempio classico creiamo il modulo "ciao mondo"
  1. andate nella directory “modules” di Joomla e create una cartella chiamata “mod_ciao_mondo”
  2. entrate nella directory “mod_ciao_mondo”
  3. create un file denominato “mod_ciao_mondo.php” (il nome deve essere uguale a quello scelto nel punto numero 1)
  4. create un secondo file, denominato “mod_ciao_mondo.xml”
  5. create un file denominato “helper.php”
  6. create la cartella tmpl
  7. create un file di template “tmpl/default.php”
Per motivi di sicurezza, ricordatevi inoltre di creare in ogni nuova cartella il file index.html con il seguente contenuto: "<html><body></body></html>".

In conclusione i file principali di ogni modulo di Joomla sono quindi contenuti nella cartella "mod_nome_modulo" e sono ad esempio:
  1. “mod_ciao_mondo.php” (rappresenta l'entry point)
  2. “helper.php”
  3. “tmpl/default.php” (il file del template)
Nel prossimo articolo joomla 1.6: creare un modulo (II parte) andremo ad analizzare in dettaglio il codice di cui è composto ogni singolo file.
martedì 22 marzo 2011

Joomla 1.6: le categorie

Dopo aver visto il nuovo sistema di gestione dei permessi e degli utenti di Joomla 1.6 introduciamo un'altra importante novità: la gestione delle categorie. Mentre in Joomla 1.5 eravamo obbligati a legare le categorie alle sezioni non potendo annidare una categoria dentro l'altra, in Joomla 1.6 questa limitazione è stata tolta: esistono solo le categorie (non troverete più le sezioni) ed inoltre possiamo formare una gerarchia ad albero profonda quanto vogliamo assegnando ad ogni categoria il proprio padre. Vediamo con un esempio come è possibile nidificare le categorie in Joomla 1.6: andiamo in Contenuti -> Gestione Categorie -> Nuovo

Joomla 1.6 categorie

Come possiamo vedere per ogni categoria abbiamo la possibilità di specificare la categoria padre (Parent): in questa maniera riusciamo a creare la nostra gerarchia ad albero.
Gli articoli che andremo a scrivere verrano legati alla categoria rendendo la gestione dei contenuti più semplice e completa senza dover essere obbligati per forza a creare le sezioni.
lunedì 14 marzo 2011

PHP DEBUG con Eclipse (PDT)

Per chi sviluppa in PHP è semplice effettuare il DEBUG delle proprie applicazioni utilizzando Eclipse: in particolare Eclipse PHP (PDT) è l'IDE che fa per voi. Vediamo come dotarsi velocemente di un ambiente professionale per creare le vostre applicazioni in PHP utilizzando un PC che abbia come sistema operativo Windows 7:

Installiamo XAMPP

Per prima cosa ci dobbiamo dotare di un web server, dell'interprete PHP e di tutto il necessario per sviluppare applicazioni web dinamiche: a questo provvede XAMPP, che ci fa risparmiare un bel pò di lavoro. Chiaramente questa soluzione deve essere utilizzata solo per gli ambienti di sviluppo (mai in produzione).
Un problema che può sorgere in questa fase riguarda la porta utilizzata da Apache. Di default è la 80 ma ci potrebbero essere altri programmi che la utilizzano (ad esempio Skype) rendendo impossibile l'avvio del web server. Se così fosse fermiamo XAMPP e apriamo con un editor di testo il file:
[Cartella dove è stato installato XAMPP]/apache/conf/httpd.conf
Cerchiamo la proprietà Listen e mettiamo un numero di porta diverso (ad esempio 81). Ricordiamoci di sostituire il numero della porta anche sulla proprietà ServerName.

Attivare XDEBUG

Per effettuare il DEBUG delle nostre applicazioni PHP utilizzeremo la libreria Xdebug. Andate a verificare che nel seguente percorso:
[Cartella dove è stato installato XAMPP]/php/ext/
sia presente il file php_xdebug.dll. Se non trovate questa dll andate nella pagina di download di Xdebug e scegliete il link corretto a seconda della vostra versione di PHP (per saperlo visualizzate il phpinfo). Una volta completato il download mettete la dll che avete scaricato nel percorso in questione.
Adesso apriamo con un editor di testo il seguente file:
[Cartella dove è stato installato XAMPP]/php/php.ini
Per prima cosa cerchiamo la proprietà zend_extension e rimuoviamo il punto e virgola (commento). Controlliamo poi che il percorso specificato punti proprio alla dll di cui parlavo sopra. Togliamo il commento alle seguenti proprietà e impostiamole come segue:

xdebug.remote_enable=On
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"

Riavviamo XAMPP e Apache e verifichiamo dal phpinfo() che Xdebug sia correttamente abilitato.

Eclipse e il DEBUG delle applicazioni in PHP

Scarichiamo la versione di Eclipse ottimizzata per PHP: PDT. Facciamo il download del file All-In-One Windows 32-bit. Dopo aver lanciato Eclipse andiamo in window -> preferences -> PHP -> PHP Executables. Facciamo add (aggiungi)

php debug eclipse pdt

Nel name mettiamo PHP, nell'executable path mettiamo il percorso del file php-cgi.exe presente dentro la cartella php che si trova nella cartella di installazione di XAMPP. Lo stesso discorso per il file php.ini. Come debugger scegliamo XDebug. Vedi sopra per un esempio.
Salviamo e andiamo infine in window -> preferences -> PHP -> Debug e impostiamo i valori come nella immagine sottostante dove andiamo a impostare il debugger e l'eseguibile PHP.

php debug eclipse

A questo punto possiamo effettuare il Debug delle nostre applicazioni PHP utilizzando eclipse.
lunedì 7 marzo 2011

jQuery Ajax: utilizzare il framework jQuery per le richieste Ajax

jQuery consente di effettuare richieste Ajax in maniera molto semplice: vediamo con un esempio come sfruttare la potenza del framework jQuery per effettuare chiamate Ajax:

Scarichiamo la libreria jQuery

Andiamo nel sito ufficiale del porgetto e facciamo il download della versione Minified. A questo punto includiamola nel nostro script lato client

<script type="text/javascript" src="jquery-1.5.1.min.js"></script>

Prepariamo lo script lato server (esempio in PHP)

<?php

  (int)$id = $_GET["id"];
  if ($id==1) echo "Rosso";
  if ($id==2) echo "Giallo";
  if ($id==3) echo "Verde";
  if ($id!=1 && $id!=2 && $id!=3) 
    echo "id non valido!";

?>

Salviamo il file con il nome test_ajax.php

jQuery Ajax

Nel nostro script lato client avremo:

<script type="text/javascript">
  $.ajax({
    type: "GET",
    url: "test_ajax.php",
    data: "id=1",
    success: function(response){
      $("#output").html(response);
    }
  });
</script>

Il valore dell'id passato allo script PHP si trova in data. La risposta testuale fornita dal file PHP è contenuta nel parametro response e la visualizziamo nel div output tramite la riga:

$("#output").html(response);

Nel nostro esempio otteremo ovviamente come risposta "Rosso". Modificando il valore dell'id in data avremo le altre risposte.
Chiaramente sarebbe più utile passare il valore dell'id tramite un form o altro ma per far capire il funzionamento di base questo non era necessario. Quello che risulta evidente è la semplicità con cui si possono effettuare chiamate ajax attraverso jQuery e le potenzialità di questo framework.
venerdì 4 marzo 2011

Joomla 1.6: gestione permessi

Nel precedente post Joomla 1.6: permessi e utenti abbiamo introdotto la gestione dei permessi (ACL) presenti nel nuovo core di Joomla 1.6 rimandando ad un successivo articolo per un esempio concreto. Supponiamo quindi di avere la necessità di applicare dei permessi diversi a seconda del tipo di utente che effettua il login al nostro sito web.

Esempio di gestione dei permessi

Nel nostro sito aziendale vogliamo che ci siano tre tipi di utenti:
  1. Utente normale
  2. Cliente
  3. Cliente affezionato
In pratica vogliamo che i clienti, oltre ai contenuti degli utenti normali, possano visualizzare degli articoli particolari; inoltre vogliamo premiare i clienti affezionati (quelli che non ci lasceranno mai) con dei contenuti pensati esclusivamente per loro. Chiaramente i clienti affezionati potranno vedere anche quello che vedono gli utenti normali e i clienti.
Con la gestione dei permessi di Joomla 1.6 è molto semplice soddisfare questa esigenza. Vediamo come:

Creare i gruppi

Per creare un gruppo, accediamo nel back end del nostro sito in Joomla 1.6. Nel menù superiore andiamo su Utenti - Aggiungi nuovo gruppo.
  1. Nel campo Titolo Gruppo inseriamo Gruppo Clienti
  2. Nel campo Gruppo Principale scegliamo Registered. I gruppi Registered e Clienti avranno le stesse autorizzazioni (cioè, potranno accedere al front end del sito). I Clienti saranno un sotto gruppo degli utenti Registered.
  3. Clicchiamo su Salva e Nuovo in alto a destra per salvare il gruppo Clienti e creare un nuovo gruppo.
  4. Inseriamo Gruppo Clienti affezionati nel campo Titolo Gruppo.
  5. Nel campo Gruppo Principale scegliamo Registered. In questo modo Clienti e Clienti affezionati avranno lo stesso livello di accesso.
  6. Clicchiamo su Salva e Chiudi per tornare nella schermata User Manager: Gruppi.
Notiamo che il gruppo public è già esistente di default.

Assegnare i permessi di base

I gruppi Clienti e Clienti affezionati, hanno ereditato i permessi di base del Gruppo padre. Il gruppo Registered ha infatti impostato per default l'autorizzazione per accedere al front end del sito, quindi, in questo caso, non abbiamo bisogno di assegnare altri permessi ai gruppi.
Notiamo che stiamo parlando solo dei contenuti che possono o non possono essere visti e non abbiamo parlato di modifica, creazione e gestione dei contenuti: per questo motivo abbiamo scelto come gruppo padre il gruppo Registered che ha come permesso solo il Site Login mentre tutti gli altri sono disabilitati.

Creare utenti e assegnarli ai gruppi

Ora che abbiamo creato i gruppi e assegnato i permessi di base andiamo su Utenti -> Aggiungi nuovo utente e cominciamo ad inserire i dati dei nostri clienti. Scegliamo ovviamente come gruppo quello relativo ai clienti. Ripetiamo la stessa operazione per i Clienti affezionati.

Creare i livelli di accesso

Ora che abbiamo gli utenti, i permessi di base e i gruppi, non ci resta che creare due livelli di accesso, uno per i clienti e uno per i clienti affezionati.
Andiamo su Utenti - Aggiungi Nuovo Livello di Accesso
Nel campo Titolo del Livello, inseriamo Accesso Clienti affezionati. Selezioniamo la casella vicino al Gruppo Clienti affezionati. In questo modo solo il gruppo selezionato potrà vedere i contenuti del Gruppo Clienti affezionati.
Clicchiamo su Salva e Nuovo, e inseriamo Accesso Clienti come Titolo Livello e selezioniamo le caselle Gruppo Clienti e Gruppo Clienti affezionati. Ciò consentirà ai Clienti affezionati di visualizzare entrambi i contenuti.
Ricordiamo che quando creiamo un nuovo livello di accesso specifichiamo quali gruppi possono vedere i  contenuti associati a quel livello.

Inserire i contenuti

Creiamo le categorie una per i "clienti" ed un'altra per i "clienti affezionati" impostando i relativi livelli di accesso.
Prepariamo un articolo per i clienti affezionati nella categoria clienti affezionati. Per creare un nuovo articolo andiamo su Contenuto - Nuovo Articolo.
Compiliamo i campi in questo modo:
  • Titolo: Questo articolo è per i Clienti affezionati
  • Categoria: Categoria clienti affezionati
  • Stato: Pubblicato
  • Accesso: Accesso clienti affezionati
  • Testo Articolo: inserire un testo fittizio.
Clicchiamo su Salva e Nuovo e ripetiamo l'operazione per i clienti:
  • Titolo: Questo articolo è per i Clienti
  • Categoria: Categoria clienti
  • Stato: Pubblicato
  • Accesso: Accesso clienti
  • Testo Articolo: inserire un testo fittizio.
Clicchiamo su Salva e Chiudi appena finito.
Organizziamo le voci di menù. Nel menù principale (Menù - Menù Principale), aggiungiamo due voci.
Per creare il collegamento, clicchiamo su Nuovo (in alto a destra), scegliamo Lista Categorie come tipo di menù e inseriamo le informazioni:
  • Titolo: Informazioni Clienti affezionati
  • Tipo di menù: clicchiamo su Selezione, quindi Lista Categoria
  • Stato: Pubblicato
  • Accesso: Accesso clienti affezionati
  • Scegli una Categoria: Categoria clienti affezionati
Clicchiamo su Salva e Nuovo e ripetiamo il procedimento per i clienti:
  • Titolo: Informazioni Clienti
  • Tipo di menù: clicchiamo su Selezione, quindi Lista Categoria
  • Accesso: Accesso clienti
  • Scegli una Categoria: Categoria clienti
Clicchiamo su Salva e Chiudi. Adesso possiamo testare il nostro sistema andando ad usare le username e password inserite quando abbiamo creato i nostri utenti. Se entriamo come cliente affezionato dovremmo vedere due collegamenti nel menù principale, "Informazioni Clienti" e "Informazioni Clienti affezionati" mentre se entriamo con un username associato al gruppo clienti dovremmo vedere solo il collegamento "Informazioni Clienti".
lunedì 28 febbraio 2011

Joomla 1.6: permessi e utenti (ACL)

Fra le novità più importanti di Joomla 1.6 abbiamo la nuova gestione dei permessi e degli utenti, in gergo tecnico ACL (Access Control Levels); in pratica in Joomla è possibile dare permessi per leggere, creare, modificare e cancellare determinate pagine a utenti o gruppi di utenti, a seconda del ruolo che essi hanno all'interno del sito web.

ACL in Joomla 1.6: Panoramica

Joomla 1.6: permessi e utenti ACL

Utenti

Lo User rappresenta evidentemente l'utente del sito web. Notiamo che un utente non deve essere necessariamente registrato in quanto potrebbe essere un utente pubblico (semplice navigatore). Ogni utente può essere assegnato a uno o più gruppi.

Permessi di base

I permessi di base rappresentano le operazioni che possono essere effettuate e sono assegnati al gruppo, non ai singoli utenti. (Se volete assegnarli a un singolo utente, dovrete creare un gruppo per quel determinato utente).
Le autorizzazioni di base includono:
  • Login al sito: la possibilità di accedere al front end del sito.
  • Admin login: la possibilità di accedere al back end del sito.
  • Admin: privilegi amministrativi, come la possibilità di cambiare la configurazione globale.
  • Gestione: la possibilità di cambiare le impostazioni delle estensioni.
  • Creare: la possibilità di creare un nuovo contenuto.
  • Cancellare: la possibilità di eliminare un contenuto.
  • Modifica: la possibilità di modificare tutti i contenuti esistenti.
  • Modifica stato: la possibilità di cambiare stato tra pubblicato, non pubblicato, cestino.
Le autorizzazioni di base si impostano da Configurazione Globale cliccando nella tabella Permessi.

Gruppi

Un gruppo è un insieme di utenti che hanno gli stessi permessi. Prendendo per esempio i gruppi di Joomla 1.5, un utente del gruppo publisher si può loggare nel front end del sito, creare nuovi articoli, modificare quelli già esistenti, renderli pubblici o annullare la pubblicazione. Tutti gli utenti del gruppo publisher hanno gli stessi permessi.
In Joomla 1.6, un utente può essere assegnato a più gruppi, per esempio nel gruppo publisher e nel gruppo administrator.
Ogni gruppo può avere dei sotto-gruppi che a loro volta si possono suddividere ancora andando a creare una gerarchia ad albero ben precisa. In pratica ogni gruppo ha il suo padre ad eccezione del Gruppo Public che è il livello più generale da cui discendono tutti gli altri.
E' possibile assegnare le autorizzazioni di base ai gruppi creati. Osserviamo che le autorizzazioni di base vengono ereditate tra i gruppi nel senso che i figli avranno di default i permessi dei gruppi padri. Chiaramente sarà possibile modificare il comportamento andando in Configurazione Globale -> Permessi. Notiamo però che non potrete ad esempio attivare un permesso che è stato espressamente disabilitato nel gruppo padre perchè questo andrebbe contro la relazione di dipendenza creata.
Un utente non registrato sul sito viene considerato appartenente al gruppo Public che avrà i permessi più leggeri.
Il gruppo Public e il gruppo Registered non possono essere eliminati al contrario di tutti gli altri gruppi. (Comunque, vi consiglio di tenerli, perchè danno un buon modello su come funziona l'ereditarietà delle autorizzazioni).

Livelli d'accesso

I livelli d'accesso sono relativi a che cosa uno o più gruppi di utenti possono vedere, nel front end del sito web. In sostanza, sono le autorizzazioni di lettura sul front end del sito.
Storicamente ci sono stati tre livelli di accesso: public (tutti possono vedere i contenuti), registered (si deve accedere sul sito per vedere i contenuti), special (bisogna avere un livello author o superiore per vedere il contenuto).
Questi livelli di accesso sono ancora presenti in Joomla 1.6 come default, ma si possono creare dei livelli d'accesso personalizzati.
I livelli di accesso non ereditano i permessi. Se si imposta un articolo visibile solo dai publishers, anche i super admin non potranno vederlo. (Comunque, con i permessi di super admin, si potrà modificare l'articolo dal back end).

In un prossimo articolo cercheremo di mettere in pratica questi concetti in un esempio reale.
lunedì 21 febbraio 2011

Factory Method Design Pattern C#

Riprendiamo oggi il nostro viaggio tra i Design Pattern: dopo aver visto l'Abstract Factory introduciamo ora il Factory Method che può essere visto come un caso più semplice. Ecco un diagramma UML di esempio:

Factory Method

Struttura di un Factory Method
  • Product: definisce l'interfaccia dell'oggetto creato dal factory method.
  • ProductOne e ProductTwo: implementano l'interfaccia di Product rappresentando i casi concreti.
  • Framework: dichiara il factory method (in questo caso makeProduct) che restituisce un oggetto di tipo Product a prescindere dal tipo concreto di prodotto; il Framework può in alcuni casi definire un'implementazione del factory method che ritorna un oggetto di default.
  • ApplicationOne: ridefinisce il factory method per restituire un'istanza di ProductOne
  • ApplicationTwo: ridefinisce il factory method per restituire un'istanza di ProductTwo

La classe Framework si affida alle sue sottoclassi per quanto riguarda la definizione del factory method, cosicché esso ritorni un'istanza appropriata del Product.
Il codice client tratta solo con l'interfaccia e con nessuna classe concreta.
giovedì 20 gennaio 2011

Joomla SEO: il tag H1 per il titolo degli articoli

Nel post Joomla SEO tutorial avevo accennato all'importanza del tag H1 in ambito SEO; purtroppo sono pochi i template di Joomla (versione 1.5) che utilizzano il tag H1 per il titolo degli articoli e questo non ci aiuta a migliorare l'indicizzazione delle nostre pagine.

Fortunatamente è molto semplice modificare il template che stiamo usando in modo da soddisfare questa nostra esigenza. Basta semplicemente sovrascrivere (override) il rendering html del componente degli articoli. Se apriamo il seguente file:

  - components/com_content/views/article/tmpl/default.php 

possiamo analizzare come il core di Joomla costruisce l'output per la visualizzazione degli articoli: dentro questo script non ci sono tag H1. Nativamente Joomla per il titolo dell'articolo non utilizza il tag in questione. Ci dobbiamo quindi affidare al template (non modificate mai i file del core di Joomla). Andiamo nella seguente cartella:

 - templates/mio_template/html

dove ovviamente mio_template è il nome del template che stiamo usando. Se non sono presenti, aggiungete la cartella com_content e al suo interno la cartella article ottenendo la seguente struttura

 - templates/mio_template/html/com_content/article/

In questo percorso andremo ora a copiare il file precedente (quello che vi ho detto di non toccare). In questo modo possiamo modificare secondo le nostre esigenze SEO il titolo degli articoli.
Cerchiamo la riga numero 15:

<td class="contentheading<?php echo $this->escape($this->params->get('pageclass_sfx')); ?>" width="100%">

aggiungiamo subito dopo la seguente riga:

<h1 class="contentheading<?php echo $this->escape($this->params->get('pageclass_sfx')); ?>" > 

e prima della riga 22:

</td>

aggiungiamo il relativo il tag di chiusura

</h1>

Probabilmente vedrete che il titolo degli articoli non avrà più lo stesso stile: dovrete quindi semplicemente andare ad agire sul CSS del template per ridurre l'H1 dei titoli, usando la sintassi:

h1.contentheading { ...
...
}

Conclusione

Abbiamo visto come dare la giusta importanza in ambito SEO al titolo dell'articolo racchiudendolo nel tag H1. In questa maniera avremo corretto una piccola lacuna di Joomla e reso i nostri contenuti più fruibili dalla rete.
lunedì 17 gennaio 2011

Joomla SEO tutorial

Joomla possiede delle opzioni SEO che permettono di modificare le URL che vengono utilizzate dal framework: Joomla infatti utilizza nativamente delle URL poco comprensibili per i crawler dei motori di ricerca e questo può essere penalizzante in ottica SEO. Se andiamo nel pannello di amministrazione di Joomla in particolare in Configurazione -> Sito troviamo le seguenti opzioni:

Joomla SEO tutorial

Friendly URL

Il compito maggiore di questa impostazione è quello di rendere appetibili ai motori di ricerca le nostre URL (search engine friendly URL). Questa opzione, se attivata, permette di convertire URL dinamiche in statiche (utilizzando gli alias delle voci di menu, articoli, etc).
Supponiamo di avere il seguente indirizzo:
www.miosito.it/index.php?option_com=virtuemart
Se l'alias per questo link è "catalogo-prodotti" attivando la prima impostazione SEO la nostra URL diventerà:
www.miosito.it/index.php/catalogo-prodotti
che, come vediamo, riprende appunto l'alias della voce di menu.

mod_rewrite

Il mod_rewrite è un modulo di Apache che permette di sovrascrivere le URL. Se correttamente installato sul nostro web server (non usate IIS) possiamo abilitare questa seconda opzione. A questo punto dobbiamo rinominare il file htaccess.txt di Joomla in .htaccess senza nulla davanti (attenzione a non rinominarlo in htaccess.htaccess). la nostra URL da:
www.miosito.it/index.php/catalogo-prodotti
diventerà
www.miosito.it/catalogo-prodotti
ovvero verrà eliminata la stringa "index.php" dalla nostra URL. Notiamo che
  • prima il motore di ricerca trova parole significative, maggiore sarà il valore che gli viene dato
  • la stringa "index.php" non descrive i contenuti del sito
  • il file .htaccess contiene alcune importanti impostazioni per aumentare la sicurezza del nostro sito, per cui attivare questa opzioni non serve solamente al SEO

Il suffisso alle URL

L'ultima opzione serve per l'aggiunta del suffisso alle URL, che trasforma:
www.miosito.it/catalogo-prodotti
nel seguente indirizzo
www.miosito.it/catalogo-prodotti.html

Conclusioni

Il mio consiglio è quello di utilizzare sempre le prime due impostazioni: mentre per l'ultima (il suffisso alle URL) vi sono diverse scuole di pensiero, che però riconoscono spesso poca importanza a questo parametro. Queste opzioni SEO sono un ottimo punto di partenza per un sito in Joomla ma ovviamente non garantiscono da sole le prime posizioni della SERP.
Bisogna ricordarsi di:
  1. Scrivere contenuti interessanti e utili
  2. inserire le parole chiavi nel tag title
  3. inserire le keywords nei tag H1 e H2 (Usare i tag di intestazione in maniera corretta: non mettere ad esempio il titolo in H3 e un sottotitolo in H1 perchè è semanticamente scorretto)
  4. evidenziare le parole chiavi con i tag b (bold)
  5. fare un corretto utilizzo dei link (non scrivere "clicca qui" ma descrivi la risorsa e soprattutto assicurati che non ci siano link "rotti" cioè che non portano da nessuna parte)
  6. usare le keywords nei nomi delle immagini e nella proprietà alt del tag img
  7. usare le parole chiavi nel primo paragrafo dell'articolo
  8. non abusare mai con l'utilizzo delle parole chiavi (rischio spam)
  9. segnalare il sito alle web directory
  10. effettuare un intelligente scambio link cioè cercare link di qualità (attenzione al page rank)
  11. Usare i social network per pubblicizzare il tuo sito
  12. Usare sempre una mappa del sito per migliorare l'indicizzazione (adoperare ad esempio il componente Xmap)
  13. ...
Non tutti i template di Joomla utilizzano correttamete i tag per i titoli degli articoli. Bisogna quindi prestare attenzione fin dalla stesura del template rispettando i criteri accennati (a breve pubblicherò ulteriori approfondimenti).
    lunedì 10 gennaio 2011

    Excel tutorial con ClosedXML

    Per creare files Excel 2007/2010 possiamo utilizzare ClosedXML progetto ospitato su CodePlex; questa libreria permette di manipolare i file Excel senza dover usare l'XML. ClosedXML può essere utilizzato con tutti i linguaggi del framework .NET come C# e VB.NET.

    Vediamo un semplice esempio

    Excel ClosedXML

    Per prima cosa viene creato un file Excel (workbook). Ad esso viene aggiunto un foglio di lavoro chiamato "Sample Sheet". In questo foglio viene inserita una cella di nome A1 il cui valore è HelloWorld. Per finire il file viene salvato.