Como recuperar uma variável TSession em outra página HTML Olá pessoal, dei uma lida num post do Pablo de 2013 e não está funcionando para recuperar a variável TSession na nova Template4. O cenário é o seguinte: No HTML system_welcome_pt.html preciso recuperar a variável de uma seção {pedidosdia} que contem a quantidade de pedidos do dia. ...
AM
Como recuperar uma variável TSession em outra página HTML  
Olá pessoal, dei uma lida num post do Pablo de 2013 e não está funcionando para recuperar a variável TSession na nova Template4.

O cenário é o seguinte:

No HTML system_welcome_pt.html preciso recuperar a variável de uma seção {pedidosdia} que contem a quantidade de pedidos do dia.

<div class="info-box bg-pink hover-expand-effect"> <div class="icon"> <i class="material-icons">add_shopping_cart</i> </div> <div class="content"> <div class="text">NOVOS PEDIDOS</div> <div class="number count-to" data-from="0" data-to="125" data-speed="15" data-fresh-interval="20">{pedidosdia}</div> </div> </div>


Essa variavel já está declarada no index.php e visivel no arquivo layout.html:

$content = str_replace('{pedidosdia}', TSession::getValue('pedidosdia'), $content);


Testei no menu lateral que faz parte do layout.html e o valor {pedidosdia} aparece, porém no system_welcome_pt.html ela não aparece.

Alguém pode dar uma luz?



Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (9)


NR

Alan, acho que o problema aí é outro, pois o trecho {pedidosdia} deveria ser substituído mesmo que o TSession::getValue('pedidosdia') retorne nulo.

Em que arquivo você está executando esse replace?

Qualquer coisa poste a classe inteira.
AM

O replace está sendo feito no index.php

 
  1. <?php
  2. require_once 'init.php';
  3. $theme = $ini['general']['theme'];
  4. $class = isset($_REQUEST['class']) ? $_REQUEST['class'] : '';
  5. $public = in_array($class, $ini['permission']['public_classes']);
  6. new TSession;
  7. if ( TSession::getValue('logged') )
  8. {
  9. $content = file_get_contents("app/templates/{$theme}/layout.html");
  10. $menu_string = AdiantiMenuBuilder::parse('menu.xml', $theme);
  11. $content = str_replace('{MENU}', $menu_string, $content);
  12. if ((TSession::getValue('login') == 'admin') && isset($ini['general']['token']))
  13. {
  14. $content = str_replace('{IF-BUILDER}', '', $content);
  15. $content = str_replace('{/IF-BUILDER}','', $content);
  16. }
  17. }
  18. else
  19. {
  20. $content = file_get_contents("app/templates/{$theme}/login.html");
  21. }
  22. $content = str_replace('{IF-BUILDER}', '<!--', $content);
  23. $content = str_replace('{/IF-BUILDER}', '-->', $content);
  24. $content = ApplicationTranslator::translateTemplate($content);
  25. $content = str_replace('{LIBRARIES}', file_get_contents("app/templates/{$theme}/libraries.html"), $content);
  26. $content = str_replace('{class}', $class, $content);
  27. $content = str_replace('{template}', $theme, $content);
  28. $content = str_replace('{username}', TSession::getValue('username'), $content);
  29. $content = str_replace('{usermail}', TSession::getValue('usermail'), $content);
  30. $content = str_replace('{avatar}', TSession::getValue('avatar'), $content);
  31. //----------------------------------AQUI ESTÁ SENDO FEITO O REPLACE -----------------------------------//
  32. $content = str_replace('{pedidosdia}', TSession::getValue('pedidosdia'), $content);
  33. //-----------------------------------------------------------------------------------------------------------------------------//
  34. $content = str_replace('{frontpage}', TSession::getValue('frontpage'), $content);
  35. $content = str_replace('{query_string}', $_SERVER["QUERY_STRING"], $content);
  36. $css = TPage::getLoadedCSS();
  37. $js = TPage::getLoadedJS();
  38. $content = str_replace('{HEAD}', $css.$js, $content);
  39. echo $content;
  40. if (TSession::getValue('logged') OR $public)
  41. {
  42. if ($class)
  43. {
  44. $method = isset($_REQUEST['method']) ? $_REQUEST['method'] : NULL;
  45. AdiantiCoreApplication::loadPage($class, $method, $_REQUEST);
  46. }
  47. }
  48. else
  49. {
  50. AdiantiCoreApplication::loadPage('LoginForm', '', $_REQUEST);
  51. }
  52. </code>


system_wekcome_pt.html

<!--[main]--> <!-- Widgets --> <div class="row clearfix"> <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12"> <div class="info-box bg-pink hover-expand-effect"> <div class="icon"> <i class="material-icons">add_shopping_cart</i> </div> <div class="content"> <div class="text">NOVOS PEDIDOS</div> //----------------------------------------------------------------------------------------------------------------------AQUI A VARIAVEL pedidosdia---// <div class="number count-to" data-from="0" data-to="125" data-speed="15" data-fresh-interval="20">{pedidosdia}</div> //-------------------------------------------------------------------------------------------------------------------------------------------------------------------// </div> </div> </div> <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12"> <div class="info-box bg-cyan hover-expand-effect"> <div class="icon"> <i class="material-icons">shopping_cart</i> </div> <div class="content"> <div class="text">PEDIDOS LIBERADOS</div> <div class="number count-to" data-from="0" data-to="257" data-speed="1000" data-fresh-interval="20">55</div> </div> </div> </div> <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12"> <div class="info-box bg-light-green hover-expand-effect"> <div class="icon"> <i class="material-icons">forum</i> </div> <div class="content"> <div class="text">NOVAS MENSAGENS</div> <div class="number count-to" data-from="0" data-to="243" data-speed="1000" data-fresh-interval="20">32</div> </div> </div> </div> <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12"> <div class="info-box bg-orange hover-expand-effect"> <div class="icon"> <i class="material-icons">notifications_active</i> </div> <div class="content"> <div class="text">NOVAS NOTIFICAÇÕES</div> <div class="number count-to" data-from="0" data-to="1225" data-speed="1000" data-fresh-interval="20">20</div> </div> </div> </div> </div> <!-- #END# Widgets --> <!--[/main]-->


WelcomeView.class.php

/**
* WelcomeView
*
* @version 1.0
* @package control
* @author Pablo Dall'Oglio
* @copyright Copyright (c) 2006 Adianti Solutions Ltd. (www.adianti.com.br)
* @license www.adianti.com.br/framework-license
*/
class WelcomeView extends TPage
{
/**
* Class constructor
* Creates the page
*/
function __construct()
{
parent::__construct();

$html1 = new THtmlRenderer('app/resources/system_welcome_pt.html');

// replace the main section variables
$html1->enableSection('main', array());

//$panel1->add($html1);

$panel1 = new TPanelGroup('Seja Bem-vindo!');
$panel1->add($html1);

// container
$container = new TVBox;
$container->style = 'width: 100%';
$container->add($this->form);
$container->add($panel1);
parent::add($container);

}
}


Estes são os 3 arquivos envolvidos
NR

Alan, usando o THtmlRenderer, o replace deve ser feito dentro da classe WelcomeView e não no index. Veja o exemplo do tutor:
adianti.com.br/framework_files/tutor/index.php?class=TemplateViewBas
AM

Nataniel, já tentei desta forma e não obtive suscesso. Veja:

$html1 = new THtmlRenderer('app/resources/system_welcome_pt.html'); $session = array(); $session['pedidosdia'] = TSession::getValue('pedidosdia'); // replace the main section variables $html1->enableSection('main', $session);


O resultado na exibição no html continua o mesmo, exibindo o nome do marcador {pedidosdia} e não o valor do seu conteúdo.

O estranho é que declaramos a variável no index.html e seu conteudo é visivel no layout.html, já no system_welcome_pt.html não, mesmo dando o replace no WelcomeView.
AM

Deculpe, leia-se index.php onde digo index.html.
NR

Está faltando o $ no html:
 
  1. <?php
  2. <div class="number count-to" data-from="0" data-to="125" data-speed="15" data-fresh-interval="20">{$pedidosdia}</div>
  3. ?>
AM

Funcionou Nataniel, porém, não entendi pq no layout.html funciona sem o $ no html.

Consigo imprimir junto com {username} o valor de {pedidosdia} sem o $

 
  1. <?php
  2. <div class="name" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{username} {pedidosdia}</div>
  3. ?>


Poderia me explicar? Só para maior entendimento do funcionamento do template no framework.

Do mais, obrigado pela ajuda
NR

Alan, são coisas distintas.

No index.php a substituição é feita diretamente, usando o comando str_replace em uma string. A classe THtmlRenderer funciona de outra maneira. Você não faz o replace diretamente, é necessário passar um array com as modificações desejadas e a classe se encarrega de fazer os replaces.
AM

Show Nataniel, eu imaginei isso, continuo estudando as classes do Adianti, é muita coisa e muitas dúvidas.

Vc faz parte da equipe da Adianti?

Vlew pela explicação, obrigado!