2013-04-18 11 views
6

Come posso inserire ZF2 nel nome del modulo corrente (selezionato) nel layout dell'applicazione? Scopo: il layout dell'applicazione include il menu principale dell'app zf2 e ogni volta che viene selezionato un modulo, devo evidenziare la voce del menu del modulo. Inoltre ho bisogno di impostare il percorso corretto (url, azione) quando il menu è fatto con questo per. Ogni modulo ha una voce di menu:ZF2: Ottieni il nome del modulo (o percorso) nel layout dell'applicazione per l'evidenziazione del menu

<ul class="nav"> 
<?php foreach ($menu_modules as $mod): 
    $is_active = ($mod['name'] == $CURRENT_MODULE_NAME)?'selected':'';//GET MODULE NAME 
?> 
<!-- class="active" --> 
<li><a href="#" <?php echo $is_active;?> ><?php echo $mod['title']; ?></a></li> 
<?php endforeach; ?> 

<li><a href="<?php echo $this->url('login/process', array('action'=>'logout')); ?>"><?php echo $this->translate('Logout') ?></a></li> 
</ul> 

<div class="row-fluid" id="main_container"> 
    <?php echo $this->content; ?> 
</div> 

risposta

8

So che la sua troppo tardi per rispondere a questa domanda e anche che ci sono un sacco di risposte disponibili già, ma solo nel caso in cui un utente visualizza questa domanda, può essere utile.

Nella primaria o qualsiasi modulo di Module.php, scrivere questo -

class Module { 

    public function onBootstrap(MvcEvent $e) { 

     $sm = $e->getApplication()->getServiceManager(); 

     $router = $sm->get('router'); 
     $request = $sm->get('request'); 
     $matchedRoute = $router->match($request); 

     $params = $matchedRoute->getParams(); 

     $controller = $params['controller']; 
     $action = $params['action']; 

     $module_array = explode('\\', $controller); 
     $module = array_pop($module_array); 

     $route = $matchedRoute->getMatchedRouteName(); 

     $e->getViewModel()->setVariables(
      array(
       'CURRENT_MODULE_NAME' => $module, 
       'CURRENT_CONTROLLER_NAME' => $controller, 
       'CURRENT_ACTION_NAME' => $action, 
       'CURRENT_ROUTE_NAME' => $route, 
      ) 
     ); 
    } 
} 

quindi è possibile utilizzare $CURRENT_MODULE_NAME variabile nel file di layout (come fatto nella domanda stessa). Se necessario, è possibile utilizzare il resto delle variabili citate nel codice precedente.

+0

Questo ha funzionato alla grande per me, con la modifica come da risposta di Porta Tela Noi banding –

2

preferisco modo più semplice senza trattare con Module.php

Inserire il codice in layout.phtml

$routeName = $this->getHelperPluginManager()->getServiceLocator()->get('Application') 
       ->getMvcEvent()->getRouteMatch()->getMatchedRouteName(); 
if($routeName === "users") ... 
+0

ma questo non restituirà il nome del modulo currect se siamo in un bambino roudte. Ad esempio può restituire MODULENAME/default – albanx

1

Usa array_shift invece di array_pop (Kunal Dethe risposta):

$controller = $this->getParam('controller'); 
$module_array = explode('\\', $controller); 
$module = array_shift($module_array);