2015-11-07 5 views
1

У меня есть ярлык, и я хочу, чтобы изменить его цвет: так я делаю это: у меня есть свой класс формы в Зенд:декораторы Zend Framework PHP

$this->addElement('text','name',array('label' => 'Name Event')); 
$this->getElement("name") 
     ->addDecorator("EditLabel"); 

и вот мой декоратор:

class OrarLib_Form_Decorator_EditLabel extends Zend_Form_Decorator_Abstract 
{ 

protected $html = '<div class = "label"> %s </div>'; 
public function init() 
{ 
    parent::init(); 
} 

public function render($content) 
{ 
    $label = $this->getElement()->getLabel(); 
    return sprintf($this->html, $label, $content); 
} 
} 

И проблема в том, что мой текстовый код исчезает, когда я использую этот декоратор. Я использую рамки Zend. Я не так хорош, что я делаю неправильно?

ответ

1

Я думаю, что вы забыли concate $ содержание так:

class OrarLib_Form_Decorator_EditLabel extends Zend_Form_Decorator_Abstract 
{ 

    protected $html = '<div class = "label"> %s </div>'; 
    public function init() 
    { 
     parent::init(); 
    } 

    public function render($content) 
    { 
     $label = $this->getElement()->getLabel(); 
     $markup = sprintf($this->html, $label); 

     $placement = $this->getPlacement(); 
     $separator = $this->getSeparator(); 

     switch ($placement) { 
      case self::PREPEND: 
       return $markup . $separator . $content; 
      case self::APPEND: 
      default: 
       return $content . $separator . $markup; 
     } 
    } 
} 

Теперь попробуйте это:

$this->getElement("name")->addDecorator(array('EditLabel', array('placement' => 'append')); 

Если вы хотите узнать больше проверить это:

Layering Decorators

+0

проблема была здесь: protected $ html = '

%s
'; и решена: protected $ html = '
%s
% s'; –

+0

Да, вы тоже можете это сделать. –