Back to top

Autore Topic: Il modulo antipatico  (Letto 2589 volte)

mau_develop

  • Visitatore
Il modulo antipatico
« il: 16 Mag 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
Codice: [Seleziona]
$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...
Codice: [Seleziona]
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
Codice: [Seleziona]
<?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
« Ultima modifica: 20 Mag 2013, 09:43:24 da M_W_C »

Offline Murphz

  • Global Moderator
  • Abituale
  • ********
  • Post: 1335
  • Sesso: Maschio
  • Trust No1
    • Mostra profilo
Re:Il modulo antipatico
« Risposta #1 il: 16 Mag 2013, 16:56:10 »
Ottimo lavoro! :)
Freelance Web & Graphic Design // Twitter

"...Nothing Important Happened Today..."

Offline BelinBelan

  • Instancabile
  • ******
  • Post: 3887
  • Sesso: Maschio
  • Niente di meno e niente di più. uguale? Forse.
    • Mostra profilo
Re:Il modulo antipatico
« Risposta #2 il: 16 Mag 2013, 18:13:11 »
uhmmm  ::)  per essere "buono" ci voleva un bell'articolo in prima pagina  ;D


Ottimo, invece...  ;)
--
Per piacere, no messaggi privati con richieste d'aiuto!!!

mau_develop

  • Visitatore
Re:Il modulo antipatico
« Risposta #3 il: 16 Mag 2013, 18:29:12 »
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?? :):)

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Il modulo antipatico
« Risposta #4 il: 17 Mag 2013, 01:00:23 »
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
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

mau_develop

  • Visitatore
Re:Il modulo antipatico
« Risposta #5 il: 17 Mag 2013, 08:15:43 »
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

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Il modulo antipatico
« Risposta #6 il: 17 Mag 2013, 10:45:48 »
se vuoi il valore di un attributo su mootools usa get('nomeattributo')
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

mau_develop

  • Visitatore
Re:Il modulo antipatico
« Risposta #7 il: 20 Mag 2013, 09:47:46 »
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
Codice: [Seleziona]
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
« Ultima modifica: 20 Mag 2013, 12:43:25 da M_W_C »

 



Web Design Bolzano Kreatif