HTML dentro de una funcion PHP

1,499 views
Skip to first unread message

Reynaldo G. R.

unread,
Mar 28, 2013, 10:16:25 AM3/28/13
to php...@googlegroups.com
Hola a todos, lo que me esta sucediendo es lo siguinte:

tengo una funcion con un bloque HTML dentro de esta forma:

<?php

function test()
{
    ?>
   
     <tabla><tr><td> este es mi texto html </td></tr></tabla>
    
     <?php
}

?>


lo que sucede es que cuando quiero usar esa funcion por ejemplo para igualar una variable a esa funcion:

$a =  test();

sin hacer el echo ya se imprime en pantalla de esa forma, como si ubiera ejecutado echo $a;

lo que quiero es poder igualar la funcion a una variable o usar la funcion dentro de algun if pero sin que se me muestre en pantalla. que solo se muestre cuando yo diga  echo $a; por ejemplo.

ota via seria igualar el contenido html a una varible dentro de la misma funcion pero no se como se hace que no me de error en la salida.

Santiago Rojo

unread,
Mar 28, 2013, 10:24:14 AM3/28/13
to php...@googlegroups.com
Hola Reynaldo,

Para que la función retorne un valor, vos tendrías que hacer:

<?php

function test() {
    return "<tabla><tr><td> este es mi texto html </td></tr></tabla>";
}

$a = test();

?>

De lo contrario, lo que hace tu versión de test(), es imprimir lo que esta fuera de las etiquetas de PHP. No se si de esta forma se entiende, o quizá haya que profundizar un poco mas en mi explicación.

Cualquier cosa, avisa y aclaro un poco mas.

Saludos.

2013/3/28 Reynaldo G. R. <reynal...@gmail.com>


--
Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP Argentina" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a php-arg+u...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a php...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/php-arg?hl=es.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 



--
Santiago Rojo

Joel Alejandro Villarreal Bertoldi

unread,
Mar 28, 2013, 10:25:05 AM3/28/13
to php...@googlegroups.com
Para que una función devuelva un valor tenés que usar return. Y para poder usar return en este caso, tenés que guardar todo en una variable.

Para que se mantenga legible, podés hacer algo como esto:

function test() {
$html = <<<HTML
<table><tr><td> ... </td></tr></table>
HTML;
return $html;
}

O sino:

function test() {
return "<table><tr><td></td></tr></table>";
}

y luego:

$a = test();



Moobin
  D.G. Joel A. Villarreal Bertoldi | Co-Founder
  +54 0351 460 8875 - Skype: joel.al...@moobin.net


Tordek

unread,
Mar 28, 2013, 10:32:24 AM3/28/13
to php...@googlegroups.com
On 28/03/13 11:16, Reynaldo G. R. wrote:
> Hola a todos, lo que me esta sucediendo es lo siguinte:
>
> tengo una funcion con un bloque HTML dentro de esta forma:

No hagas eso.
>
> <?php
>
> function test()
> {
> ?>
>
> <tabla><tr><td> este es mi texto html </td></tr></tabla>
>
> <?php
> }
>
> ?>
No hagas eso.
>
>
> lo que sucede es que cuando quiero usar esa funcion por ejemplo para
> igualar una variable a esa funcion:
>
> $a = test();
>
> sin hacer el echo ya se imprime en pantalla de esa forma, como si
> ubiera ejecutado echo $a;

No tiene nada que ver con haber ejecutado echo.

>
> lo que quiero es poder igualar la funcion a una variable o usar la
> funcion dentro de algun if pero sin que se me muestre en pantalla.
> que solo se muestre cuando yo diga echo $a; por ejemplo.

No hagas eso.
>
> ota via seria igualar el contenido html a una varible dentro de la
> misma funcion pero no se como se hace que no me de error en la salida.
>
No hagas eso.

Ac� lo que est� pasando es esto:

> <?php // che, int�rprete, ahora te voy a dar PHP. Procesalo.
>
> function test()
> {
// Che, int�rprete, ahora no te voy a dar m�s PHP. Mandalo
que siga de largo.
> ?>
>
> <tabla><tr><td> este es mi texto html </td></tr></tabla>
>
> <?php // Che, int�rprete, volvimos a PHP.
> }

Lo que vos quer�s (no hagas esto) es:

function noHagasEsto()
{
return '<tabla><tr><td> este es mi texto html </td></tr></tabla>';
}

