2013-04-18 17 views
6

Làm cách nào để nhận được trong ZF2 tên mô-đun hiện tại (đã chọn) trong bố cục ứng dụng? Mục đích: Bố cục ứng dụng của tôi bao gồm trình đơn chính của ứng dụng zf2 và mỗi khi mô-đun được chọn, tôi cần làm nổi bật giọng nói của mô-đun. Ngoài ra tôi cần phải thiết lập các tuyến đường chính xác (url, hành động) khi trình đơn được thực hiện với điều này cho. Mỗi module có một giọng menu:ZF2: Nhận tên mô-đun (hoặc tuyến đường) trong bố cục ứng dụng để làm nổi bật 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> 

Trả lời

8

Tôi biết nó quá muộn để trả lời câu hỏi này và cũng có rất nhiều câu trả lời sẵn rồi nhưng chỉ trong trường hợp ai đó xem câu hỏi này, nó có thể hữu ích.

Trong chính hoặc bất kỳ của Mô-đun Module.php, viết những dòng này -

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, 
      ) 
     ); 
    } 
} 

Sau đó, bạn có thể sử dụng $CURRENT_MODULE_NAME biến trong file layout của bạn (như thực hiện trong câu hỏi chính nó). Phần còn lại của các biến được đề cập trong mã trên có thể được sử dụng nếu được yêu cầu.

+0

Điều này làm việc tuyệt vời cho tôi, với sự sửa đổi theo câu trả lời từ Porta Tela Chúng tôi bbuilding –

2

Tôi thích cách dễ dàng hơn mà không cần đối phó với Module.php

Nơi mã này vào layout.phtml

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

nhưng điều này sẽ không trả về tên mô-đun currect nếu chúng ta đang ở trong một roudte con. Ví dụ: nó có thể trả về MODULENAME/mặc định – albanx

1

Sử dụng array_shift thay vì array_pop (Kunal Dethe câu trả lời):

$controller = $this->getParam('controller'); 
$module_array = explode('\\', $controller); 
$module = array_shift($module_array); 
Các vấn đề liên quan