Jump to content

[resolvido]Ler conteudo de ficheiro dinamicamente


cheires
 Share

Recommended Posts

Olá a todos,

A ideia do que preendia fazer era enviar uma newsletter, em que, apenas o corpo da mensagem será diferente em todas.

Estou a ir buscar o conteudo do ficheiro html através da função file_get_contents();

Isto funcionava bem enquanto o conteudo do ficheiro HTML era estático, mas passou a ser dinâmico, e tenho que passar parametros para o ficheiro.

Alguma solução para isto?

Tentei utilizar a mesma função passando parametros por GET, mas não funciona.

Abraço a todos

Edited by cheires
Link to comment
Share on other sites

Obrigado pela sugestão HappyHippyHippo.

Mas penso que isso não me irá servir, ou eu é que não estou a entender o que pretendes dizer.

Pela forma como estou a criar a newsletter, estou a salvar o corpo (a parte dinâmica) numa base de dados, e a carregar esse corpo no ficheiro em causa.

Numa navegação normal, o que faria era passar o parametro ID no url e depois no ficheiro, recorrendo ao php, ia à BD buscar o corpo de acordo com o ID.

Mas teria que passar o parâmentro, e não estou a ver forma de o fazer.

Edited by cheires
Link to comment
Share on other sites

Mas penso que isso não me irá servir, ou eu é que não estou a entender o que pretendes dizer.

será mais a segunda ...

Pela forma como estou a criar a newsletter, estou a salvar o corpo (a parte dinâmica) numa base de dados, e a carregar esse corpo no ficheiro em causa.

e como estas a carregar para o ficheiro ?

Numa navegação normal, o que faria era passar o parametro ID no url e depois no ficheiro, recorrendo ao php, ia à BD buscar o corpo de acordo com o ID.

Mas teria que passar o parâmentro, e não estou a ver forma de o fazer.

não tens de passar parâmetro nenhum, a informação está na base de dados, basta "enfiar" no html

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

será mais a segunda ...

e como estas a carregar para o ficheiro ?

não tens de passar parâmetro nenhum, a informação está na base de dados, basta "enfiar" no html

Estou a carregar directamente da base de dados para o ficheiro, e por isso o ficheiro tem que "saber" o que terá que carregar, daí a necessidade de passar um parametro.

A Base de dados não irá conter apenas um "corpo", mas sim vários.

Link to comment
Share on other sites

Como o @HappyHippyHippo mencionou, podes usar as referidas funções para alcançares o que queres.

Por exemplo, imagina que no PHP começas por carregar o html da newsletter, usando a função que indicas-te. A partir daí, basta que clones a variável que tiver esse template e substituas as tags respectivas no html pelos conteúdos dinâmicos que pretendes dentro de um loop :

// template da newsletter
$html = file_get_contents('newsletter.html');
// loop para correr os registos da base de dados um a um
foreach ($db_result as $row)
{
 // a mensagem herda o html original
 $message = $html;
 // incluis por exemplo o nome do utilizador
 // não existem regras aqui, podes escolher o tipo de tags que quiseres no html
 // vou usar chavetas duplas neste caso
 $message = str_replace('{{name}}', $row['name'], $messagem);
// envia o email
mail( ... , $message, ....)
}

Isto transformaria

<p>{{name}}</p>

em

<p>José Alberto</p>
Edited by yoda
Link to comment
Share on other sites

se o ficheiro é em HTML, como estás a carregar para o ficheiro ?!?!?

Como estou a fazer, o ficheiro HTML é estático, à excepção do texto que terá a newsletter (que ficará guardado na BD).

É tipo um template, modificando apenas o estritamente necessário.

Ao usar a função file_get_contents(nome do ficheiro) ele copia todo o texto do ficheiro HTML, que já está criado

Como o @HappyHippyHippo mencionou, podes usar as referidas funções para alcançares o que queres.