$a = noHagasEsto();

(Pero no hagas eso).

Digo 'no hagas eso' porque si mezcl�s HTML en tus funciones que
generan resultados resulta mucho m�s complicado tratar de cambiar
eso m�s adelante.
--
Guillermo O. �Tordek� Freschi. Programador, Escritor, Genio Maligno.
http://tordek.com.ar :: http://twitter.com/tordek

Reynaldo G. R.

unread,
Mar 28, 2013, 10:34:31 AM3/28/13
to php...@googlegroups.com
este ejemplo esta muy bien, pero el lio es que en realizadad la tabla
es bien grande y hay comillas dentro de ellas con estilos y mas
contenidos, se me hace engorroso tener que ponerle backslash a todas
esas comillas para que no me den error en la salida, espero me
entiendas por eso opte por la opcion de meter el html fuera del php.

El 28/03/13, Santiago Rojo <tia...@gmail.com> escribió:
> *Santiago Rojo*
>
> --
> Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP
> Argentina" de Grupos de Google.
> Para anular la suscripción a este grupo y dejar de recibir sus correos
> electrónicos, envía un correo electrónico a
> php-arg+u...@googlegroups.com.
> Para publicar una entrada en este grupo, envía un correo electrónico a
> php...@googlegroups.com.
> Visita este grupo en http://groups.google.com/group/php-arg?hl=es.
> Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
>
>
>


--
Reynaldo González Rodríguez
Licenciado en Informática

Cel: (+53) 53358326
E-mail: reynal...@gmail.com
Blog: http://rgraptor.wordpress.com

Tordek

unread,
Mar 28, 2013, 10:37:47 AM3/28/13
to php...@googlegroups.com
On 28/03/13 11:34, Reynaldo G. R. wrote:
> este ejemplo esta muy bien, pero el lio es que en realizadad la tabla
> es bien grande y hay comillas dentro de ellas con estilos y mas
> contenidos, se me hace engorroso tener que ponerle backslash a todas
> esas comillas para que no me den error en la salida, espero me
> entiendas por eso opte por la opcion de meter el html fuera del php.

Joel te da una mano con eso (igual, le� el resto de mi mail, porque
sigue siendo relevante): us� HEREDOC, que usa la siguiente sintaxis

$foo = <<<HTML
blablablabla
HTML;

donde "HTML" puede ser cualquier string de letras (en particular,
algo que no planees encontrar en tus datos).

(Pero, de paso: no generes HTML en una funci�n. Te va a morder tarde
o temprano.)

Reynaldo G. R.

unread,
Mar 28, 2013, 10:40:10 AM3/28/13
to php...@googlegroups.com
me resulta imprescindible meter el HTML en alguna funcion o en alguna
variable, imagina es una tabla mas grande con comillas y caracteres
especiales, como se puede hacer eso sin tener que poner los backslash
en todas las comillas que tiene la tabla para que no me de error en la
salida...?



El 28/03/13, Tordek <ked...@gmail.com> escribió:
> On 28/03/13 11:16, Reynaldo G. R. wrote:
>> Hola a todos, lo que me esta sucediendo es lo siguinte:
>>
>> tengo una funcion con un bloque HTML dentro de esta forma:
>
> No hagas eso.
>>
>> <?php
>>
>> function test()
>> {
>> ?>
>>
>> <tabla><tr><td> este es mi texto html </td></tr></tabla>
>>
>> <?php
>> }
>>
>> ?>
> No hagas eso.
>>
>>
>> lo que sucede es que cuando quiero usar esa funcion por ejemplo para
>> igualar una variable a esa funcion:
>>
>> $a = test();
>>
>> sin hacer el echo ya se imprime en pantalla de esa forma, como si
>> ubiera ejecutado echo $a;
>
> No tiene nada que ver con haber ejecutado echo.
>
>>
>> lo que quiero es poder igualar la funcion a una variable o usar la
>> funcion dentro de algun if pero sin que se me muestre en pantalla.
>> que solo se muestre cuando yo diga echo $a; por ejemplo.
>
> No hagas eso.
>>
>> ota via seria igualar el contenido html a una varible dentro de la
>> misma funcion pero no se como se hace que no me de error en la salida.
>>
> No hagas eso.
>
> Acá lo que está pasando es esto:
>
> > <?php // che, intérprete, ahora te voy a dar PHP. Procesalo.
> >
> > function test()
> > {
> // Che, intérprete, ahora no te voy a dar más PHP. Mandalo
> que siga de largo.
> > ?>
> >
> > <tabla><tr><td> este es mi texto html </td></tr></tabla>
> >
> > <?php // Che, intérprete, volvimos a PHP.
> > }
>
> Lo que vos querés (no hagas esto) es:
>
> function noHagasEsto()
> {
> return '<tabla><tr><td> este es mi texto html </td></tr></tabla>';
> }
>
> $a = noHagasEsto();
>
> (Pero no hagas eso).
>
> Digo 'no hagas eso' porque si mezclás HTML en tus funciones que
> generan resultados resulta mucho más complicado tratar de cambiar
> eso más adelante.
> --
> Guillermo O. «Tordek» Freschi. Programador, Escritor, Genio Maligno.
> http://tordek.com.ar :: http://twitter.com/tordek
>

