Supporto volontario e collaborativo per Joomla!® in italiano

Override template - parte 1 - file per modificare l'articolo

Valutazione attuale: 5 / 5

Stella attivaStella attivaStella attivaStella attivaStella attiva
 

Override JoomlaL'elenco dei file per modificare la visualizzazione (override) degli articoli in Joomla. Inoltre, per chi volesse un aiutino in più, una bella carrellata di frammenti dei file utilizzati, per comprendere meglio la struttura dell'articolo stesso. Pertanto se non sapete dove mettere le mani, ma avete bisogno di cambiare lo stile di presentazione dell'articolo, eccovi serviti.

Funziona su Joomla 2.5

Dove prelevare

Per modificare le funzioni basilari degli articoli, abbiamo bisogno di due soli file presenti in questa cartella

root/component/com_content/views/article/tmpl/

ovvero

  • default_link.php (clicca qui per visualizzarne le caratteristiche)
    Contiene le istruzioni per visualizzare i link A, B e C. Queste informazioni, sono nel pannello "Immagini e link", visibile durante la stesura dell'articolo nel back-end.
    Backend
    (Clicca qui o sull'immagine per visualizzarla per intero)
    Risultato
    (Clicca qui o sull'immagine per visualizzarla per intero)
    Impostazioni articolo BackEnd, inerenti ai link non autorizzati A, B e C Risultato impostazione link non autorizzati
    Attenzione: per impostare la posizione dei link di tipo A, B e C, dovrete renderli disponibili settando ,all'interno dell'articolo nel pannello "Opzioni di Visualizzazione", le voci "Link non autorizzati" e "Posizione dei Link". Queste stesse voci le potete impostare, globalmente in backend->Gestione Articoli->Opzioni->Articoli.
  • default.php (clicca qui per visualizzarne le caratteristiche)
    Qui risiedono tutte le istruzioni e disposizioni per la visualizzazione dell'articolo; di fatto è il file principale, dove poter modificare tutto: dalla tabella dei contenuti in caso di impaginazione, alla posizione dell'immagine articolo esteso, dal formato della data, ai dati relativi all'autore ed all'articolo. In pratica, tutti gli aspetti d'interesse nella maggior parte dei casi.

Dove copiare

Prima di tutto copiamo i file nella cartella article, secondo questo indirizzo:

root/templates/mio_template/html/com_content/article/

 mantendo gli stessi nomi. Se nel vostro template la cartella html o article non è presente createla voi.Solo successivamente possiamo modificarli.

Analisi Codice

Il codice dei due file non è difficile, anzi: si tratta di saper capire dove inizia e finisce un tag, quali campi relativi all'articolo vengono considerati e come modificarli. Quindi spendiamo un pò di tempo per capire le righe di principale interesse per i nostri scopi.

Default_link.php

Questo file, molto semplice, contiene la struttura per la visualizzazione dei tre link presenti in "immagini e link": link A,link B, link C; nulla di complicato, semplicemente preleva le informazioni dalla tabella content, e precisamente dal campo urls. Una volta fatto ciò, vengono codificate secondo lo standard json con questa istruzione

// Create shortcut
$urls = json_decode($this->item->urls);
Segue un controllo con la struttura if, per verificare che l'oggetto urls non sia vuoto. Se dovesse esserlo, quindi il nostro articolo NON dispone di alcun link di tipo A, o di tipo B, o di tipo C, allora verrà terminata l'esecuzione di questo file. 

Altrimenti, grazie agli operatori logici di tipo OR (letteralmente 'o'), con simbolo || (doppia barra verticale), basterà che sia stato compilato uno solo dei tre link, perchè si proceda con le istruzioni contenuto nell'if; prime tra tutte l'apertura del tag div di classe content-links e del tag ul
Se per esigenze personali aveste bisogno di altri operatori logici, come AND oppure XOR o NOT e via dicendo, visitate questo link: si tratta del portale di riferimento per il linguaggio php, molto interessante!

La parte che segue, permette di preparare al meglio i contenuti da stampare, ma prima dobbiamo accertarci che ci sia EFFETTIVAMENTE qualcosa da stampare.

$urlarray = array(
array($urls->urla, $urls->urlatext, $urls->targeta, 'a'),
array($urls->urlb, $urls->urlbtext, $urls->targetb, 'b'),
array($urls->urlc, $urls->urlctext, $urls->targetc, 'c'));</p>
<p>foreach($urlarray as $url) :
 $link = $url[0];
 $label = $url[1];
 $target = $url[2];
 $id = $url[3];</p>
<p>if( ! $link) :
 continue;
 endif;</p>
<p>// If no label is present, take the link
 $label = ($label) ? $label : $link;</p>
<p>// If no target is present, use the default
 $target = $target ? $target : $params->get('target'.$id);
Cosa vuol dire tutto ciò? ebbene la definizione di urlarray, ci permette di comprendere al meglio come siano strutturati i nostri dati. Infatti,

  • in posizione 0 ($urls->urla, $urls->urlb, $urls->urlc)
    abbiamo l'url vero e proprio del link
  • in posizione 1 ($urls->urlatext, $urls->urlbtext, $urls->urlctext)
    il testo da visualizzare nel link
  • in posizione 2 ($urls->targeta, $urls->targetb, $urls->targetc)
    il target ovvero dove condurre l'apertura della pagina
  • in posizione 3 ('a', 'b', 'c')
    l'id del link.

Quest'ordine, viene ricordato all'interno del foreach, con le assegnazioni delle variabili, prima di essere utilizzate nello switch. Di fatto, è un passaggio apparentemente inutile ma decisamente esplicativo.

Attenzione: il codice

if( ! $link) :
      continue;
endif;
Verifica l'esistenza e la correttezza del link. Senza di esso, potremmo "involontariamente" ottenere dei link che non linkano nulla (poco piacevoli); questo controllo non interrompe/blocca il foreach, grazie al continue. Pertanto lasciate intatto questo controllo.

Invece per target e label, vengono settati degli eventuali valori di default; seguiti dall'apertura del tag

  • e dallo switch, che determinerà il tipo di link da visualizzare. Per default, viene aperta una scheda con parent window con nofollow

    Attenzione: se siete intenzionati a lavorare sull'aspetto SEO dei link, questo switch è il vostro terreno di caccia. Pertanto i vari settaggi di follow, no follow, no index etc, vanno applicati qui.

    Default.php

    Probabilmente questo è il file più importante: prestate bene attenzione a cosa modificate, perchè qui potete fare davvero di tutto. Ecco una lista delle "macro zone" dove lavorare:

    Torna alla lista

    Parametri

    Sebbene possano sembrare "oscuri", quanto segue rappresenta una semplice codifica dei risultati ricevuti dalla query.

    $params = $this->item->params;
    $images = json_decode($this->item->images);
    $urls = json_decode($this->item->urls);
    $canEdit = $this->item->params->get('access-edit');
    $user = JFactory::getUser();
    Senza questo frammento, ne le immagini, ne tanto meno gli url, i dettagli sull'utente ed i suoi poteri d'accesso, potrebbero essere utilizzati.Pertanto non modificate/toccate queste righe.

    Torna alla lista

    Intestazione pagine e Pagination

    Pannello backend per gestione intestazione pagine

    Per settare l'intestazione di ogni articolo, lo possiamo fare tramite la voce del menu che porta all'articolo. Si, la voce del menù che conduce all'articolo, contiene le impostazioni nel pannello.

    Ovviamente, bisogna impostare su "Si" e compilare il campo "Intestazione pagina".

    Il risultato sarà visibile con questo codice

    <?php if ($this->params->get('show_page_heading', 1)) : ?>
        <h1>
            <?php echo $this->escape($this->params->get('page_heading')); ?>
        </h1>
    <?php endif; ?>
    Il codice che segue, invece, non riesco a determinarne il significato, o la sua utilità. Posso solo immagine che riguardi determinati plugin o casi d'impaginazione molto particolari. Per completezza lo riporto
    <?php
       if (!empty($this->item->pagination) AND $this->item->pagination AND !$this->item->paginationposition  AND $this->item->paginationrelative){
           echo $this->item->pagination;
           }
    ?>

    Torna alla lista

    Titolo Articolo

    Molto semplicemente, abbiamo un veloce controllo con un if (per verificare se il titolo debba essere visualizzato) e poi un secondo if, per verificare le uniche due impostazioni possibili: se linkare o meno il titolo. Il tutto all'interno del tag h2.

     <?php if ($params->get('show_title')) : ?>
     <h2>
     <?php if ($params->get('link_titles') AND !empty($this->item->readmore_link)) : ?>
     <a href="<?php echo $this->item->readmore_link; ?>">
     <?php echo $this->escape($this->item->title); ?></a>
     <?php else : ?>
     <?php echo $this->escape($this->item->title); ?>
     <?php endif; ?>
     </h2>
    <?php endif; ?>

    Torna alla lista

    Icone mail, edit e stampa

    Quanto segue, permette di gestire le tanto note icone di stampa, mail e di modifica. Per quest'ultima, ovviamente, prestate attenzione ai controlli sull'utente. Personalmente, ritengo doveroso scegliere per il proprio template, quanto sia importante l'edit dal front-end. Perchè se, e ripeto il se, ritenete di aggiornare i contenuti solo dal back-end, allora "potete" eliminare la presenza del codice relativo all'edit. Ma questo è solo un mio consiglio.

    <?php if ($canEdit OR $params->get('show_print_icon') OR $params->get('show_email_icon')) : ?>
     <ul class="actions">
     <?php if (!$this->print) : ?>
     <?php if ($params->get('show_print_icon')) : ?>
     <li class="print-icon">
     <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?>
     </li>
     <?php endif; ?>
    <?php if ($params->get('show_email_icon')) : ?>
     <li class="email-icon">
     <?php echo JHtml::_('icon.email', $this->item, $params); ?>
     </li>
     <?php endif; ?>
    <?php if ($canEdit) : ?>
     <li class="edit-icon">
     <?php echo JHtml::_('icon.edit', $this->item, $params); ?>
     </li>
     <?php endif; ?>
    <?php else : ?>
     <li>
     <?php echo JHtml::_('icon.print_screen', $this->item, $params); ?>
     </li>
     <?php endif; ?>
    </ul>
    <?php endif; ?>

    Torna alla lista

    AfterDisplayTitle e beforeDisplayContent

    Questa parte dello script è utilizzata dai plugin; per esempio, i plugin di condivisione sui social network (shareButtons), collocano qui il codice relativo alle impostazioni di condivisione. Pertanto, se prevedete di costruire un template con un alta capacità di personalizzazione con altri plugin, fareste bene a lasciar stare questo codice. Al più spostatelo o modificatelo, ma siate consci dei limiti che imponete.

    <?php if (!$params->get('show_intro')) :
     echo $this->item->event->afterDisplayTitle;
    endif; ?>
    <?php echo $this->item->event->beforeDisplayContent; ?>

    Torna alla lista

    Dettagli Articolo

    I dettagli dell'articolo sono davvero molteplici: per verificarne che ne esista almeno uno, si utilizza il risultato di una serie di OR, e lo si salva nella variabile $useDefList. Una volta fatto ciò si passa a stampare "Dettagli" nel tag dd con classe article-info-term.

    <?php $useDefList = (($params->get('show_author')) or ($params->get('show_category')) or ($params->get('show_parent_category'))
     or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date'))
     or ($params->get('show_hits'))); ?>
    <?php if ($useDefList) : ?>
     <dl class="article-info">
     <dt class="article-info-term"><?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt>
    <?php endif; ?>

    Torna alla lista

    Dettagli Articolo: Categoria Principale

    Ora passiamo alla categoria padre, ovvero quella che viene chiamata parent-category. In pratica, indichiamo quale "padre" categoria contiene la categoria "figlia" in cui risiede il nostro articolo. Trovo utile poter indicare all'utente, con ogni espediente possibile, la struttura del sito che sta visitando. Pertanto, rinnovare la disposizione delle categorie, vicino al titolo, si rivela estremamente utile!

    <?php if ($params->get('show_parent_category') AND $this->item->parent_slug != '1:root') : ?>
     <dd class="parent-category-name">
     <?php $title = $this->escape($this->item->parent_title);
     $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)).'">'.$title.'</a>';?>
     <?php if ($params->get('link_parent_category') and $this->item->parent_slug) : ?>
     <?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?>
     <?php else : ?>
     <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
     <?php endif; ?>
     </dd>
    <?php endif; ?>

    Torna alla lista

    Dettagli Articolo: Categoria Articolo

    Qui si ripete lo stesso discorso fatto per Categoria Principale, anche se aggiungo una semplice nota: se nel caso precedente la funzionalità della categoria era lievemente accessoria, in questo secondo caso è diverso. Fornire un utilissimo articolo, senza dare una minima idea di dove sia collocato, si tratta di una sciocchezza; pertanto, a meno di plugin/moduli ausiliari alla navigazione e capaci di fornire quest'informazione, ritengo che si tratti di un obbligo. Quindi per il vostro template, riconsiderate lo spazio per visualizzare, chiaramente, la categoria del'articolo; aggiungo, meglio se linkata (aumentereste la possibilità di permanenza delle visite sul sito).

    <?php if ($params->get('show_category')) : ?>
     <dd class="category-name">
     <?php $title = $this->escape($this->item->category_title);
     $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)).'">'.$title.'</a>';?>
     <?php if ($params->get('link_category') and $this->item->catslug) : ?>
     <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?>
     <?php else : ?>
     <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?>
     <?php endif; ?>
     </dd>
    <?php endif; ?>

    Torna alla lista

    Dettagli Articolo: Data tipo e formato

    Se fino ad ora non c'è nulla di nuovo, con la data possiamo "divertirci", letteralmente. Vi consiglio due link, capaci di spiegare tutto ciò che vi serve per apportare le giuste modifiche.

    • How do you change the date format? da docs.joomla.org l'elenco, file ed altre informazioni su come gestire
      <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC2'))); ?>
      Date_Format_LC2 è solo una delle impostazioni possibili: possiamo gestire singolarmente il mese, l'anno, l'ora, i minuti; tutti i dettagli dell'ora e data, ai nostri piedi.
    • Modificare l'aspetto della data in Joomla 1.6 di tonicopi un semplice articolo, ben fatto e di facile comprensione, per capire come visualizzare la data dell'articolo (di pubblicazione, modifica o creazione che sia) con un simpatico stile.

    Con gli strumenti adatti, il codice risulta molto più semplice da leggere: vengono visualizzate le date di creazione, modifica e pubblicazione, a seconda delle impostazioni scelte.

    <?php if ($params->get('show_create_date')) : ?>
     <dd class="create">
     <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC2'))); ?>
     </dd>
    <?php endif; ?>
    <?php if ($params->get('show_modify_date')) : ?>
     <dd class="modified">
     <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC2'))); ?>
     </dd>
    <?php endif; ?>
    <?php if ($params->get('show_publish_date')) : ?>
     <dd class="published">
     <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC2'))); ?>
     </dd>
    <?php endif; ?>

    Torna alla lista

    Dettagli Articolo: Autore

    Per l'autore abbiamo la stessa disposizione vista per gli altri campi, come Titolo Articolo:  mostrare o meno, presentando il nome dell'articolo linkato o no.

    <?php if ($params->get('show_author') AND !empty($this->item->author )) : ?>
     <dd class="createdby">
     <?php $author = $this->item->created_by_alias ? $this->item->created_by_alias : $this->item->author; ?>
     <?php if (!empty($this->item->contactid) AND $params->get('link_author') == true): ?>
     <?php
     $needle = 'index.php?option=com_contact&view=contact&id=' . $this->item->contactid;
     $menu = JFactory::getApplication()->getMenu();
     $item = $menu->getItems('link', $needle, true);
     $cntlink = !empty($item) ? $needle . '&Itemid=' . $item->id : $needle;
     ?>
     <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', JHtml::_('link', JRoute::_($cntlink), $author)); ?>
     <?php else: ?>
     <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
     <?php endif; ?>
     </dd>
    <?php endif; ?>
    Attenzione: l'autore è linkabile se esiste la sua pagina di contatto, pertanto dovrete attivare i relativi plugin. A tal proposito, vi segnalo l'articolo La foto dell'autore appare nei risultati della ricerca di Google di alexred. Poter linkare l'autore con la sua pagina di Google Plus, fornisce un valore aggiunto al vostro template. Si tratta di un dettaglio, forse, ma decisamente importante per l'evoluzione del mondo dei motori di ricerca.

    Torna alla lista

    Dettagli Articolo: Hits Articolo

    Mostrare quante volte sia stato letto un articolo, può indurre a farsi una piccola idea sulla qualità. Informazione utile sempre? Dipende da caso a caso, però è sempre bene considerare uno spazio dedicato nel nostro template. Il codice è dannatamente semplice

    <?php if ($params->get('show_hits')) : ?>
    <dd class="hits">
     <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
     </dd>
    <?php endif; ?>
    <?php if ($useDefList) : ?>
     </dl>
    <?php endif; ?>
    Si noti le utlime istruzioni: esse permettono di chiudere la struttura di dettagli sino ad ora visualizzati. Pertanto non rimuovetela, altrimenti correte il rischio di ritrovarvi un tag aperto per tutto il resto della pagina!

    Torna alla lista

    Tabella "toc": visualizzazione titoli Page break

    La tabella in questione, è generata in automatico, ogni qual volta che clicchiamo su Page break ed aggiungiamo un sottotitolo al nostro articolo. Di default assume uno stile css float:right. Pertanto, assicuratevi che sia il codice css che php durante l'override, siano in grado di gestirla al meglio. Il "problema" riguarda la coesistenza della tabella con l'immagine Articolo esteso, perchè il testo viene "schiacciato" da entrambi.

    <?php if (isset ($this->item->toc)) : ?>
     <?php echo $this->item->toc; ?>
    <?php endif; ?>
     

    Torna alla lista

    Posizione url A, B e C Alta

    In realtà si tratta della posizione "sopra" per i link non autorizzati (A, B e C). Infatti, osservando il codice

    <?php if (isset($urls) AND ((!empty($urls->urls_position) AND ($urls->urls_position=='0')) OR ($params->get('urls_position')=='0' AND empty($urls->urls_position) ))
     OR (empty($urls->urls_position) AND (!$params->get('urls_position')))): ?>
    <?php echo $this->loadTemplate('links'); ?>
    <?php endif; ?>
    notiamo la differenza con il codice per assegnare la posizione "sotto", solo per i valori di controllo '0'. La posizione "sotto" visualizza i link, dopo aver stampato i link per la navigazione tra articoli della medesima categoria (dell'articolo in lettura, ovviamente). Pertanto, avremo l'articolo, i relativi link per leggere altri articoli della medesima categoria e poi la posizione "sotto" per link A, B e C.

    Torna alla lista

    Immagine Articolo Esteso

    Come ho già detto, di default bisogna gestire questa immagine considerando la tabella "toc": visualizzazione titoli Page break, in quanto si rischia di ottenere un effetto testo "schiacciato" decisamente sgradevole

    <?php if ($params->get('access-view')):?>
    <?php if (isset($images->image_fulltext) and !empty($images->image_fulltext)) : ?>
    <?php $imgfloat = (empty($images->float_fulltext)) ? $params->get('float_fulltext') : $images->float_fulltext; ?>
    <div class="img-fulltext-<?php echo htmlspecialchars($imgfloat); ?>">
    <img
     <?php if ($images->image_fulltext_caption):
     echo 'class="caption"'.' title="' .htmlspecialchars($images->image_fulltext_caption) .'"';
     endif; ?>
     src="<?php echo htmlspecialchars($images->image_fulltext); ?>" alt="<?php echo htmlspecialchars($images->image_fulltext_alt); ?>"/>
    </div>
    <?php endif; ?>

    Torna alla lista

    Paginazione e Testo

    Ritroviamo lo stesso codice visto in Intestazione pagine e Pagination; mi ripeto: penso si tratti di un'area dedicata ad altri plugin. Mentre, per visualizzare il testo dell'articolo, troviamo una singola istruzione.

    <?php
    if (!empty($this->item->pagination) AND $this->item->pagination AND !$this->item->paginationposition AND !$this->item->paginationrelative):
     echo $this->item->pagination;
     endif;
    ?>
    <?php echo $this->item->text; ?>

    Torna alla lista

    Articoli medesima categoria

    Qui vengono visualizzati i link Succ e Prec, per visualizzare altri articoli della medesima categoria (dell'attuale articolo).

    <?php
    if (!empty($this->item->pagination) AND $this->item->pagination AND $this->item->paginationposition AND!$this->item->paginationrelative):
     echo $this->item->pagination;?>
    <?php endif; ?>

    Torna alla lista

    Posizione url A, B e C Bassa

    Questo è il codice per stampare i link non autorizzati dell'articolo, in "fondo".

    <?php if (isset($urls) AND ((!empty($urls->urls_position) AND ($urls->urls_position=='1')) OR ( $params->get('urls_position')=='1') )): ?>
    <?php echo $this->loadTemplate('links'); ?>
    <?php endif; ?>

    Torna alla lista

    In caso di Articolo non accessibile

    L'articolo può presentarsi ad utenti senza i necessari diritti di lettura, per svariati motivi: link condiviso erroneamente, cambio di credenziali dopo aver pubblicato l'articolo. Nessun problema, Joomla pensa anche a questo: infatti presenta l'introduzione dell'articolo e fornisce un bel link per loggarsi.

    <?php elseif ($params->get('show_noauth') == true and $user->get('guest') ) : ?>
     <?php echo $this->item->introtext; ?>
     <?php //Optional link to let them register to see the whole article. ?>
     <?php if ($params->get('show_readmore') AND $this->item->fulltext != null) :
     $link1 = JRoute::_('index.php?option=com_users&view=login');
     $link = new JURI($link1);?>
     <p class="readmore">
     <a href="<?php echo $link; ?>">
     <?php $attribs = json_decode($this->item->attribs); ?>
     <?php
     if ($attribs->alternative_readmore == null) :
     echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE');
     elseif ($readmore = $this->item->alternative_readmore) :
     echo $readmore;
     if ($params->get('show_readmore_title', 0) != 0) :
     echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit'));
     endif;
     elseif ($params->get('show_readmore_title', 0) == 0) :
     echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE');
     else :
     echo JText::_('COM_CONTENT_READ_MORE');
     echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit'));
     endif; ?></a>
     </p>
     <?php endif; ?>
    <?php endif; ?>

    Torna alla lista

    Pagination e afterDisplayContent

    Il codice, come già letto, presenta una parte di cui non conosco bene gli effetti (Pagination), mentre per afterDisplayContent, sono sicuro che viene utilizzato da alcuni plugin (per commenti o condivisioni con socialButton)

    <?php
    if (!empty($this->item->pagination) AND $this->item->pagination AND $this->item->paginationposition AND $this->item->paginationrelative):
     echo $this->item->pagination;?>
    <?php endif; ?>
    <?php echo $this->item->event->afterDisplayContent; ?>
    </div>

    Andrea Rossi

    CommentaCommenta questo articolo sul forum



  • Ultima versione di Joomla!®

    downloadVer. 3.7.5 Stabile Italiana
    Data di rilascio: 17 Agosto 2017
    (leggi la notizia Demo online

    Le migliori estensioni gratuite

    Un elenco aggiornato con i link a più di 100 estensioni fra componenti, moduli e plugin gratuiti per Joomla! 3

    Manuale in italiano

    Manuale in italianoPer conoscere meglio Joomla!, le sue caratteristiche ed il metodo di utilizzo leggi il manuale tradotto in italiano.

    Molto utili anche le risposte alle domande più frequenti: FAQ

    Sicurezza del proprio sito Joomla!Leggi anche: Nozioni sulla sicurezza del proprio sito

    Autori di articoli recenti

    Invia un articolo!Scrivi un articolo su Joomla.it e ricevi i ricavi dalle pubblicità di Google Adsense!
    Segui queste istruzioni, condividi e collabora con la community. L'elenco degli autori attivi sul sito.

    Libri consigliati

    Torna su

    Joomla.it sui Social Network

    JoomlaDay Italia

    JoomlaDay

    Newsletter

    Inserisci qui la tua e.mail: