2010-12-09 17 views
6

Tengo una función que controla la salida de mi página:PHP incluye dentro de una variable

$page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$image}</div><div class='media-desc'>{$desc}</div>";

me gustaría incluir un archivo "box.php" dentro de esa html que se define en la variable $page. He intentado esto:

$page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$image}</div><div class="inlinebox">" . include("box.php"); . "</div><div class='media-desc'>{$desc}</div>";

... pero no funcionó. ¿Cómo puedo incluir un php dentro de una variable?

Respuesta

9

How can I put a php include inside of a variable?

# hello.php 
<?php 
    return "Hello, World!"; 
?> 

# file.php 
$var = include('hello.php'); 
echo $var; 

Me generalmente evitar tal cosa sin embargo.

+0

2 preguntas: 1) ¿Cómo responde esto mi pregunta? No me muestra cómo poner esa instrucción include dentro de una variable. 2) ¿Por qué evitarías tal cosa? – mattz

+0

@mattz: En realidad, esto no responde a la pregunta, solo piensa en lo que ves por un segundo ... él está "eco" de la inclusión. – Stephen

+0

@Stephen, pero ¿puedo hacerlo dentro de una definición variable como en mi pregunta? Cuando lo hago obtengo un error: 'Error de parse: error de sintaxis, T_ECHO inesperado en ...' – mattz

3

Primero, no use un punto y coma desde el interior de la declaración.
En segundo lugar, ajuste la instrucción include entre paréntesis.

$page = "<div class='media-title'><h2>{$title}</h2></div> 
<div class='media-image'>{$image}</div><div class="inlinebox">" . 
(include "box.php") . "</div><div class='media-desc'>{$desc}</div>"; 

Por último: en el archivo "box.php", tendrá que hacer lo siguiente:

<?php 
ob_start(); 

// your code goes here 

return ob_get_clean(); 

EDIT: Algo de información acerca de llamar de devolución fuera del concurso función: PHP Manual - Return.

+0

Eso activará el almacenamiento en búfer. Es una buena manera también. – santiagobasulto

+0

Intenté esto pero nada vuelve. Para probarlo puse ' 'como el contenido de mi box.php, y no hizo nada. Eliminé ob_start y ob_clean y arrojó la palabra "prueba" 4 veces. Dos veces en el encabezado, una vez arriba donde debería haber y una vez debajo donde debería tener. – mattz

2

Editar:

No sé si esto es útil, pero creo que la inclusión de un archivo para obtener una pieza de HTML, no es una buena opción. No es escalable. Podrías probar con algo como MVC. Podría pedirle a su controlador que renderice el contenido de lo que desea.

$view = $controler->getElement('box'); 

$page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$image}</div><div class="inlinebox">" . $view . "</div><div class='media-desc'>{$desc}</div>"; 

Intenta desacoplar tu código.

Le recomiendo que eche un vistazo a algunos MVC Framework, en mi opinión, el mejor es CakePHP.

+0

Estoy de acuerdo con usted acerca de MVC, y CakePHP en particular es increíble. Pero en proyectos pequeños (donde quiero hacer cosas rápidamente y pasar a proyectos geniales), usaría includes para HTML ... Dicho todo esto, parece que el OP está usando un sistema de plantillas, y por lo tanto, este no es un proyecto pequeño, y así MVC definitivamente debería ayudar, y así obtienes un +1. – Stephen

+1

Gracias por la respuesta, pero creo que esto es un poco sobre mi cabeza. Estoy seguro de que esta es una muy buena manera, pero no sé de qué mitad están hablando :) – mattz

+0

jaja, vale. Esa es una buena conclusión. Estoy de acuerdo con usted en que los proyectos pequeños que utilizan un marco no son una buena decisión. Pero, es bueno tener las cosas "organizadas". He estado buscando un pequeño marco de enrutamiento, pero no encontré ninguno. Luego, codifiqué el mío para este tipo de situaciones. Es importante codificar cosas "regulares" solo una vez, y luego reutilizar estas cosas. – santiagobasulto

13

de php.net

// put this somewhere in your main file, outside the 
// current function that contains $page 
function get_include_contents($filename) { 
    if (is_file($filename)) { 
     ob_start(); 
     include $filename; 
     $contents = ob_get_contents(); 
     ob_end_clean(); 
     return $contents; 
    } 
    return false; 
} 

// put this inside your current function 
$string = get_include_contents('box.php'); 
$page = '<div class="media-title"><h2>{$title}</h2></div>'; 
$page .= '<div class="media-image">{$image}</div>'; 
$page .= '<div class="inlinebox">' . $string . '</div>'; 
$page .= '<div class="media-desc">{$desc}</div>'; 
+1

¿Esta función es real? D: +1 –

+0

No estoy seguro de qué hacer aquí, esa variable $ page ya estaba dentro de una función. – mattz

+0

Esperemos que los comentarios ahora iluminen el problema para usted. – Stephen

Cuestiones relacionadas