Reynaldo G. R.

unread,
Mar 28, 2013, 10:42:15 AM3/28/13
to php...@googlegroups.com
o sea que se utiliza <<< y luego pongo todo el html que tengo...?

El 28/03/13, Tordek <ked...@gmail.com> escribió:
> On 28/03/13 11:34, Reynaldo G. R. wrote:
>> este ejemplo esta muy bien, pero el lio es que en realizadad la tabla
>> es bien grande y hay comillas dentro de ellas con estilos y mas
>> contenidos, se me hace engorroso tener que ponerle backslash a todas
>> esas comillas para que no me den error en la salida, espero me
>> entiendas por eso opte por la opcion de meter el html fuera del php.
>
> Joel te da una mano con eso (igual, leé el resto de mi mail, porque
> sigue siendo relevante): usá HEREDOC, que usa la siguiente sintaxis
>
> $foo = <<<HTML
> blablablabla
> HTML;
>
> donde "HTML" puede ser cualquier string de letras (en particular,
> algo que no planees encontrar en tus datos).
>
> (Pero, de paso: no generes HTML en una función. Te va a morder tarde
> o temprano.)
>
>
> --
> Guillermo O. «Tordek» Freschi. Programador, Escritor, Genio Maligno.
> http://tordek.com.ar :: http://twitter.com/tordek
>

Joel Alejandro Villarreal Bertoldi

unread,
Mar 28, 2013, 10:42:56 AM3/28/13
to php...@googlegroups.com
Justamente Reynaldo, HEREDOC te soluciona todo eso:

$html = <<<HTML
<table class="soy una tabla">
<tr>
<td><a href="#" target="_blank">Soy un link en una tabla</a></td>
</tr>
</table>
HTML;


Moobin
  D.G. Joel A. Villarreal Bertoldi | Co-Founder
  +54 0351 460 8875 - Skype: joel.al...@moobin.net


Tordek

unread,
Mar 28, 2013, 10:48:08 AM3/28/13
to php...@googlegroups.com
On 28/03/13 11:42, Reynaldo G. R. wrote:
> o sea que se utiliza <<< y luego pongo todo el html que tengo...?
no;

$foo = <<<ALGUNAPALABRA
<tu contenido>
ALGUNAPALABRA;

el 'ALGUNAPALABRA' es lo que vos quieras, es un string que vos
eleg�s y declar�s como delimitador de tu string. Fijate que aparece
2 veces: una inmediatamente despu�s del <<<, para indicar que ahi
empieza el string, y una al final, para indicar que ah� termina.

(Pero, de nuevo: en lo posible, no generes HTML desde adentro de una
funci�n; si pod�s usar un sistema de templates te vas a ahorrar mil
dolores de cabeza.)

Reynaldo G. R.

unread,
Mar 28, 2013, 10:56:19 AM3/28/13
to php...@googlegroups.com
ok, gracias tendre encuenta tus recomendaciones, por el momento pruebo
a ver que sucede. gracias tambien a todos por la rápida contestación.


El 28/03/13, Tordek <ked...@gmail.com> escribió:
> On 28/03/13 11:42, Reynaldo G. R. wrote:
>> o sea que se utiliza <<< y luego pongo todo el html que tengo...?
> no;
>
> $foo = <<<ALGUNAPALABRA
> <tu contenido>
> ALGUNAPALABRA;
>
> el 'ALGUNAPALABRA' es lo que vos quieras, es un string que vos
> elegís y declarás como delimitador de tu string. Fijate que aparece
> 2 veces: una inmediatamente después del <<<, para indicar que ahi
> empieza el string, y una al final, para indicar que ahí termina.
>
> (Pero, de nuevo: en lo posible, no generes HTML desde adentro de una
> función; si podés usar un sistema de templates te vas a ahorrar mil
> dolores de cabeza.)
>
>
> --
> Guillermo O. «Tordek» Freschi. Programador, Escritor, Genio Maligno.
> http://tordek.com.ar :: http://twitter.com/tordek
>

Mariano Gomez

unread,
Mar 28, 2013, 11:10:48 AM3/28/13
to php...@googlegroups.com
Podrias probar con los buffers y sus funciones:
ob_start(), flush(), ob_clean()... mas tarde te puedo enviar las funciones q usaba exactamente yo hace un tiempo

Ricardo Luis Mender

unread,
Mar 28, 2013, 11:31:44 AM3/28/13
to php...@googlegroups.com
Creo que todo es valido, a lo que va Tordek, con "No hagas eso" son recomendaciones de buenas prácticas. Se puede usar Heredoc, ob_start(), flush(), ob_clean()...  etc.
Pero como dice Tordek eso luego llegara a ser un dolor de cabeza para otro programador, cero escalabilidad, legibilidad del codigo, con el tiempo se convertirá en codigo spaguetti.
 
Podes usar Smarty, un gestor de plantillas facil de implementar.
 
Saludos
Ricardo Luis Mender

Santiago Rojo

unread,
Mar 28, 2013, 1:06:53 PM3/28/13
to php...@googlegroups.com
+1 a los "No hagas eso" de Tordek. Seguramente habrá una forma mas limpia de tener ese HTML.


2013/3/28 Ricardo Luis Mender <ricu...@gmail.com>



--
Santiago Rojo

Reynaldo G. R.

unread,
Mar 28, 2013, 3:36:19 PM3/28/13
to php...@googlegroups.com
bueno separé el HTML y lo estoy llamando desde un include, pero si
igualo las funciones a una variable inmediatamente me imprime en
pantalla los HTML, lo que quiero es que no se imprima en pantalla
hasta que yo le diga con un echo.

function t_h()
{
return(include("t_header.html"));
}

function t_c()
{
return(include("t_contenido.html"));
}

$tth = t_h();
$ttc = t_c();

a penas lo igualo se imprime...???






El 28/03/13, Santiago Rojo <tia...@gmail.com> escribió:
>> https://groups.google.com/groups/opt_out
>> .
>>
>>
>>
>
>
>
> --
> *Santiago Rojo*
>

Mariano Gomez

unread,
Mar 28, 2013, 4:08:31 PM3/28/13
to php...@googlegroups.com
a menos que uses los buffers, si

Reynaldo G. R.

unread,
Mar 28, 2013, 4:43:05 PM3/28/13
to php...@googlegroups.com
no me funciona ahora no saca nada, creo me falta algo:

function t_h()
{
$th = include("t_header.html");
}

function t_c()
{
$tc = include("t_contenido.html");
}

ob_start("t_h");

ob_start("t_c");

$tth = t_h();
$ttc = t_c();

ob_end_flush();
ob_end_flush();

echo $tth;
echo $ttc;

aqui no imprime nada.......





El 28/03/13, Mariano Gomez <marian...@gmail.com> escribió:

Joel Alejandro Villarreal Bertoldi

unread,
Mar 28, 2013, 5:06:44 PM3/28/13
to php...@googlegroups.com

ver el manual de php: http://www.php.net/manual/en/function.include.php

Example #6 Using output buffering to include a PHP file into a string

<?php
$string 
get_include_contents('somefile.php');

function 
get_include_contents($filename) {
    if (
is_file($filename)) {
        
ob_start();
        include 
$filename;
        return 
ob_get_clean();
    }
    return 
false;
}

?>

Moobin
  D.G. Joel A. Villarreal Bertoldi | Co-Founder
  +54 0351 460 8875 - Skype: joel.al...@moobin.net


Tordek

unread,
Mar 28, 2013, 6:35:11 PM3/28/13
to php...@googlegroups.com
On 28/03/13 16:36, Reynaldo G. R. wrote:
> bueno separ� el HTML y lo estoy llamando desde un include, pero si
> igualo las funciones a una variable inmediatamente me imprime en
> pantalla los HTML, lo que quiero es que no se imprima en pantalla
> hasta que yo le diga con un echo.
>
> function t_h()
> {
> return(include("t_header.html"));
> }

