gremio10 14 Denunciar post Postado Novembro 3, 2011 Fala galera, eu estava pesquisando no google, como criar um view Helper, para facilitar a construção de um HTML meu que eu sempre utilizo... construi ele assim... não sei se está correto ^_^ class Zend_View_Helper_likeButton extends Zend_View_Helper_Abstract { protected $total; protected $html; public function generateButton( $class, $type_id, $type ) { $this->buttonBody( $class, $type_id, $type ); $this->counter( $type_id ); return $this->html; } public function getTotal() { return $this->total; } public function setTotal( $total ) { $this->total = $total; } private function buttonBody( $class, $type_id, $type ) { if( $this->getTotal == 0 ) { $this->html = sprintf( "<form class='%s' type-id='%s' type-like='%s' value-type-count-like='%d'>", $class, $type_id, $type, $this>getTotal ); $this->html .= "<input type='submit' value='Recomendar' class='bt-recomendar-small' />"; $this->html .= "</form>"; } else { $this->html = "<div class='bt-recomendar-small-clicked'>Recomendado por você</div>"; } return $this; } private function counter( $id ) { $this->html .= sprintf( "<div class='%s'>", "recomendacoes_box" ); $this->html .= sprintf( "<div class='%s'></div>", "rec-tip-l" ); $this->html .= sprintf( "<div class='%s' id='%d'>", "rec-tip-m", $id ); $this->html .= sprintf( "%d", $this->getTotal ); $this->html .= "</div>"; $this->html .= sprintf( "<div class='%s'></div>", "rec-tip-r" ); $this->html .= "</div>"; return $this; } } coloquei ele no library - Zend - View - Helper mas quando coloco na minha view $this->setTotal( 10 ); ele não funciona, e retorna um erro de controller ... acho que esse tipo de erro se deve por eu estar usando modulo, por que se não utilizasse, ficaria me dizendo qual o verdadeiro erro.. minha Bootstrap ficou assim: protected function _initHelpers() { $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); $viewRenderer->initView(); $viewRenderer->view->addHelperPath('Zend/View/Helper/', 'Zend_View_Helper'); } e nada =/ Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
[VAZA] 0 Denunciar post Postado Novembro 3, 2011 e na view...como você esta fazendo para demonstrar esse view helper? Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 3, 2011 Fiz assim: <?php $this->setTotal( "10" ); echo $this->generateButton( "likeLiga", "10", "doencas" ); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Novembro 3, 2011 Dessa forma que você está fazendo está errado. Primeiro, deixe o nome da classe com letra maiúscula: class Zend_View_Helper_LikeButton extends Zend_View_Helper_Abstract { Crie um método com o nome da classe que retorne o próprio objeto (o método sim deve começar com letra minúscula): public function likeButton() { return $this; } No método setTotal faça com que ele também retorne o objeto: public function setTotal($total) { $this->total = $total; return $this; } Agora na view faça assim: echo $this->likeButton()->setTotal(10)->generateButton('likeLiga', 10, 'doencas'); Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 3, 2011 Cara, funcionou, o problema é que o html não está sendo escrito na página... quando eu dou um print_r() no $this, ele me mostra o botão... Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Novembro 3, 2011 Espera um pouco, estou analisando melhor a sua classe. Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 3, 2011 Veja como ficou : <?php class Zend_View_Helper_LikeButton extends Zend_View_Helper_Abstract { protected $total; protected $html; public function likeButton() { return $this; } public function generateButton( $class, $type_id, $type ) { $this->buttonBody( $class, $type_id, $type ); $this->counter( $type_id ); return $this; } public function setTotal( $total ) { $this->total = $total; return $this; } private function buttonBody( $class, $type_id, $type ) { if( $this->total == 0 ) { $this->html = sprintf( "<form class='%s' type-id='%s' type-like='%s' value-type-count-like='%d'>", $class, $type_id, $type, $this->total ); $this->html .= "<input type='submit' value='Recomendar' class='bt-recomendar-small' />"; $this->html .= "</form>"; } else { $this->html = "<div class='bt-recomendar-small-clicked'>Você deve estar logado</div>"; } return $this->html; } private function counter( $id ) { $this->html .= sprintf( "<div class='%s'>", "recomendacoes_box" ); $this->html .= sprintf( "<div class='%s'></div>", "rec-tip-l" ); $this->html .= sprintf( "<div class='%s' id='%d'>", "rec-tip-m", $id ); $this->html .= sprintf( "%d", $this->total ); $this->html .= sprintf( "</div>" ); $this->html .= sprintf( "<div class='%s'></div>", "rec-tip-r" ); $this->html .= sprintf( "</div>" ); return $this; } } acredito que tenha feito corretamente :huh: Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Novembro 3, 2011 No método buttonBody retire o return e no método generateButton coloque return $this->html; no lugar de return $this;. Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 3, 2011 :lol: , que coisa :ermm: <?php class Zend_View_Helper_LikeButton extends Zend_View_Helper_Abstract { protected $total; protected $html; public function likeButton() { return $this; } public function generateButton( $class, $type_id, $type ) { $this->buttonBody( $class, $type_id, $type ); $this->counter( $type_id ); return $this->html; } public function setTotal( $total ) { $this->total = $total; return $this; } private function buttonBody( $class, $type_id, $type ) { if( $this->total == 0 ) { $this->html = sprintf( "<form class='%s' type-id='%s' type-like='%s' value-type-count-like='%d'>", $class, $type_id, $type, $this->total ); $this->html .= "<input type='submit' value='Recomendar' class='bt-recomendar-small' />"; $this->html .= "</form>"; } else { $this->html = "<div class='bt-recomendar-small-clicked'>Você deve estar logado</div>"; } } private function counter( $id ) { $this->html .= sprintf( "<div class='%s'>", "recomendacoes_box" ); $this->html .= sprintf( "<div class='%s'></div>", "rec-tip-l" ); $this->html .= sprintf( "<div class='%s' id='%d'>", "rec-tip-m", $id ); $this->html .= sprintf( "%d", $this->total ); $this->html .= sprintf( "</div>" ); $this->html .= sprintf( "<div class='%s'></div>", "rec-tip-r" ); $this->html .= sprintf( "</div>" ); return $this; } } Eu estou fazendo correto, mandando ele retornar um HTML? Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Novembro 3, 2011 Sim, ao meu ver é melhor usar return pra retornar o HTML do que dar "echo" dentro da própria classe. Mas observe que tem alguns erros no seu código, como essa linha onde você usa a função sprintf apenas com o primeiro parâmetro e sem nada pra formatar na string: $this->html .= sprintf( "</div>" ); Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 3, 2011 Consegui :lol: :lol: <?php class Zend_View_Helper_LikeButton extends Zend_View_Helper_Abstract { public $total; public $html; public function likeButton() { return $this; } public function generateButton( $class, $type_id, $type ) { $this->buttonBody( $class, $type_id, $type ); $this->counter( $type_id ); return $this; } public function setTotal( $total ) { $this->total = $total; return $this; } public function buttonBody( $class, $type_id, $type ) { if( $this->total == 0 ) { $this->html = sprintf( "<form class='%s' type-id='%s' type-like='%s' value-type-count-like='%d'>", $class, $type_id, $type, $this->total ); $this->html .= "<input type='submit' value='Recomendar' class='bt-recomendar-small' />"; $this->html .= "</form>"; } else { $this->html = "<div class='bt-recomendar-small-clicked'>Você deve estar logado</div>"; } return $this; } public function counter( $id ) { $this->html .= sprintf( "<div class='%s'>", "recomendacoes_box" ); $this->html .= sprintf( "<div class='%s'></div>", "rec-tip-l" ); $this->html .= sprintf( "<div class='%s' id='%d'>", "rec-tip-m", $id ); $this->html .= sprintf( "%d", $this->total ); $this->html .= "</div>"; $this->html .= sprintf( "<div class='%s'></div>", "rec-tip-r" ); $this->html .= "</div>"; return $this->html; } } na view: <?php $buttonLike = $this->likeButton()->setTotal( 10 )->generateButton( "likeLiga", 10, "doencas" ); echo $$buttonLike->html; ?> Obrigado pela paciência e ajuda!! Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Novembro 4, 2011 Vou dar só umas dicas pra você melhorar isso aí, se você fizer o que eu sugeri no post #8, retirando o "return" do método buttonBody já que ele é um método para uso interno, e colocando no médodo generateButton um "return $this->html;" em vez de apenas "return $this;", bastaria você fazer isso na view: echo $this->likeButton()->setTotal(10)->generateButton('likeLiga', 10, 'doencas'); Também não vi muito sentido em você usar tantos métodos dentro da view. Note que você passa apenas 3 parâmentros diferentes por eles, então dava pra você melhorar isso e fazer com que retornasse tudo usando apenas o método likeButton(), ficando assim: echo $this->likeButton('likeLiga', 10, 'doencas'); Lembre-se que o objetivo dos helpers é facilitar e não complicar as coisas. ;) Um abraço! Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 4, 2011 Obrigado pelas dicas, vou implementa-las :lol: abraços! :joia: Compartilhar este post Link para o post Compartilhar em outros sites