Joomla.it Forum
Non solo Joomla... => Sviluppo => : mau_develop 16 May 2013, 15:50:58
-
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
-
Ottimo lavoro! :)
-
uhmmm ::) per essere "buono" ci voleva un bell'articolo in prima pagina ;D
Ottimo, invece... ;)
-
bisogna mettere il bootstrap e testarlo con un po di browser ... sempre che il bootstrap li regga i nested accordion.
...simoneeee ... che è quell'errore di bilanciamento di JQuery?? :):)
-
domani ti ci do un occhio, comuqnue odio profondamente jquery, fighissimo per carita ma secondo me lo sviluppo di classi su mootools è infinitamente piu semplice
-
a proposito di mootools, anche lui mi da degli errori....
L'utilizzo di getAttributeNode() è deprecato. Al suo posto utilizzare getAttribute().
Su tutti i 3.1, nel mootools.core
qs è quello di JQuery... credo:
La scrittura di un albero non bilanciato tramite document.write() ha richiesto un ulteriore parsing dei dati dalla rete. Per maggiori informazioni consultare https://developer.mozilla.org/en/Optimizing_Your_Pages_for_Speculative_Parsing
ho il sospetto che potrebbe anche essere dovuto al parsing di Codecitation
-
se vuoi il valore di un attributo su mootools usa get('nomeattributo')
-
come ho aggiunto in fondo al primo post c'è qualche problema col sef.
Non ho molto tempo per sistemarlo,... ho provato a farlo velocemente ma sbaglio qualcosa... se c'è qualche volenteroso....
[EDIT] Ma che figata.... il prossimo che parla male di joomla lo picchio al JDay :)
... c'è una classe per tutto basta un po' di pazienza e cercare e pregare che se legacy non succeda un macello con le future versioni della platform...
bisogna recuperare la catid che io ho usato o meglio non usato come nome, quindi nella query va aggiunto il a.catid
poi cambia il routing, riposto l'helper
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, a.catid, 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::_(ContentHelperRoute::getArticleRoute($row->id, $row->catid)),
'text' => $row->title
);
}
}
return $lists;
}
Ora è perfetto con il sef e viene anche selezionato nel menù principale il giusto itemid active