cheires Posted October 23, 2012 at 01:55 PM Report #480081 Posted October 23, 2012 at 01:55 PM (edited) 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 October 24, 2012 at 10:46 AM by cheires
HappyHippyHippo Posted October 23, 2012 at 02:05 PM Report #480083 Posted October 23, 2012 at 02:05 PM a suloção mais simples é o usro de uma destas funções: str_replace preg_replace basta usar uma espécie de marcador que será alterado com os dados dinâmicos que pretendes fornecer ao ficheiro IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
cheires Posted October 23, 2012 at 02:20 PM Author Report #480087 Posted October 23, 2012 at 02:20 PM (edited) 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 October 23, 2012 at 02:24 PM by cheires
HappyHippyHippo Posted October 23, 2012 at 02:33 PM Report #480091 Posted October 23, 2012 at 02:33 PM 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 Portugol Plus
cheires Posted October 23, 2012 at 03:41 PM Author Report #480101 Posted October 23, 2012 at 03:41 PM 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.
HappyHippyHippo Posted October 23, 2012 at 03:45 PM Report #480104 Posted October 23, 2012 at 03:45 PM se o ficheiro é em HTML, como estás a carregar para o ficheiro ?!?!? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
yoda Posted October 23, 2012 at 04:05 PM Report #480111 Posted October 23, 2012 at 04:05 PM (edited) 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 October 23, 2012 at 04:07 PM by yoda before you post, what have you tried? - http://filipematias.info sense, purpose, direction
cheires Posted October 23, 2012 at 04:16 PM Author Report #480113 Posted October 23, 2012 at 04:16 PM 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.
taviroquai Posted October 23, 2012 at 08:47 PM Report #480155 Posted October 23, 2012 at 08:47 PM 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();
cheires Posted October 24, 2012 at 09:46 AM Author Report #480213 Posted October 24, 2012 at 09:46 AM (edited) 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 October 24, 2012 at 09:47 AM by cheires
HappyHippyHippo Posted October 24, 2012 at 09:50 AM Report #480214 Posted October 24, 2012 at 09:50 AM 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 Portugol Plus
cheires Posted October 24, 2012 at 10:26 AM Author Report #480223 Posted October 24, 2012 at 10:26 AM (edited) errado, links são texto, logo continua a ser uma solução válida [EDIT] erro meu. Estava a substituir pelo assunto da mensagem, por isso não apareciam as tags. Sim está a funcionar, resolvido. Obrigado a todos Edited October 24, 2012 at 10:31 AM by cheires
HappyHippyHippo Posted October 24, 2012 at 10:32 AM Report #480228 Posted October 24, 2012 at 10:32 AM apresenta aqui o resutlado final : o html que é enviado para o cliente se apresentares o HTML original e os dados inseridos também ajudava IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
taviroquai Posted October 24, 2012 at 12:00 PM Report #480245 Posted October 24, 2012 at 12:00 PM (edited) 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 October 24, 2012 at 12:01 PM by taviroquai
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now