2016-07-29 5 views
0

Ich bin auf der Suche nach einer Möglichkeit, Ansichtsvorlage (NOT-Layout) zu ändern, aber ich habe keinen Zugang zu diesem Modul (es Teil des Verkäufers), so kann ich nicht tun:Zend 2: Wie kann ich die Vorlage für eine bestimmte Aktion ändern?

$view = new ViewModel(); 
$view->setTemplate($template); 

Es wäre schön, wenn ich es schaffen könnte, indem ich an irgendein Ereignis anschließe.

habe ich folgenden Code versuchen:

public function onBootstrap(MvcEvent $e) 
{ 
    $eventManager  = $e->getApplication()->getEventManager(); 
    $eventManager->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) { 
     $controller  = $e->getTarget(); 
     $routeMatch  = $e->getRouteMatch(); 
     $routeName  = $routeMatch->getMatchedRouteName(); 
     if ($routeName === 'login') { 
      $controller->layout('layout/layout'); 
      $e->getViewModel()->setTemplate('views/login'); 
     } 
    }, 1); 
    $moduleRouteListener = new ModuleRouteListener(); 
    $moduleRouteListener->attach($eventManager); 
} 

Aber es scheint, als ob es nicht so funktioniert. Ich meine, es hat mein Layout geändert, es hat meine Ansichtsvorlage geändert, aber wenn ich zum Beispiel versuche: $this->form bekomme ich null. Es sieht so aus, als ob alle Variablen von dieser Aktion gelöscht werden.

Wie funktioniert es?

+0

Wie setzen Sie Ihre Variablen in Ihrem Controller auf die Ansicht? – Hooli

Antwort

0

Sie können eine Vorlage aus einer anderen Bibliothek zu Ihrer Vorlage ersetzen. Sie müssen Ihr Modul nach dem Modul aus der Bibliothek in einer Konfigurationsdatei config/application.config.php einrichten.

In einer Ansicht muss die Manager-Konfiguration den Pfad zu Ihrer Vorlage für den Vorlagennamen einer anderen Bibliothek ändern.

'view_manager' => array(
    'template_map' => array(
     'vendor/library/template_name' => __DIR__ . '/your_template.phtml', 
    ) 
) 
0

In bestimmten Aktion können Sie das Standard-Layout wechseln:

$this->layout('layout/your-second-layout'); 

dies nur für das Layout in einer bestimmten Aktion zu ändern.