Commit 34268c722b4510054c371830319afcea085728ca
1 parent
e72fa263
Exists in
master
Adicionados novos métodos para {{{Core_Controller_Page_Abtract}}}:
* {{{append|prependOutput()}}}: permitem adicionar ou prefixar o conteúdo HTML a ser gerado por um {{{Core_Controller_Page_Abtract}}}, dando mais flexibilidade para a inclusão de JavaScript ou outros elementos HTML;
* Algumas classes subclassificam {{{clsConfig}}}, ao qual não está na árvore de herança de {{{Core_Controller_Page_Abstract}}}. As outras classes ({{{clsCadastro}}}, {{{clsDetalhe}}} e {{{clsListagem}}} além dos page controllers específicos) podem usar os métodos sem problemas;
* O conteúdo adicionado via estes métodos não são incluídos quando a página usa {{{$renderMenu = FALSE}}}. Isso ocorre em poucos casos no i-Educar, então verifique antes se o arquivo em que está trabalhando desabilita o menu (geralmente em arquivos que abram janelas modais ou pop-ups).
Showing
3 changed files
with
120 additions
and
2 deletions
Show diff stats
ieducar/intranet/include/clsBase.inc.php
| ... | ... | @@ -474,11 +474,26 @@ class clsBase extends clsConfig |
| 474 | 474 | return $retorno; |
| 475 | 475 | } |
| 476 | 476 | |
| 477 | + /** | |
| 478 | + * @see Core_Page_Controller_Abstract#getAppendedOutput() | |
| 479 | + * @see Core_Page_Controller_Abstract#getPrependedOutput() | |
| 480 | + */ | |
| 477 | 481 | function MakeBody() |
| 478 | 482 | { |
| 479 | 483 | $corpo = ''; |
| 480 | 484 | foreach ($this->clsForm as $form) { |
| 481 | 485 | $corpo .= $form->RenderHTML(); |
| 486 | + | |
| 487 | + // Prepend output. | |
| 488 | + if (method_exists($form, 'getPrependedOutput')) { | |
| 489 | + $corpo = $form->getPrependedOutput() . $corpo; | |
| 490 | + } | |
| 491 | + | |
| 492 | + // Append output. | |
| 493 | + if (method_exists($form, 'getAppendedOutput')) { | |
| 494 | + $corpo = $corpo . $form->getAppendedOutput(); | |
| 495 | + } | |
| 496 | + | |
| 482 | 497 | if (is_string($form->prog_alert) && $form->prog_alert) { |
| 483 | 498 | $this->prog_alert .= $form->prog_alert; |
| 484 | 499 | } |
| ... | ... | @@ -733,7 +748,7 @@ class clsBase extends clsConfig |
| 733 | 748 | $saida_geral = $this->MakeHeadHtml(); |
| 734 | 749 | |
| 735 | 750 | // @todo else ruim, colocar abre e fecha colchetes ao redor de foreach. |
| 736 | - if($this->renderMenu) { | |
| 751 | + if ($this->renderMenu) { | |
| 737 | 752 | $saida_geral .= $this->MakeBody(); |
| 738 | 753 | } |
| 739 | 754 | else { | ... | ... |
ieducar/lib/Core/Controller/Page/Abstract.php
| ... | ... | @@ -130,6 +130,11 @@ abstract class Core_Controller_Page_Abstract |
| 130 | 130 | public $url_cancelar = NULL; |
| 131 | 131 | |
| 132 | 132 | /** |
| 133 | + * @var array | |
| 134 | + */ | |
| 135 | + private $_output = array(); | |
| 136 | + | |
| 137 | + /** | |
| 133 | 138 | * Construtor. |
| 134 | 139 | */ |
| 135 | 140 | public function __construct() |
| ... | ... | @@ -384,6 +389,70 @@ abstract class Core_Controller_Page_Abstract |
| 384 | 389 | } |
| 385 | 390 | |
| 386 | 391 | /** |
| 392 | + * Adiciona conteúdo HTML após o conteúdo gerado por um | |
| 393 | + * Core_Controller_Page_Abstract. | |
| 394 | + * | |
| 395 | + * @param string $data A string HTML a ser adiciona após o conteúdo. | |
| 396 | + * @return Core_Controller_Page_Abstract Provê interface fluída | |
| 397 | + */ | |
| 398 | + public function appendOutput($data) | |
| 399 | + { | |
| 400 | + if (!empty($data) && is_string($data)) { | |
| 401 | + $this->_output['append'][] = $data; | |
| 402 | + } | |
| 403 | + return $this; | |
| 404 | + } | |
| 405 | + | |
| 406 | + /** | |
| 407 | + * Retorna todo o conteúdo acrescentado como uma string. | |
| 408 | + * @return string O conteúdo a ser acrescentado separado com uma quebra de linha. | |
| 409 | + * @see clsBase#MakeBody() | |
| 410 | + */ | |
| 411 | + public function getAppendedOutput() | |
| 412 | + { | |
| 413 | + return $this->_getOutput('append'); | |
| 414 | + } | |
| 415 | + | |
| 416 | + /** | |
| 417 | + * Adiciona conteúdo HTML antes do conteúdo HTML gerado por um | |
| 418 | + * Core_Controller_Page_Abstract. | |
| 419 | + * | |
| 420 | + * @param string $data A string HTML a ser adiciona após o conteúdo. | |
| 421 | + * @return Core_Controller_Page_Abstract Provê interface fluída | |
| 422 | + */ | |
| 423 | + public function prependOutput($data) | |
| 424 | + { | |
| 425 | + if (!empty($data) && is_string($data)) { | |
| 426 | + $this->_output['prepend'][] = $data; | |
| 427 | + } | |
| 428 | + return $this; | |
| 429 | + } | |
| 430 | + | |
| 431 | + /** | |
| 432 | + * Retorna todo o conteúdo prefixado como uma string. | |
| 433 | + * @return string O conteúdo a ser prefixado separado com uma quebra de linha. | |
| 434 | + * @see clsBase#MakeBody() | |
| 435 | + */ | |
| 436 | + public function getPrependedOutput() | |
| 437 | + { | |
| 438 | + return $this->_getOutput('prepend'); | |
| 439 | + } | |
| 440 | + | |
| 441 | + /** | |
| 442 | + * Retorna o conteúdo a ser adicionado a saída de acordo com a região. | |
| 443 | + * @param string $pos Região para retornar o conteúdo a ser adicionado na saída. | |
| 444 | + * @return string|NULL Conteúdo da região separado por uma quebra de linha ou | |
| 445 | + * NULL caso a região não exista. | |
| 446 | + */ | |
| 447 | + private function _getOutput($pos = 'prepend') | |
| 448 | + { | |
| 449 | + if (isset($this->_output[$pos])) { | |
| 450 | + return implode(PHP_EOL, $this->_output[$pos]); | |
| 451 | + } | |
| 452 | + return NULL; | |
| 453 | + } | |
| 454 | + | |
| 455 | + /** | |
| 387 | 456 | * @see CoreExt_Controller_Interface#dispatch() |
| 388 | 457 | */ |
| 389 | 458 | public function dispatch() | ... | ... |
ieducar/tests/unit/Core/Controller/Page/AbstractTest.php
| ... | ... | @@ -163,4 +163,38 @@ class Core_Controller_Page_AbstractTest extends UnitBaseTest |
| 163 | 163 | { |
| 164 | 164 | $this->_pageController->getBaseTitulo(); |
| 165 | 165 | } |
| 166 | -} | |
| 167 | 166 | \ No newline at end of file |
| 167 | + | |
| 168 | + public function testAppendOutput() | |
| 169 | + { | |
| 170 | + $this->_pageController->appendOutput('string 1') | |
| 171 | + ->appendOutput('string 2'); | |
| 172 | + | |
| 173 | + $this->assertEquals( | |
| 174 | + 'string 1' . PHP_EOL . 'string 2', | |
| 175 | + $this->_pageController->getAppendedOutput(), | |
| 176 | + '->getAppendedOutput() retorna o conteúdo a ser adicionado como uma string separada por quebra de linha' | |
| 177 | + ); | |
| 178 | + } | |
| 179 | + | |
| 180 | + public function testGetApendedOutputRetornaNullQuandoNaoExisteConteudoASerAdicionado() | |
| 181 | + { | |
| 182 | + $this->assertNull($this->_pageController->getAppendedOutput()); | |
| 183 | + } | |
| 184 | + | |
| 185 | + public function testPrependOutput() | |
| 186 | + { | |
| 187 | + $this->_pageController->prependOutput('string 1') | |
| 188 | + ->prependOutput('string 2'); | |
| 189 | + | |
| 190 | + $this->assertEquals( | |
| 191 | + 'string 1' . PHP_EOL . 'string 2', | |
| 192 | + $this->_pageController->getPrependedOutput(), | |
| 193 | + '->getPrependedOutput() retorna o conteúdo a ser adicionado como uma string separada por quebra de linha' | |
| 194 | + ); | |
| 195 | + } | |
| 196 | + | |
| 197 | + public function testGetPrependedOutputRetornaNullQuandoNaoExisteConteudoASerAdicionado() | |
| 198 | + { | |
| 199 | + $this->assertNull($this->_pageController->getPrependedOutput()); | |
| 200 | + } | |
| 201 | +} | ... | ... |