El anterior era "no hagas eso porque seguramente tus requisitos van
a cambiar, y vas a complicarte la vida mil veces al querer hacer eso".

Esto es "no hagas esto porque juro que averiguo donde vivis y lo que
har�a no lo puedo decir en p�blico".

Podr�as hacer esto (pero, ya sab�s):

t_header.php:

<?php
$datos = <<<NOHAGAESTO
<table><tr><th>lalala</th></tr>
NOHAGASESTO;

main.php:

function t_h() {
return include('t_header.php');
}

Pero est�s agregando bocha de c�digo que vas a repetir, y ejecutando
PHP para meter en una variable un valor que vas a imprimir
inmediatamente despu�s.

Podr�as usar buffers, pero es una soluci�n equivocada al problema
equivocado:

function t_h() {
ob_start();
include("t_h.php");
return ob_get_flush();
}

Si de verdad est�s empecinado en hacer esto, y todos los datos son
est�ticos, pod�s poner

function t_h() {
return file_get_contents("t_h.html");
}

Hago la pregunta que tenia que hacer desde el principio: �qu� est�s
haciendo? �estos datos son est�ticos? Pod�s hacerlo de otra forma m�s:

<?php
echo "estos son unos datos que imprimo";
echo "y ac� pongo una $variable";
echo "pero ahora quiero poner una tabla est�tica que nunca va a
cambiar";

include('tabla.html');
?>

O lo que te estamos recomendando repetidamente (porque no conocemos
tu problema; solo tu pregunta): usar smarty y delegar la generacion
de HTML.

Tordek

unread,
Mar 28, 2013, 6:36:07 PM3/28/13
to php...@googlegroups.com
On 28/03/13 19:35, Tordek wrote:

> Podr�as hacer esto (pero, ya sab�s):
>
> t_header.php:
>
> <?php
> $datos = <<<NOHAGAESTO
> <table><tr><th>lalala</th></tr>
> NOHAGASESTO;
>
> return $datos;
> ?>

^correci�n (aunque, igual, no deber�as hacer esto).

Camello Ar

unread,
Mar 28, 2013, 11:29:35 PM3/28/13
to php...@googlegroups.com

Lo que podes hacer es una función que formatee los datos y los  pasas a la función que los recupera. Algo como

function recupera_data() {
$tabla = "<table>..."; //los ... indican otros html que lleve la tabla
$datos = información (PE consulta db); //datos en un array tipo [n]->array de campos del registro y su contenido
foreach ($datos as $linea) {
$tabla = $tabla +formatear_linea($linea);
}
$tabla = $tabla."...</table>"; //los ... indican otros html que lleve la tabla
return $tabla;
}
function formatear_linea($dato) {

//algo simple, pero aca podes verificar datos para determinar css, si es link, si no, incluso yo en un caso hice una función que alternaba el css para poner una linea de un color y la siguiente de otro para hacer más legible
$linea = "<tr>";
foreach ($dato as $campo) {
$linea = $linea."<td>$campo</td>";
}
$linea = $linea."</tr>";
return $linea;
}

Y lo ejecutas con

$a = recupera_data();
echo $a; //esta linea donde querés insertar la tabla

(seguro el código me quedo con errores de sintaxis y tipeo es como para dar una idea)

Igual no me quedó claro que es lo que tenés que hacer. Si una tabla estática , dinámica., o un mixto extraño

El mar 28, 2013 7:35 p.m., "Tordek" <ked...@gmail.com> escribió:
On 28/03/13 16:36, Reynaldo G. R. wrote:
bueno separé el HTML y lo estoy llamando desde un include, pero si

igualo las funciones a una variable inmediatamente me imprime en
pantalla los HTML, lo que quiero es que no se imprima en pantalla
hasta que yo le diga con un echo.

function t_h()
{
return(include("t_header.html"));
}

El anterior era "no hagas eso porque seguramente tus requisitos van a cambiar, y vas a complicarte la vida mil veces al querer hacer eso".

Esto es "no hagas esto porque juro que averiguo donde vivis y lo que haría no lo puedo decir en público".

Podrías hacer esto (pero, ya sabés):


t_header.php:

<?php
$datos = <<<NOHAGAESTO
<table><tr><th>lalala</th></tr>
NOHAGASESTO;

main.php:

