Integrando código php faq en template php

Estoy aprendiendo php y me ha surgido un problema con mi proyecto:

Mi web funciona como un CMS en php que carga un index.php como el siguiente:


<?$site="main";?>
<?include("../admin/function/db.php");?>
<?include("../inc/header.php");?>
<?
include("$DOCUMENT_ROOT/../members/content.php");
include("$DOCUMENT_ROOT/faq/faq.php");
?>

Como se puede apreciar el index.php carga varios archivos php más como header y content.php.

Mi problema viene al incluir la línea include("$DOCUMENT_ROOT/faq/faq.php");
La primera carga del faq.php la hace correctamente pero cuando se interacciona con el código, las nuevas peticiones las abre en una nueva ventana.
¿Cómo hago para que las cargas de las nuevas peticiones se hagan dentro del mismo framework?

1 respuesta

Respuesta
1
El problema no está en el include sino en lo que hay dentro.
El include lo único que hace es 'copiar' el contenido de ese fichero en el actual en la posición en que se encuentra la instrucción. Por tanto su efecto es el mismo que si lo hubieras tecleado todo junto en un fichero.
Lo que te puede ocurrir es que llames a este código desde el documento exterior una vez y desde dentro del frame otra, y por eso ese efecto que ves.
David, muchas gracias por tu rápida respuesta, investigando he encontrado la tag <iframe> que me permite insertar mi código en el marco. El problema es que ahora no me coge el css del main site y no se como hacer para lo que sale dentro del marco se vea con las mismas propiedades del main site.
¿Tienes alguna idea de como hacerlo?, muchas gracias!
La página que abres en el iframe debe tener el mismo enlace al fichero css que la página exterior (si es que el fichero existe: podría ser que los estilos estuvieran definidos dentro de la página. En ese caso, sácalos a un fichero aparte y enlázalo).
Para enlazar el fichero externo css, debes colocar una etiqueta en la sección head como la siguiente:
<link href="tuestilo.css" rel="stylesheet" type="text/css">
Hola David,
Te agradezco tu rápida respuesta.
Te explico, el contenido dentro del iframe es *.php, no es html por lo que no tengo la sección
Que me comentas. La hoja de estilos de mi main site es style.css, el problema es que no tengo ni idea de como hace para que el código incluido en este iframe tome las propiedades de la hoja de estilos ya que no es un archivo.html sino archivo.php.
Te dejo aquí el archivo.php contenido en el iframe por si te es de ayuda:
<?
include "faq_config.php";
// SHOW ADMIN HEADER
echo $admin_info[header];
// IF USER HAS CLICKED ON A QUESTION
if(isset($_GET['q_id'])) { $q_id = $_GET['q_id']; }
if($q_id != "") {
$question_query = mysql_query("SELECT * FROM faq_questions WHERE q_id='$q_id'");
$question = mysql_fetch_assoc($question_query);
if(mysql_num_rows($question_query) == 0) {
echo "
<h2>An error has occurred:</h2>
You are attempting to view an FAQ question that does not exist.
";
}
echo "
<h2>$question[question]</h2>
$question[answer]
<form action='faq.php' method='POST'>
<input type='submit' value='Back to FAQ'>
</form>
";
} else {
// IF USER IS LOOKING AT THE MAIN PAGE
$totalcount = 0;
$faq_questions = mysql_query("SELECT * FROM faq_questions");
$faqcat = mysql_query("SELECT * FROM faq_categories ORDER BY c_order");
$num_of_kitties = mysql_num_rows($faqcat);
while($faqcat_info = mysql_fetch_assoc($faqcat)) {
$questions = mysql_query("SELECT q_id, c_id, question FROM faq_questions WHERE c_id='$faqcat_info[c_id]' ORDER BY q_order");
// SHOW CATEGORY NAME, IF IT CONTAINS QUESTIONS AND CATEGORY NAMES ARE TURNED ON
if(mysql_num_rows($questions) > 0) {
if($admin_info[showcats] == 1) {
echo "
<h2>$faqcat_info[category]</h2>
";
}
}
// SHOW QUESTIONS
$count = 0;
while($question = mysql_fetch_assoc($questions)) {
$totalcount++;
$count++;
// SHOW NUMBERS IF ENABLED
if($admin_info[shownumbers] == 1) {
if($admin_info[showcats] == 1) { echo "$count. "; } else { echo "$totalcount. "; }
}
echo "<a href='faq.php?q_id=$question[q_id]'>$question[question]</a><br>";
}
// ADD SPACE AFTER THIS CATEGORY
if(mysql_num_rows($questions) != 0 AND $admin_info[showcats] == 1) {
echo "<br>";
}
}
}
// SHOW HTML FOOTER
echo $admin_info[footer];
?>

Te agradezco mucho tu interés y ayuda.
Un Saludo.
Un archivo PHP puede tener todo lo que tenga un archivo HTML. La salida (excepto en casos particulares) es una página HTML, por lo tanto, DEBERÍAS colocar todas las etiquetas HTML correctas si piensas mostrar algo en la pantalla.
Así que incluye toda la cabecera head con la línea que te he enviado anteriormente y te funcionará como quieres que te funcione.
Mil gracias David, funciona perfectamente con la etiqueta
<head>
.
He observado un problema y es que cuando haces click en un hipervínculo que está en el contenido del iframe se vuelve a cargar el site completo dentro del iframe en lugar de cargarse sólo el vínculo.
¿Cómo hago para refrecar el contenido del iframe solamente con el link?
<img src=""></a>
Te remito esta imagen con fines ilustrativos.
Muchas gracias.>
Por defecto, el enlace que pulses se cargará dentro del iframe. Y eso es en realidad lo que pasa. Pero ese enlace al que llamas no debe contener sólo 'la parte del iframe' sino que contiene toda la página y por eso vuelve a aparecer allí dentro. Quizás además de poner la sección head, has puesto más cosas de las que pensabas.
Tienes dos opciones: una, que el fichero del enlace tenga únicamente la parte que quieras ver dentro del iframe (la mejor opción), o bien, indicas en el enlace que se cargue la página 'fuera del iframe'. Concretamente, añadiendo el atributo: target="_parent" en el enlace.
En el trozo que has enviado no se ve la parte del enlace, pero seria algo como:
<a href="tupagina.php" target="_parent">
David, estoy asombrado, funciona como me decías. He utilizado target="_parent" ya que me ha parecido la opción más rápida.
De verdad que te agradezco mucho tu rápida respuesta y eficiencia. Sabes, cuando uno está aprenciendo aveces te quedas estancado y frustrado y gracias a ti aprendes y sales del atasco.
Mil gracias!
Pues caballero, un placer, seguiremos en contacto, cada vez estoy más enganchado al desarrollo web y al php así que pronto tendrás noticias mías, te agradezco mucho tu ayuda.
Tienes sobresaliente con Matricula jefe! ;-)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas