Düzen komut adı verilen bir yardımcı kullanarak zend bakış özelliğini Başlarken

5 Cevap php

Benim ana nav yapmak için bir yardımcı yazdık. Bu yardımcı çekler bölümü bir kullanıcı görünüme atanmışsa kontrol ederek giriş yapan kullanıcı varsa

if($this->view->user)
{
//do stuff
}

Benim düzen komut dosyası bu yardımcıya çağırdığınızda Ancak $ this-> görünüm-> kullanıcı erişemez; var_dump ($ this-> view I) kendisine atanan tüm özellikleri ile görünüm nesnesi döndürür, jsut değil, ancak (NULL değeri vardır. görünümü komut, ben düzeni atamak, eğer sadece kullanıcı verilerini erişebilirsiniz örneğin,

$this->layout()->user = $this->user;

Ve sonra yardımcısı yapmak

if($this->view->layout()->user)
{
//do stuff
}

Ben düzeni verileri aktarmak için bir satır eklemek zorunda, her görünüm komut vasıtası olarak bir ağrı.

Görünümünün özelliklerine erişmek için düzen komut denilen yardımcıları etkinleştirmek için bir yol var mı?

* düzenlemek

İşte kaynak bulunuyor:

    <?php

class Zend_View_Helper_MainNav extends Zend_View_Helper_Abstract {

    	public function mainNav()
    {
        if ($this->view->layout()->navType == 'none'){
    		$html = '<div id="nav"><a href="/" id="logo">Sum puzzles</a></div>';
    	} else if($this->view->layout()->navType == 'small'){

       			$html = '<div id="nav" class="small"><a href="/" id="logo">Sum puzzles</a><ul>' .
       								'<li><a href="/puzzle/view" class="button">play a puzzle</a></li>' .
    									'<li><a href="/sequence/play" class="button">puzzle sequences</a></li>' .
    									'<li><a href="/puzzle/create" class="button">create a puzzle</a></li>';

       			if(!$this->view->user)
       			{
       				$html .=	'<li><a href="/teachers" class="button">teachers area</a></li>';
       			}	
       			$html .='</ul></div>'; 

       	} else if($this->view->layout()->navType == 'large'){
       			$html = '<div id="nav" class="large"><a href="/" id="logo">Sum puzzles</a><ul>' .
    									'<li><a href="/sequence/play" class="playSequence">Play a sequence of puzzles</a></li>' .
    									'<li><a href="/puzzle/create" class="createPuzzle">Create your own puzzles</a></li>';
       			if(!$this->view->user)
       			{
       				$html .= '<li><a href="/teachers" class="teachersArea">teachers area</a></li>';
       			}
    				$html .=	'</ul></div>'; 
       	}	
    	return $html;
    }
}

5 Cevap

Nihayet sorunun köküne var

Benim application.ini dosyasında ben çizgi vardı

resources.view[] =

Ben bir yerde bazı online öğretici kopyalanan Zend eski sürümlerinden bir miras olduğunu düşünüyorum.

O satırı silme sorunu çözüldü.

Sana yardım gereken temel bir örnek yarattı

////////////////////////////////////////////////
// application/controllers/IndexController.php
////////////////////////////////////////////////
<?php
class IndexController extends Zend_Controller_Action
{
    public function init() {
        Zend_Layout::startMvc() ;
        $this->view->test_h1 = "H1 test value" ;
    }
    public function indexAction()
    {
        $this->view->test_h2 = "H2 test value" ;
    }
}

////////////////////////////////////////////////
// application/views/helpers/Qwer.php
////////////////////////////////////////////////
<?php
class Zend_View_Helper_Qwer extends Zend_View_Helper_Abstract {
    public function qwer() {
        return "<h1>{$this->view->test_h1}</h1>"
            . "<h2>{$this->view->test_h2}</h2>" ;
    }
}

////////////////////////////////////////////////
// application/views/scripts/layout.phtml
////////////////////////////////////////////////
<?php echo $this->qwer() ?>

////////////////////////////////////////////////
// Output
////////////////////////////////////////////////
<h1>H1 test value</h1><h2>H2 test value</h2>

Eğer yardımcı sınıf bir setview yöntem oluşturmak eğer Zend_View yardımcısı içine kendini enjekte edecektir.

class Ldm_View_Helper_SubMenu
{
    public function subMenu($items)
    {
    	// Build SubMenu
    	$subMenu = '';

    	$template = '
    		<ul id="subnav">
    			%s
    		</ul>';

    	$rowTemplate = '
    			<li>
    				<a href="%s" %s>%s</a>
    			</li>';

    	$rows = '';

    	foreach ($items as $key => $values)
    	{
    		$rows .= sprintf($rowTemplate, 
    		                 $values['url'],
    		                 (($this->view->action == $key) ? 'class="selected"' : ''),
    		                 $values['name']);
    	}

    	$subMenu = sprintf($template, $rows);

    	return $subMenu;
    }

    public function setView(Zend_View_Interface $view)
    {
        $this->view = $view;
    }

Ben bir yerde bir mantık hatası olduğunu düşünüyorum eğiliminde değilim. Bu deneyin:

// in your controller action
$this->view->test = 'testing 123';

// at the start of your helper method, called from your layout
echo $this->view->test;die;

Bir şey aldın mı?

Eğer ilk kez Yardımcısı çağırdığınızda görünümü geçerli görünüme ayarlanır.

Eğer görüşlerini değiştirirseniz daha sonra doğru görünüme işaret olmayacaktır.