function t_h() {
   return include('t_header.php');
}

Pero estás agregando bocha de código que vas a repetir, y ejecutando PHP para meter en una variable un valor que vas a imprimir inmediatamente después.

Podrías usar buffers, pero es una solución equivocada al problema equivocado:


function t_h() {
ob_start();
include("t_h.php");
return ob_get_flush();
}

Si de verdad estás empecinado en hacer esto, y todos los datos son estáticos, podés poner


function t_h() {
return file_get_contents("t_h.html");
}

Hago la pregunta que tenia que hacer desde el principio: ¿qué estás haciendo? ¿estos datos son estáticos? Podés hacerlo de otra forma más:


<?php
echo "estos son unos datos que imprimo";
echo "y acá pongo una $variable";
echo "pero ahora quiero poner una tabla estática que nunca va a cambiar";


include('tabla.html');
?>

O lo que te estamos recomendando repetidamente (porque no conocemos tu problema; solo tu pregunta): usar smarty y delegar la generacion de HTML.

--
Guillermo O. «Tordek» Freschi. Programador, Escritor, Genio Maligno.
http://tordek.com.ar :: http://twitter.com/tordek

--
Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP Argentina" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a php-arg+unsubscribe@googlegroups.com.

Reynaldo G. R.

unread,
Mar 29, 2013, 7:25:55 AM3/29/13
to php...@googlegroups.com
lo que estoy haciendo es simplemente una tabla que la he dividido en
el header y en content, luego de sus sugerencias las puse divididas en
dos HTML, porque en realidad lo veo más factible por si hay que
arreglar el contenido, lo que quiero es poder cargar esas dos partes y
poder utilizarlas despues cuando yo las necesite en algun lugar de
otra pagina, no es un sitio web, no es una plantilla es simplemente un
archivo, lo que trato es de poder tener el control de poder ubicar el
header de la tabla y su contenido en el lugar y el momento que
necesito, por eso las quiero poner en una variable, para poderla sacar
despues.

El 28/03/13, Tordek <ked...@gmail.com> escribió:
> On 28/03/13 16:36, Reynaldo G. R. wrote:
>> bueno separé el HTML y lo estoy llamando desde un include, pero si
>> igualo las funciones a una variable inmediatamente me imprime en
>> pantalla los HTML, lo que quiero es que no se imprima en pantalla
>> hasta que yo le diga con un echo.
>>
>> function t_h()
>> {
>> return(include("t_header.html"));
>> }
>
> El anterior era "no hagas eso porque seguramente tus requisitos van
> a cambiar, y vas a complicarte la vida mil veces al querer hacer eso".
>
> Esto es "no hagas esto porque juro que averiguo donde vivis y lo que
> haría no lo puedo decir en público".
>
> Podrías hacer esto (pero, ya sabés):
>
> t_header.php:
>
> <?php
> $datos = <<<NOHAGAESTO
> <table><tr><th>lalala</th></tr>
> NOHAGASESTO;
>
> main.php:
>
> function t_h() {
> return include('t_header.php');
> }
>
> Pero estás agregando bocha de código que vas a repetir, y ejecutando
> PHP para meter en una variable un valor que vas a imprimir
> inmediatamente después.
>
> Podrías usar buffers, pero es una solución equivocada al problema
> equivocado:
>
> function t_h() {
> ob_start();
> include("t_h.php");
> return ob_get_flush();
> }
>
> Si de verdad estás empecinado en hacer esto, y todos los datos son
> estáticos, podés poner
>
> function t_h() {
> return file_get_contents("t_h.html");
> }
>
> Hago la pregunta que tenia que hacer desde el principio: ¿qué estás
> haciendo? ¿estos datos son estáticos? Podés hacerlo de otra forma más:
>
> <?php
> echo "estos son unos datos que imprimo";
> echo "y acá pongo una $variable";
> echo "pero ahora quiero poner una tabla estática que nunca va a
> cambiar";
>
> include('tabla.html');
> ?>
>
> O lo que te estamos recomendando repetidamente (porque no conocemos
> tu problema; solo tu pregunta): usar smarty y delegar la generacion
> de HTML.
>
> --
> Guillermo O. «Tordek» Freschi. Programador, Escritor, Genio Maligno.
> http://tordek.com.ar :: http://twitter.com/tordek
>

Tordek

