Supporto volontario e collaborativo per Joomla!® in italiano

Override dei Tags: layout blog con Leggi tutto e colonne

Valutazione attuale: 0 / 5

Stella inattivaStella inattivaStella inattivaStella inattivaStella inattiva
 
Di default Joomla non consente di assegnare un articolo a più categorie, perciò molti utilizzano il componente Tags per simulare questo comportamento. La visualizzazione di un singolo Tag tuttavia è diversa dal layout Blog degli articoli di Joomla. Vediamo in questo articolo come modificarla con gli override per renderla più simile al blog dei contenuti.

Se abbiamo più articoli assegnati ad un Tag e da frontend clicchiamo sul Tag




vedremo questo tipo di pagina:



Come vedete ha un layout semplice, una sola colonna e link solo al titolo dell'articolo.

Come inserire il Leggi tutto


Per inserire il Leggi tutto, creiamo un override del template al componente Tags.
Andiamo in Estensioni > Template > Lista template, selezioniamo il template (nel nostro esempio Protostar) e clicchiamo sul tab Crea override. Nella colonna Componenti clicchiamo su com_tags e poi su tag.

Override com_tags



Andiamo nel tab Editor, clicchiamo su html > com_tags > tag > default_items.php e verso la fine del file, appena prima della chiusura del tag </li> inseriamo il seguente codice

<p class="readmore"><a class="btn" href="<?php echo JRoute::_(TagsHelperRoute::getItemRoute($item->content_item_id, $item->core_alias, $item->core_catid, $item->core_language, $item->type_alias, $item->router)); ?>"><?php echo JText::_('COM_TAGS_READ_MORE') ?></a></p>​

In questo modo:


Salviamo.

Come vedete, il codice

<?php echo JText::_('COM_TAGS_READ_MORE') ?>

richiama una costante lingua, ma questa in realtà non esiste.
Andiamola quindi a creare da Estensioni > Lingue > Override lingua, assicuriamoci che sia selezionato lato Sito nel filtro a sinistra e poi clicchiamo su Nuovo. Nel parametro Costante Lingua inseriamo COM_TAGS_READ_MORE, mentre nel parametro Testo inseriamo Leggi tutto (o quello che preferite...)


Ho preferito inserire una costante in modo che se il sito è multilingua questa si traduce automaticamente, ovviamente creando la stessa costante per tutte le lingue del sito.


Ora da frontend verifichiamo che sia apparso il Leggi tutto sotto al testo introduttivo degli articoli e che cliccando venga visualizzato l'articolo esteso:


Come dividere gli articoli in due colonne


Per dividere gli articoli della pagina del singolo Tag in due colonne ho utilizzato questa guida adattandola all'ultima versione di Joomla.

Andiamo a modificare sempre il file default_items.php

Eliminiamo le seguenti righe di codice che creano la lista alla linea 71 (o circa... con le prossime versioni di Joomla il numero di linea potrebbe cambiare):

<ul class="category list-striped">

e la chiusura del tag alla linea 109
</ul>

Poi eliminiamo questo codice alla linea 73

<?php if ($item->core_state == 0) : ?>
                <li class="system-unpublished cat-list-row<?php echo $i % 2; ?>">
            <?php else: ?>
                <li class="cat-list-row<?php echo $i % 2; ?> clearfix" >​

il relativo alla linea 87

<?php endif; ?>

e il tag di chiusura alla linea 107

</li>

Poi aggiungiamo il codice che inserisce il div alla linea 73

<div class="span5">

dopo il codice

<?php foreach ($items as $i => $item) : ?>


NOTA: la classe span5 determina le due colonne, se ne vogliamo 3 possiamo mettere uno span4, ma sarà necessario agire anche sul css del template e l'ampiezza della classe .row-fluid .span4  ad es. a width: 30.9149%)


Aggiungiamo la chiusura alla linea 107

</div>

prima del

<?php endforeach; ?>


Salviamo ed ecco il risultato:




Per comodità copio il codice di tutto il file in modo che possiate copiarlo direttamente:

<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_tags
 *
 * @copyright   Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */
 
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
 
JHtml::_('behavior.core');
JHtml::_('formbehavior.chosen', 'select');
 
// Get the user object.
$user = JFactory::getUser();
 