Por exemplo, imagina que no PHP começas por carregar o html da newsletter, usando a função que indicas-te. A partir daí, basta que clones a variável que tiver esse template e substituas as tags respectivas no html pelos conteúdos dinâmicos que pretendes dentro de um loop :

// template da newsletter
$html = file_get_contents('newsletter.html');
// loop para correr os registos da base de dados um a um
foreach ($db_result as $row)
{
 // a mensagem herda o html original
 $message = $html;
 // incluis por exemplo o nome do utilizador
 // não existem regras aqui, podes escolher o tipo de tags que quiseres no html
 // vou usar chavetas duplas neste caso
 $message = str_replace('{{name}}', $row['name'], $messagem);
// envia o email
mail( ... , $message, ....)
}

Isto transformaria

<p>{{name}}</p>

em

<p>José Alberto</p>

Yoda, obrigado pela explicação. Consegui perceber o pretendido.

E de facto parece-me uma solução. Vou averiguar.

Link to comment
Share on other sites

Como o @HappyHippyHippo mencionou, podes usar as referidas funções para alcançares o que queres.

Por exemplo, imagina que no PHP começas por carregar o html da newsletter, usando a função que indicas-te. A partir daí, basta que clones a variável que tiver esse template e substituas as tags respectivas no html pelos conteúdos dinâmicos que pretendes dentro de um loop :

// template da newsletter
$html = file_get_contents('newsletter.html');
// loop para correr os registos da base de dados um a um
foreach ($db_result as $row)
{
 // a mensagem herda o html original
 $message = $html;
 // incluis por exemplo o nome do utilizador
 // não existem regras aqui, podes escolher o tipo de tags que quiseres no html
 // vou usar chavetas duplas neste caso
 $message = str_replace('{{name}}', $row['name'], $messagem);
// envia o email
mail( ... , $message, ....)
}

Isto transformaria

<p>{{name}}</p>

em

<p>José Alberto</p>

Bem, depois de verificar a tua solução, e que, apenas com texto, funciona às mil maravilhas.

O problema será mesmo a imprevisibilidade que terei na newsletter.

Se a newsletter fosse somento composta por texto, e sempre da mesma forma, esta solução era suficiente.

Mas como a newsletter a enviar tanto terá texto, apenas ou texto com links ou apenas links, e desta forma (substituir a string pelo texto na BD que pode conter tags html) não funciona, pois só substitui o texto...

Em todo caso, foi uma bela sugestão, obrigado

Mais simples...


// definir conteudo...
$titulo = 'bla bla bla...';

ob_start();
include 'newsletter.php'; // incluir ficheiro php com a estrutura HTML da newsletter...
$newsletter = ob_get_clean();

É também uma solução válida, mas continuo com o mesmo problema, o texto a ser carregado da BD fica no meio do código HTML.

O ficheiro newsletter.php tem que saber o que carregar da BD.

Este exemplo seria mais indicado para substituir a função file_get_contents.

Edited by cheires
Link to comment
Share on other sites

O problema será mesmo a imprevisibilidade que terei na newsletter.

Se a newsletter fosse somento composta por texto, e sempre da mesma forma, esta solução era suficiente.

Mas como a newsletter a enviar tanto terá texto, apenas ou texto com links ou apenas links, e desta forma (substituir a string pelo texto na BD que pode conter tags html) não funciona, pois só substitui o texto...

Em todo caso, foi uma bela sugestão, obrigado

errado,

links são texto, logo continua a ser uma solução válida

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

O ficheiro newsletter.php tem que saber o que carregar da BD.

A apresentação não precisa de saber descarregar os dados da base de dados. Podes descarregar os dados antes de incluir o ficheiro de apresentação onde coloquei $titulo = 'bla bla bla' ... depois basta na apresentação echo $titulo.

Mas como a newsletter a enviar tanto terá texto, apenas ou texto com links ou apenas links, e desta forma (substituir a string pelo texto na BD que pode conter tags html) não funciona, pois só substitui o texto...

É para isso que se usa mais do que 1 ficheiro de apresentação, conforme o formato da newsletter.

Edited by taviroquai
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.