Zend Framework: Düzen

3 Cevap php

how could I add some variables to my layout.phtml? I could add it in every Controller like here: http://stackoverflow.com/questions/1537700/sending-variables-to-the-layout-in-zend-framework

Ama bu gerçekten müstehcen değil ve Bootstrap ben de bunu eklemek istemiyorum.

3 Cevap

Sen LayoutDefaults denilen bir ön denetleyicisi eklentisi oluşturabilirsiniz:

class MyLib_Controller_Plugin_LayoutDefaults extends Zend_Controller_Plugin_Abstract
{    
  public function preDispatch(Zend_Controller_Request_Abstract $request)
  {
    $mvc = Zend_Layout::getMvcInstance();
    if ( !$mvc ) return;
    $view = $mvc->getView();
    if ( !$view ) return;

    /**
     * Set the defaults.
     */
    $view->value1 = "default value1";
  }
}

Lütfen Ön Controller:

Zend_Controller_Front::getInstance()
  ->registerPlugin( new MyLib_Controller_Plugin_LayoutDefaults() );

Lütfen layout.phtml in:

<?= $this->escape($this->value1) ?>

Gerektiğinde Ve nihayet, kontrolörler, varsayılan geçersiz kılmak:

$this->view->value1 = "new value 1";

Uzanan olacak yeni bir soyut denetleyicisi oluşturma Zend_Controller_Action.

IndexController extends My_Controller_Action -> My_Controller_Action extends Zend_Controller_Action

Ve orada sen istersen bir init() koymak gerekir. :)

Eğer kontrolör dışında görünümü içerik tutmak için çalışıyoruz gibi geliyor. Ben de denetleyicisi dışında görünümü içeriğini tutmaya çalışırken inanıyorum, bu yüzden mümkün görüşlerimi görünüm içerik yerleştirmek için deneyin. Ben bunu bu şekilde yapmak:

Örneğin, layout.phtml ben iki tutucular, ana içerik için başlık ve başka birini yaşayabilirsiniz:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title><?php echo $this->escape($this->placeholder('titleContent')) ?></title>
</head>
<body>
  <div id="maincontent">
    <?php echo $this->layout()->content ?>
  </div>
</body>

ve sonra index.phtml görünümünde kendisi böyle içerik hem de parçalarını koymak:

<?php $this->placeholder('titleContent')->Set('My Index Page Title') ?>
<p>Index page content here</p>

Eğer denetleyicileri için hiçbir etkisi ile istediğiniz gibi birçok tutucuları ekleyebilirsiniz. Bu modeli geliyor sürece bu yöntem ile en fazla içerik denetleyicisi dışında kalır.