unread,
Mar 29, 2013, 7:29:17 AM3/29/13
to php...@googlegroups.com
On 29/03/13 08:25, Reynaldo G. R. wrote:
> lo que estoy haciendo es simplemente una tabla que la he dividido en
> el header y en content, luego de sus sugerencias las puse divididas en
> dos HTML, porque en realidad lo veo m�s factible por si hay que
> arreglar el contenido, lo que quiero es poder cargar esas dos partes y
> poder utilizarlas despues cuando yo las necesite en algun lugar de
> otra pagina, no es un sitio web, no es una plantilla es simplemente un
> archivo, lo que trato es de poder tener el control de poder ubicar el
> header de la tabla y su contenido en el lugar y el momento que
> necesito, por eso las quiero poner en una variable, para poderla sacar
> despues.

A menos que exista alg�n caso donde uses el header sin el contenido
o viceversa, �por qu� no met�s toda la tabla en un mismo HTML y la
insert�s con include? En vez de tratar de meterla en una variable
para sacarla con echo.

Reynaldo G. R.

unread,
Mar 29, 2013, 8:06:37 AM3/29/13
to php...@googlegroups.com
si, pero en ocasiones no necesito que se muestre en pantalla
simplemente la quiero manipular, por ejemplo enviandola en una
variable hacia otra pagina, o recorrerla para buscar algo, o
enviandola por email, lo que al poner el include sencillamente se me
imprime, lo que quiero es eso ponerla en una funcion o en alguna
variable para poderla trabajar sin que se imprima. alguna otra idea..?

El 29/03/13, Tordek <ked...@gmail.com> escribió:
> On 29/03/13 08:25, Reynaldo G. R. wrote:
>> lo que estoy haciendo es simplemente una tabla que la he dividido en
>> el header y en content, luego de sus sugerencias las puse divididas en
>> dos HTML, porque en realidad lo veo más factible por si hay que
>> arreglar el contenido, lo que quiero es poder cargar esas dos partes y
>> poder utilizarlas despues cuando yo las necesite en algun lugar de
>> otra pagina, no es un sitio web, no es una plantilla es simplemente un
>> archivo, lo que trato es de poder tener el control de poder ubicar el
>> header de la tabla y su contenido en el lugar y el momento que
>> necesito, por eso las quiero poner en una variable, para poderla sacar
>> despues.
>
> A menos que exista algún caso donde uses el header sin el contenido
> o viceversa, ¿por qué no metés toda la tabla en un mismo HTML y la
> insertás con include? En vez de tratar de meterla en una variable
> para sacarla con echo.
>
> --
> Guillermo O. «Tordek» Freschi. Programador, Escritor, Genio Maligno.
> http://tordek.com.ar :: http://twitter.com/tordek
>

Adrian Ramiro

unread,
Mar 29, 2013, 8:09:15 AM3/29/13
to php...@googlegroups.com
Reynaldo, podrías poner toda la tabla en un archivo y a este cargarlo con file_get_contents() dentro de una variable y con ella hacer lo que gustes


2013/3/29 Reynaldo G. R. <reynal...@gmail.com>



--
/**
* @author: Adrian R. Gay Cattaneo
*/

Tordek

unread,
Mar 29, 2013, 8:14:10 AM3/29/13
to php...@googlegroups.com
On 29/03/13 09:06, Reynaldo G. R. wrote:
> si, pero en ocasiones no necesito que se muestre en pantalla
> simplemente la quiero manipular, por ejemplo enviandola en una
> variable hacia otra pagina, o recorrerla para buscar algo, o
> enviandola por email, lo que al poner el include sencillamente se me
> imprime, lo que quiero es eso ponerla en una funcion o en alguna
> variable para poderla trabajar sin que se imprima. alguna otra idea..?

Le� mi otro mail, tiene muchas soluciones a tu pregunta
(desafortunadamente, no a tu porblema).

Lo que te vuelvo a preguntar es:

�por qu� no met�s eso en una estructura de datos m�s apropiada que
"un string que tiene una tabla en HTML"?

Por ejemplo, pod�s tener un array de arrays, y hacer esto:

$table_data = array(
array("nombre" => "juan", "apellido" => "perez", "dni" => "123");
array("nombre" => "ivan", "apellido" => "dias", "dni" => "1234");
}

Ahora pod�s recorrer esa variable y modificar tus datos de manera
mucho m�s c�moda que parseando un string.

M�s adelante, para imprimirla, te gener�s una funci�n