// Check if user is allowed to add/edit based on tags permissions.
// Do we really have to make it so people can see unpublished tags???
$canEdit = $user->authorise('core.edit', 'com_tags');
$canCreate = $user->authorise('core.create', 'com_tags');
$canEditState = $user->authorise('core.edit.state', 'com_tags');
$items = $this->items;
$n = count($this->items);
JFactory::getDocument()->addScriptDeclaration("
    var resetFilter = function() {
    document.getElementById('filter-search').value = '';
  }
");
?>
<form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm" class="form-inline">
  <?php if ($this->params->get('show_headings') || $this->params->get('filter_field') || $this->params->get('show_pagination_limit')) : ?>
  <fieldset class="filters btn-toolbar">
    <?php if ($this->params->get('filter_field')) :?>
      <div class="btn-group">
        <label class="filter-search-lbl element-invisible" for="filter-search">
          <?php echo JText::_('COM_TAGS_TITLE_FILTER_LABEL') . '&amp;#160;'; ?>
        </label>
        <input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->state->get('list.filter')); ?>" class="inputbox" onchange="document.adminForm.submit();" title="<?php echo JText::_('COM_TAGS_FILTER_SEARCH_DESC'); ?>" placeholder="<?php echo JText::_('COM_TAGS_TITLE_FILTER_LABEL'); ?>" />
        <button type="button" name="filter-search-button" title="<?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?>" onclick="document.adminForm.submit();" class="btn">
          <span class="icon-search"></span>
        </button>
        <button type="reset" name="filter-clear-button" title="<?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?>" class="btn" onclick="resetFilter(); document.adminForm.submit();">
          <span class="icon-remove"></span>
        </button>
      </div>
    <?php endif; ?>
    <?php if ($this->params->get('show_pagination_limit')) : ?>
      <div class="btn-group pull-right">
        <label for="limit" class="element-invisible">
          <?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>
        </label>
        <?php echo $this->pagination->getLimitBox(); ?>
      </div>
    <?php endif; ?>
 
    <input type="hidden" name="filter_order" value="" />
    <input type="hidden" name="filter_order_Dir" value="" />
    <input type="hidden" name="limitstart" value="" />
    <input type="hidden" name="task" value="" />
    <div class="clearfix"></div>
  </fieldset>
  <?php endif; ?>
 
  <?php if ($this->items == false || $n == 0) : ?>
    <p> <?php echo JText::_('COM_TAGS_NO_ITEMS'); ?></p>
  <?php else : ?>
 
 
    <?php foreach ($items as $i => $item) : ?>
      <div class="span5">
 
 
 
        <?php if (($item->type_alias == 'com_users.category') || ($item->type_alias == 'com_banners.category')) : ?>
          <h3>
            <?php echo $this->escape($item->core_title); ?>
          </h3>
        <?php else: ?>
          <h3>
            <a href="<?php echo JRoute::_(TagsHelperRoute::getItemRoute($item->content_item_id, $item->core_alias, $item->core_catid, $item->core_language, $item->type_alias, $item->router)); ?>">
              <?php echo $this->escape($item->core_title); ?>
            </a>
          </h3>
 
      <?php endif; ?>
      <?php // Content is generated by content plugin event "onContentAfterTitle" ?>
      <?php echo $item->event->afterDisplayTitle; ?>
      <?php $images  = json_decode($item->core_images);?>
      <?php if ($this->params->get('tag_list_show_item_image', 1) == 1 &amp;&amp; !empty($images->image_intro)) :?>
        <a href="<?php echo JRoute::_(TagsHelperRoute::getItemRoute($item->content_item_id, $item->core_alias, $item->core_catid, $item->core_language, $item->type_alias, $item->router)); ?>">
        <img src="<?php echo htmlspecialchars($images->image_intro);?>" alt="<?php echo htmlspecialchars($images->image_intro_alt); ?>">
        </a>
      <?php endif; ?>
      <?php if ($this->params->get('tag_list_show_item_description', 1)) : ?>
        <?php // Content is generated by content plugin event "onContentBeforeDisplay" ?>
        <?php echo $item->event->beforeDisplayContent; ?>
        <span class="tag-body">
          <?php echo JHtml::_('string.truncate', $item->core_body, $this->params->get('tag_list_item_maximum_characters')); ?>
        </span>
        <?php // Content is generated by content plugin event "onContentAfterDisplay" ?>
        <?php echo $item->event->afterDisplayContent; ?>
      <?php endif; ?>
                  <p class="readmore"><a class="btn" href="<?php echo JRoute::_(TagsHelperRoute::getItemRoute($item->content_item_id, $item->core_alias, $item->core_catid, $item->core_language, $item->type_alias, $item->router)); ?>"><?php echo JText::_('COM_TAGS_READ_MORE') ?></a></p>
      </div>  
    <?php endforeach; ?>
 
 
  <?php endif; ?>
</form>
 




Ora apriamo il file default.php e cambiamo il codice

<?php echo $this->loadTemplate('items'); ?>

in

<div class="row"><?php echo $this->loadTemplate('items'); ?></div>


Queste modifche agiscono su tutto il componente Tags, se invece volete applicarlo solo a determinati Tags, è necessario utilizzare un layout alternativo.
In questo caso basta rinominare i file presenti in templates/protostar/html/com_tags/tag/ in

[root]/templates/your_template_name/html/com_tags/tag/default.php
[root]/templates/your_template_name/html/com_tags/tag/default.xml (questo potrebbe non esserci, in questo caso copiatelo da [root]/components/com_tags/views/tag/tmpl/ )
[root]/templates/your_template_name/html/com_tags/tag/default_items.php

in

[root]/templates/your_template_name/html/com_tags/tag/tagblog.php
[root]/templates/your_template_name/html/com_tags/tag/tagblog.xml (questo potrebbe non esserci, in questo caso copiatelo da [root]/components/com_tags/views/tag/tmpl/ )
[root]/templates/your_template_name/html/com_tags/tag/tagblog_items.php

Aprire il file
[root]/templates/your_template_name/html/com_tags/tag/taggedblog.xml

e cambiare la linea

<layout title="com_tags_tag_view_default_title" option="com_tags_tag_view_default_option">

in

<layout title="Tag - Blog" option="tagblog">

Andiamo a creare una nuova voce di menu e tra le opzioni troveremo il layout appena creato



In questo modo possiamo assegnare il layout blog a singoli Tags e non a tutti quelli presenti nel sito.

Per questo esempio ho utilizzato Joomla 3.6.5 con template Protostar

Fonti:
- https://forum.joomla.org/viewtopic.php?t=838191
- http://joomla.stackexchange.com/questions/13583/how-to-show-tagged-items-in-category-blog-layout


 

CommentaCommenta questo articolo sul forum

Ultima versione di Joomla!®

downloadVer. 3.6.5 Stabile Italiana
Data di rilascio:14 Dicembre 2016
(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: