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.
Essa variavel já está declarada no index.php e visivel no arquivo layout.html:
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?
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?
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.
O replace está sendo feito no index.php
system_wekcome_pt.html
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
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
Nataniel, já tentei desta forma e não obtive suscesso. Veja:
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.
Deculpe, leia-se index.php onde digo index.html.
Está faltando o $ no html:
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 $
Poderia me explicar? Só para maior entendimento do funcionamento do template no framework.
Do mais, obrigado pela ajuda
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.
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!