Yii Framework Forum: Menu items dinamici - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Menu items dinamici Rate Topic: -----

#1 User is offline   Nicola 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 296
  • Joined: 13-March 11
  • Location:Italy

Posted 04 September 2012 - 09:47 AM

Salve!
Sto cercando di creare un sistema per avere un menu di base minimale dove i vari controllers possono aggiungere voci.
Non ho capito bene quale sia il modo migliore per creare il menu di base all'avvio dell'applicazione, vorrei avere nel layout/main.php una cosa tipo :

$this->widget('zii.widgets.CMenu',array(
			'items' => array(
				array('label'=>'Home', 'url'=>array('/site/index')),
				array('label'=>'About', 'url'=>array('/site/page', 'view'=>'about'))
			),
		));


e poi dai controller far aggiungere item...
Non è che mi dareste qualche idea per partire?
0

#2 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,987
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 04 September 2012 - 10:29 AM

Che cosa intendi con "dai controller far aggiungere item". Vorresti si creassero da sole delle voci di menu in base alle action presenti nei controller?
0

#3 User is offline   emafer 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 182
  • Joined: 23-February 12
  • Location:Amandola

Posted 05 September 2012 - 02:02 AM

Ciao,
Non puoi modificare quel blocco nel layout con i controller , perché il controller lavora prima del layout, quindi devi avere un widget già predisposto per essere dinamico, tipo quello che ho io:

$this->widget('zii.widgets.CMenu',array(
			'items'=>Menu::model()->createmenu()
		));

Ho infatti un model (che in maniera originale si chiama Menu) che mi crea l'array del menu, per ora in maniera fissa, poi lo farà pescando dal db le voci a seconda dell'utente.

function createmenu() {
        //in che modulo sono?
        if(Yii::app()->input->get('r'))
      {  $req = explode('/', Yii::app()->input->get('r')); $modulobase=$req[0];}
        else if(Yii::app()->user->getstate('modulo'))$modulobase= Yii::app()->user->getstate('modulo');
        else $modulobase='contabilita';
//        $menu=array();
//        $array=array();
//        $moduli = Yii::app()->db->createCommand()->select('m.*')
//                                     ->from('{{admin_ut2moduli}} u2m')
//                                     ->leftJoin('{{admin_moduli}}  m', 'u2m.modulo=m.id')
//                                     ->where(  "m.published >= :published",
//                                        array(':published' => 1 )
//                                            )
//                                     ->queryAll();
//                             var_dump($moduli);
//                             foreach ($moduli as $modulo) {
//                             $links= Yii::app()->db->createCommand()->select('m.*')
//                                      ->from('{{admin_ut2menu}} u2m')
//                                      ->leftJoin('{{admin_menu}}  m', 'u2m.modulo=m.id')
//                                      ->queryAll();
//                             if ($links){
//                                 foreach ($links as $link){
//                                     
//                                 }
//                                 //
//                                 if ($modulobase==$modulo['nome']) {
//                                     $array[0]=$littlemenu;
//                                 } else {$array[]=$littlemenu;}
//                             }
//                             
//                             }
        $array = array();
        $menu['access']=array();
        $menu['contabilita']=array('label' => 'Contabilita', 'url' => array('/contabilita/'));
        $items['contabilita']=array(
             array('label' => 'Piano dei Conti', 'url' => array('/contabilita/conti'))
            , array('label' => 'Prima Nota', 'url' => array('/contabilita/primanota'))
            , array('label' => 'Causali Contabili', 'url' => array('/contabilita/causalicontabili'))
                );
        $menu['vendite']=array('label' => 'Vendite', 'url' => array('/vendite/'));
        $items['vendite']=array(
               array('label' => 'Fatture', 'url' => array('/vendite/fatture'))
              ,array('label' => 'Clienti', 'url' => array('/vendite/clienti'))
              ,array('label' => 'Corrispettivi', 'url' => array('/vendite/corrispettivi'))
              ,array('label' => 'Effetti', 'url' => array('/vendite/effetti'))
              ,array('label' => 'Preventivi', 'url' => array('/vendite/preventivi'))
              ,array('label' => 'Ordini', 'url' => array('/vendite/ordini'))
              ,array('label' => 'DDT', 'url' => array('/vendite/ddt'))
              ,array('label' => 'Contratti', 'url' => array('/vendite/contratti'))
              ,array('label' => 'Agenti', 'url' => array('/vendite/agenti'))
            );
        $menu['anagrafica']= array('label' => 'anagrafica', 'url' => array('/anagrafica'));
        $items['administration']=array(
               array('label' => 'Utenti', 'url' => array('/administration/utenti'))
              ,array('label' => 'Moduli', 'url' => array('/administration/moduli'))
            );
               );
        $menu['administration']=array('label' => 'Amministrazione', 'url' => array('/administration/'));
        $menu['aziende']=array('label' => 'Aziende', 'url' => array('/aziende/'));
        $items['aziende']=array(
            array('label' => 'Amministrazione', 'url' => array('/administration/'))
            );
        $array[0]=$menu[$modulobase];
        if (isset($items[$modulobase])){
        foreach ($items[$modulobase] as $value) {
            $array[]=$value;
        }
        
        }
        $i=0;
        unset($menu[$modulobase]);
        foreach ($menu as $name => $vocimenu) {
            $array[0]['items'][$i]=$vocimenu;
            if (isset($items[$name])){
                foreach ($items[$name] as $voce){ $array[0]['items'][$i]['items'][]=$voce;}
            }
            $i++;
        }
        
        $array[] = array('label' => 'Login', 'url' => array('/access/login'), 'visible' => Yii::app()->user->isGuest);
        $array[] = array('label' => 'Logout (' . Yii::app()->user->name . ')', 'url' => array('/site/logout'), 'visible' => !Yii::app()->user->isGuest);
        return $array;
    }


Immagino tu possa fare una cosa simile,
magari aggiungendo una funzione Aggiungi_voce() che puoi richiamare dai vari controller, modificando un array del model.
poi con la funzione createmenu() usi questo array, magari aggiungendo i controlli di login e logout e dovresti essere a posto.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users