Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá...
Eu estou desenvolvendo um sistema de loja virtual para um cliente. Eu estou criando todas as páginas php com as funções separadamente e depois estou inserindo o layout como um arquivo externo. Para que possam entender melhor eu estou fazendo o seguinte:´
Uma mesma página(no caso a index) chama o arquivo de funções e o arquivo de layout. Contudo, as variáveis que eu estou definindo no arquivo das funções não estão aparecendo no layout e o php retorna um erro "variable $ undefined" de variável indefinida.
Eu queria saber se vocês conhecem uma solução para o problema de modo que eu possa continuar com esse mesmo esquema, usando a index como o "visualizador" da página. No caso eu preciso saber como tornar essas variáveis possíveis de serem acessadas da página de layout.
Desde já, agradeço! ^^
essa variável é declarada dentro ou fora da função ?
não entendi 100% como está a estrutura, mas sugiro que estude o uso da função "global"
Vou dar um exemplo de como eu estou fazendo, para que fique um pouco mais claro ^^
Tenho uma página inicial index.php.
Essa página index tem um include de várias outras páginas. Um desses includes é uma página com uma função pra carregar outras páginas.
Outra função carrega a página de layout.
Então tenho:
<?php
//INDEX.PHP
$carrega = new Loader();
$carrega->('home')
$layout = new Layout();
$layout->('temas/layout');
?>
Até aqui tá tudo certo. Então eu tenho a página(home) que é só código php que define as variáveis. Depois tenho o layout(temas/layout) que vai usar essas variáveis. As páginas são inseridas normalmente e abrem. Agora vem o problema: Na página home eu defino uma variável chamada $teste. Só que quando eu vou chamar essa variável no layout, ele não encontra. Aí dá o erro:
Notice: Undefined variable: testein "endereço" on line 6
Na função que eu estou usando, eu uso o método include para inserir as páginas.
Em resumo, eu estou usando uma página para carregar duas. E em uma das páginas carregadas eu uso as variáveis da outra. Não sei se ficou mto claro.
Espero que possam me ajudar.
Obrigado
poste os codigos das classes Loader e Layout, tal como o codigo da página "home"
nao sei dizer ao certo pois precisaria ver os códigos para entender melhor o que está fazendo
mas talvez uso de herança entre classes possa resolver.
Ok...vou postar os códgos das classes.
Esse é o códido da classe que carrega as páginas.
class Carrega {
public function modelo($modelo) {
$arquivo = DIR_APLICATIVO . 'modelo/' . $modelo . '.php';
if (file_exists($arquivo)) {
include($arquivo);
} else {
exit('Erro: Impossível carregar o modelo <b> ' . $modelo . '</b>!');
}
}
}
Agora eu tenho essa página acima chamada em uma página com o include...então eu faço o seguinte:
include('carregador.php');
$variavel1 = "Variável 1";
$variavel2 = "Variavel 2";
$variaveln = "Variável n";
$carrega = new Carrega();
$carrega->modelo('comum/layout');
Então...é isso, e não está funcionando. As variáves "Variável1, 2 , n" não estão acessíveis na página "comum/layout.php".
Como resolver esse problema?
Posta o layout.php...
Carlos Eduardo
Pessoal, o layout.php é só uma página simples com o echo das outras variáveis.
Layout.php
<?php
echo $variavel1;
echo $variavel2;
echo $variaveln;
?>não é um método aconselhável, mas, a grosso modo, pode definir uma chamada global:
exemplo:
<?php
$str = 1;
class foo
{
function bar()
{
global $str;
if( $str == 1 )
{
echo 'a';
}else{
echo 'b';
}
}
}
foo::bar();
?>
outro modo, é definir uma propriedade dentro da classe
exemplo:
<?php
class foo
{
public $str;
function bar()
{
if( $this -> str == 1 )
{
echo 'a';
}else{
echo 'b';
}
}
}
$tmpl = new foo;
$tmpl -> str = 1;
$tmpl -> bar();
?>
existem outras N formas de resolver a questão,
esses são apenas 2 simples exemplos para você ter uma idéia.
Resolvido...Obrigado pela ajuda pessoal! ^^
faz assim. posta ai a linha e o erro ;)