Back to top

Autore Topic: esempio modulo menu in jquery (il mio primo modulo)  (Letto 2628 volte)

Offline rosadeiventi

  • Esploratore
  • **
  • Post: 82
    • Mostra profilo
esempio modulo menu in jquery (il mio primo modulo)
« il: 13 Feb 2013, 17:21:26 »
JOOMLA! 2.5


finalmente mi sono deciso a imparare a sviluppare per joomla. Volevo iniziare con un modulo semplice, il classico menu...
questa discussione è finalizzata nel migliorare l'applicazione di modo che sia io e chi come me non ha ancora programmato per joomla possa imparare qualcosa.

RISULTATO FINALE: voglio un modulo menu con linea magica che segua il mouse tipo questo:

DEMO MENU MAGICO

FASE 1

allora... iniziamo col file XML

Codice: [Seleziona]
    <config>
        <fields name="params">
            <fieldset name="basic">
                <field
                    name="scelta_menu"
                    type="menu"
                    default="mainmenu"
                    label="Select a menu"
                    description="Select a menu" />

                <field
                    name="font_size"
                    type="text"
                    default="12"
                    label="Grandezza font"
                    description="grandezza del carattere " />

                <field
                    name="color_text"
                    type="text"
                    default="#000"
                        label="colore font"
                    description="colore del carattere " />

                <field
                    name="color_line"
                    type="text"
                    default="#b00808"
                        label="colore linea"
                    description="colore della linea" />
               
            </fieldset>
        </fields>
    </config>

Il primo campo serve per chiedere a Joomla! di darti un elenco di tutti i menu esistenti nel CSM
I campi successivi mi servono per dare dei valori ai file CSS
Ne potremmo aggiungere quanto ne vogliamo, così da render e il modulo molto più facile da gestire dal lato amministratore senza andare a lavorare sul codice crudo.

FASE 2

ho creato una cartella "script" nella root principale del modulo per inserirci le librerie Jquery neccessarie... in questo caso il file "jquery.easing.min.js"

poi, sempre nella root principale del modulo, ho creato la cartella "css", ed il file css all'interno con questi dati:

Codice: [Seleziona]
nav {
    float: right;   
    list-style-type: none;
    position: relative;
    z-index: 1;
}
nav ul li {
    display: block;
    float: left;
    padding-right: 15px;
    padding-top: 15px;
    padding-left: 15px;
}
nav ul li a {
    text-decoration: none;
    color: #000;
    font-family: 'Open Sans Condensed', sans-serif;
    font-size: 16px;
}
nav ul li a:hover {
    color: #b00808;
}

nav ul li a:visited {
    color: #000;
}



FASE 3

Ora compiliamo il file helper.php , dove ficcare le classi e i mettodi che ci servono
Non conoscendo le JApplication ho lavorato direttamente con query sul database, mi piacerebbe moltissimo se qualcuno correggesse i miei errori sostituendo le query in mysql con le jApplication...

Codice: [Seleziona]
class modMenuHoverlineFlxHelper {

    public function getFollexEx_vociMenu($scelta_menu) {
        // connessione al db.
        $db = JFactory::getDbo();
         
        // creare un nuovo query object.
        $query = $db->getQuery(true);
         
        // Seleziono tutti i nomi dei menu
        $query->select('*');
        $query->from('#__menu');
        $query->where('menutype = "'.$scelta_menu.'" AND published = 1');
         
        //
        $db->setQuery($query);
         
        // Carico la lista dei risultati stdClass objects.
        $results = $db->loadObjectList();
        return $results;               

    }

}



FASE 4

andiamo a compilare il file principale del modulo:

Codice: [Seleziona]
$scelta_menu = $params->get( 'scelta_menu' );

 $font_size = $params->get( 'font_size' );
 $color_text = $params->get( 'color_text' );
 $color_line = $params->get( 'color_line' );

$user = JFactory::getUser();


$dati_menu = modMenuHoverlineFlxHelper::getFollexEx_vociMenu($scelta_menu);


FASE 5

ora andiamo a compilare il file tmpl/default.php ovvero il file darà il template che visualizzerà l'utente sul lato client

Codice: [Seleziona]
<div class="menu_hoverline_flx">


   
    <link href="modules/mod_menu_hoverline_flx/css/style.css" rel="stylesheet"/>

<style>

.main_nav_hover_box {
    position: absolute;
    top: 0;
    z-index: -1;
    border-bottom-width: thick;
    border-bottom-style: solid;
    border-bottom-color: <?php echo $color_line ?>;
}


</style>


<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>';
 <script src="modules/mod_menu_hoverline_flx/scripts/jquery.easing.min.js" type="text/javascript"></script>
   

<script type="text/javascript">
$(document).ready(function(){
    $('<div class="main_nav_hover_box"></div>').css({
        'width': 0,

        'height': $('.main_nav_menu li:first a').height() + 15,   
    }).appendTo('.main_nav_menu');
   
    // Animate the hover box
    $('.main_nav_menu a').hover(function(){
        $el = $(this);
        //mouseover function
        // .stop() kills exsisting animations on the
        // selected element
        $('.main_nav_hover_box').stop();
        $('.main_nav_hover_box').animate({
            // opacity will fade it up if it is not visible
            'opacity': 1,
            // $(this) - selects the html element that
            // fired the function
            // Grab the width of the selected element
            'width': $(this).width(),
            // Grab the height of the selected element
            'left': $(this).position().left,       
        },
          // {} = adds extra options that you can set to
          // the animate action       
          {
            duration: 'slow',
            easing: 'easeOutCirc',
            queue: false   
          }
        );
    },function(){
        // mouseout function
        // Select the hover box and fade it out
        $('.main_nav_hover_box').animate({
            'opacity': 0   
        }, 1500);   
    });
});   
   
</script>

<?php


if (!$user->guest) {
   echo 
"connesso"."[br /]";
   
$permessi max($user->groups);
   echo 
$permessi;
}


?>


<nav>
    <ul class="main_nav_menu">
        <?php
        
foreach ($dati_menu as $dati_voce){
            if ( 
$permessi >= $dati_voce->access) {
                echo 
'<li><a style="font-size:'.$font_size.'px;color:'.$color_text.';" href="'.$dati_voce->link.'" title="'.$dati_voce->title.'">'.$dati_voce->title.'[/url]</li>';
            }
        }
        
?>


    </ul>
</nav>



ecco qui mi servirebbe molto aiuto per capire come dare i permessi...
Io ho creato un sistema semplicistico per filtrare i permessi di visualizzazione delle voci di menu con l'if:

Codice: [Seleziona]
if ( $permessi >= $dati_voce->access)

ma sicuramente ci sono modi più efficenti e eleganti per farlo con le JApplication

sarebbe utile conoscerli...

« Ultima modifica: 13 Feb 2013, 17:28:04 da rosadeiventi »

Offline skyline81

  • Appassionato
  • ***
  • Post: 310
    • Mostra profilo
Re:esempio modulo menu in jquery (il mio primo modulo)
« Risposta #1 il: 15 Feb 2013, 12:47:36 »
sinceramente ho dato un'occhiata molto veloce al codice ma credo che ti sia complicato di molto la vita... altro che sistema semplicistico...

secondo me potresti:
a. partire già con la possibilità del multilingua
b. inserire controlli preventivi sui dati in ingresso dei parametri
c. studiare come il modulo mod_menu decide di mostrarti i dati
d. non vedo nessun JRoute... forse è in qualche frammento di codice che non hai postato... ma se non te ne ricordi... beh... addio SEF!

per le JApplication > http://docs.joomla.org/JApplication/11.1
per i filtri particolari > http://www.joomla.it/mediawiki/index.php/Joomla!_2.5:Creare_fields_rules_personalizzate_per_ Joomla
« Ultima modifica: 15 Feb 2013, 12:50:58 da skyline81 »
tutti siamo utili e nessuno indispensabile... tranne il defined( '_JEXEC') or die

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:esempio modulo menu in jquery (il mio primo modulo)
« Risposta #2 il: 17 Feb 2013, 15:19:27 »
beh ti sei complicato la vita si, per ricavare i dati va benissimo anzi devi usare il modulo menu, quello che vuoi tu e solo cambiare la struttura della visualizzazione, quindi basta copiare il mod menu e rinominarlo e cambiare i file contenuti in tmpl
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

 



Web Design Bolzano Kreatif