imprimir_tabla($tabla) {
echo "<table>";
echo "<tr><th>Nombre</th><th>Apellido</th><th>DNI</th></tr>";
foreach ($tabla as $fila) {
echo "<tr><td>" . $fila['nombre'] . [ dem�s campos ];
}

echo '</table>';
}

y finalmente hac�s

<h1>Ac� presento mi tabla</h1>
<?php imprimir_tabla($tabla); ?>

Reynaldo G. R.

unread,
Mar 29, 2013, 11:44:56 AM3/29/13
to php...@googlegroups.com
ok, muchas gracias lo tendré en cuenta

El 29/03/13, Tordek <ked...@gmail.com> escribió:
> On 29/03/13 09:06, Reynaldo G. R. wrote:
>> si, pero en ocasiones no necesito que se muestre en pantalla
>> simplemente la quiero manipular, por ejemplo enviandola en una
>> variable hacia otra pagina, o recorrerla para buscar algo, o
>> enviandola por email, lo que al poner el include sencillamente se me
>> imprime, lo que quiero es eso ponerla en una funcion o en alguna
>> variable para poderla trabajar sin que se imprima. alguna otra idea..?
>
> Leé mi otro mail, tiene muchas soluciones a tu pregunta
> (desafortunadamente, no a tu porblema).
>
> Lo que te vuelvo a preguntar es:
>
> ¿por qué no metés eso en una estructura de datos más apropiada que
> "un string que tiene una tabla en HTML"?
>
> Por ejemplo, podés tener un array de arrays, y hacer esto:
>
> $table_data = array(
> array("nombre" => "juan", "apellido" => "perez", "dni" => "123");
> array("nombre" => "ivan", "apellido" => "dias", "dni" => "1234");
> }
>
> Ahora podés recorrer esa variable y modificar tus datos de manera
> mucho más cómoda que parseando un string.
>
> Más adelante, para imprimirla, te generás una función
>
> imprimir_tabla($tabla) {
> echo "<table>";
> echo "<tr><th>Nombre</th><th>Apellido</th><th>DNI</th></tr>";
> foreach ($tabla as $fila) {
> echo "<tr><td>" . $fila['nombre'] . [ demás campos ];
> }
>
> echo '</table>';
> }
>
> y finalmente hacés
>
> <h1>Acá presento mi tabla</h1>
> <?php imprimir_tabla($tabla); ?>
>
>
>
>
> --
> Guillermo O. «Tordek» Freschi. Programador, Escritor, Genio Maligno.
> http://tordek.com.ar :: http://twitter.com/tordek
>

Reynaldo G. R.

unread,
Mar 29, 2013, 11:47:33 AM3/29/13
to php...@googlegroups.com
si esa idea creo que me sirve, muchas gracias por la ayuda.

$th = file_get_contents("t_header.html");
$tc = file_get_contents("t_contenido.html");

de esta forma puedo controlar el html dentro de una variable.



El 29/03/13, Adrian Ramiro <adri...@gmail.com> escribió:

David

unread,
Mar 30, 2013, 1:36:18 PM3/30/13
to php...@googlegroups.com
On Thu, 2013-03-28 at 10:40 -0400, Reynaldo G. R. wrote:
> me resulta imprescindible meter el HTML en alguna funcion o en alguna
> variable, imagina es una tabla mas grande con comillas y caracteres
> especiales, como se puede hacer eso sin tener que poner los backslash
> en todas las comillas que tiene la tabla para que no me de error en la
> salida...?
>

No te lo tomes personal pero odio las entrañas de los programadores que
hacen eso, es increible como se puede poner de complejo el tema si es
una costumbre del programador de una pagina que despues tenes que
arreglar vos.

Creo que lo mejor que podes hacer (tal vez no ahora, pero si en
proyectos futuros) es usar algun tipo de motor de templates quedaria
algo como.


//funciones.php

function test(){

$html_var = $motor_template->procesar('archivo.html');
return $html_var;
}

//archivo.html

<tabla>
<tr>
<td>
este es mi texto html que es facil de leer y modificar
el moto de templates hasta me permite tener variable que me
pasaron como parametros.
<?php if(!empty($variable)): ?>
<?php echo $variable; ?>
<?php endif; ?>
</td>
</tr>
</tabla>

De esta forma separas la logica de tu funcion y como se ve el resultado.
signature.asc
Reply all
Reply to author
Forward
0 new messages