Se c'è un modulo del core di joomla che mi ha sempre suscitato antipatie è l'archivio... mai come mi serve.
Mi sono sempre detto... lo cambieranno prima o poi... visualizza l'anno, ... cerca... ma che giro!
Voglio gli anni, i mesi, e i contenuti... voglio che i motori non li perdano d'occhio...
Così l'ho modificato, è banale. Se lo volete fare magari copiate (duplicate) il modulo archivio nnon fatelo sullo stesso.
Sostanzialmente l'entry point rimane identico, basta aggiungere le librerie jquery e l'inizializzazione dell'accordion
$doc = JFactory::getDocument();
$doc->addScript("http://code.jquery.com/jquery-1.9.1.js");
$doc->addScript("http://code.jquery.com/ui/1.10.3/jquery-ui.js");
$doc->addScriptDeclaration('
$(document).ready(function() {
$("#accordion,#accordion1").accordion({ heightStyle: \'content\' });
});
$doc->addStyleDeclaration('
#accordion h5, #accordion h4{ cursor:pointer }
');
');
lascio sempre lavoro da fare....
se volete mettere in locale gli script è meglio e anche il loro caricamento può essere un parametro configurabile... magari già ce li avete.
Un altra cosa da notare è
$("#accordion,#accordion1").accordion({ heightStyle: \'content\' });"#accordion,#accordion1" permette ( un po' sporco) il "nested" di accordion (anche se il debug dice che non è bilanciato) che ritrovate poi nel template
heightStyle: \'content\' } Serve a dimensionare automaticamente al contenuto... per evitare il dimensionamento automatico al massimo contentuto
...poi
l'helper... beh quello un po' cambia ma nemmeno tanto, secondo me si era già complicato la vita con quella query...
public static function getList(&$params){
//get database
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select(
$query->year($db->quoteName('a.created')).' AS created_year,'.
$query->month($db->quoteName('a.created')).' AS created_month,
a.title, a.id, a.created, c.title AS category');
$query->from('#__content AS a');
$query->join('LEFT', '#__categories AS c ON c.id = a.catid');
$query->where('a.state = 2 AND a.checked_out = 0');
$app = JFactory::getApplication();
if ($app->getLanguageFilter()){
$query->where('language in (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . ')');
}
$query->order('a.created');
$db->setQuery($query);
$rows = (array) $db->loadObjectList();
$lists = array();
if($rows){
foreach ($rows as $row){
$lists[$row->created_year][JHTML::_('date', $row->created, 'F')][] = array(
'cat' => $row->category,
'link' => JRoute::_('index.php?option=com_content&view=article&id='.$row->id),
'text' => $row->title
);
}
}
return $lists;
}
..non c'è molto da dire... non ho la vista "archive" ma quella diretta all'articolo.
Se volete complicarvi la vita (poco consigliabile) e andare a creare un ulteriore accordion, magari sulla categoria, basta aggiungere un elemento all'array prima di quello vuoto
$lists[$row->created_year][JHTML::_('date', $row->created, 'F')][] = array(
e ovviamente aggiungere il #accordion all'inizializzazione (entry point) e la foreach nel template per visualizzarlo
ora il template default.php
<?php if (!empty($list)) :?>
<div id="accordion" class="accordion">
<?php foreach ($list as $y=>$item) : ?>
<h4><?php echo $y; ?></h4>
<div class="accordion-inner">
<div id="accordion1">
<?php foreach ($item as $m=>$arts) : ?>
<h5><span class="flex-subpanel"><?php echo $m; ?></span>
<span class="flex-count">(<?php echo count($arts);?>)</span></h5>
<div class="accordion-body">
<?php foreach ($arts as $art) : ?>
<p class="flex-link"><a href="<?php echo $art['link']; ?>"><?php echo $art['text']; ?>[/url]</p>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
ATTENZIONE: non è sef compatibile, sarebbe da implementare, quindi consideratelo come poc di codice o usatelo senza problemi se non usate il rewrite dell'url