Foros del Web » Programando para Internet » PHP »

Pagina por modulos

Estas en el tema de Pagina por modulos en el foro de PHP en Foros del Web. Buenas, Soy bastante desastre con las paginas, y acabo llenandolas muchissimo, un amigo me dijo que lo hiciera por modulos, separar partes del codigo y ...
  #1 (permalink)  
Antiguo 21/12/2012, 18:12
 
Fecha de Ingreso: mayo-2009
Mensajes: 232
Antigüedad: 14 años, 11 meses
Puntos: 3
Pagina por modulos

Buenas,

Soy bastante desastre con las paginas, y acabo llenandolas muchissimo, un amigo me dijo que lo hiciera por modulos, separar partes del codigo y despues con u ninclude ir montandolas.

Pero me surge un problema, has lo simplificare:

Si tengo una barra arriba, header.php, y dentro de el hay el logo de la pagina, que linkea a 'index.php'..

Esto lo incluyo en cada pagina y listo, pero el problema biene si lo incluyo dentro de una pagina que esta dentro de una carpeta, porque claro el link del logo deberia lincar a '../index.php'.

Imagino que es una novatada fallar en eso ;)
  #2 (permalink)  
Antiguo 21/12/2012, 18:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pagina por modulos

Claro, la novatada es usar el mismo enlace relativo, lo ideal es usar rutas absolutas.

Edito: lee esto http://css-tricks.com/php-include-from-root/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 21/12/2012, 19:26
 
Fecha de Ingreso: mayo-2009
Mensajes: 232
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Pagina por modulos

ok gracias! ;)
  #4 (permalink)  
Antiguo 22/12/2012, 10:08
 
Fecha de Ingreso: mayo-2009
Mensajes: 232
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Pagina por modulos

He estado mirandolo, pero o no me sirve, o no lo tengo claro.

Uso el wamp, si hago un echo a $_SERVER['DOCUMENT_ROOT'], C:/wamp/www/ .

Si lo hago en el servidor, en este caso 1&1, me devuelve /kunden/homepages/31/d389258167/htdocs

Para el wamp deberia poner $_SERVER['DOCUMENT_ROOT']."gclimb/imagenes" por ejemplo.

Y en el servidor?

Entonces en index.php tengo :

Código PHP:
Ver original
  1. <?php echo $_SERVER['DOCUMENT_ROOT']; ?>
  2.         <?php $path =  $_SERVER['DOCUMENT_ROOT']."gclimb/img/sin.jpg"?>
  3.        <?php echo $path; ?>
  4. <img src=" <?php echo $path; ?>" alt="">
  5. <img src=" img/sin.jpg" alt="">

Lo que me devuelve:

C:/wamp/www/
C:/wamp/www/gclimb/img/sin.jpg
y la primera imagen no me la pone, pero la que cargo sin php si.



Segui probando e igual al incluir el header.

Código PHP:
Ver original
  1. <?php
  2.  
  3. $p = $_SERVER['DOCUMENT_ROOT']."gclimb/header.php";
  4.   include "$p"; ?>

Si la abro desde localhost, me carga el header bien, pero si lo cargo desde el servidor web:


Warning: include(/kunden/homepages/31/d389258167/htdocsgclimb/header.php)

Última edición por phyronx; 22/12/2012 a las 10:22
  #5 (permalink)  
Antiguo 23/12/2012, 19:16
 
Fecha de Ingreso: mayo-2009
Mensajes: 232
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Pagina por modulos

ninguna solucion a un error de novato?
  #6 (permalink)  
Antiguo 23/12/2012, 21:27
Avatar de bLEx  
Fecha de Ingreso: mayo-2008
Ubicación: Villa Alemana, Chile
Mensajes: 181
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Pagina por modulos

Yo creo que la solución a tu problema (comentado al comienzo) es al reves.
Debes crearte una página principal que tenga el header, footer y una parte para cargar los modulos.

Por ejemplo:
Código PHP:
<html>
<body>
<header><? include('/tema/header.php'); ?> </header>
<div id="main">
<? include('/modulos.php'); ?>
<footer><? include('/tema/footer.php'); ?> </footer>
</div>
Donde header y footer siempre serán llamados desde la misma parte, por lo que la url de las rutas no cambiará.

Por otro lado el archivo modulos.php debiera ser de la forma

modulos.php
Código PHP:
$modulo $_GET['modulo'];
if(!
is_null($modulo))
{
    if(
$modulo == 'articulo') include('/modulos/articulos.php');
    else if(
$modulo == 'contacto') include('/modulos/contacto.php');
    else include(
'/home.php');

Entonces cuando quieras cargar el contenido de articulos.php llamas a la siguiente ruta:

http://www.urlsitio.com/?modulo=articulos

Revisa si te sirve y me cuentas como te va.
Además te recomiendo ir leyendo acerca de frameworks php (cakephp, zend framwork, etc.) y el modelo vista controlador (MVC), que te entregan una forma más ordenada de desarrollar tus sitios.
  #7 (permalink)  
Antiguo 24/12/2012, 08:15
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pagina por modulos

Cita:
Iniciado por phyronx Ver Mensaje

Código PHP:
Ver original
  1. <?php echo $_SERVER['DOCUMENT_ROOT']; ?>
  2.         <?php $path =  $_SERVER['DOCUMENT_ROOT']."gclimb/img/sin.jpg"?>
  3.        <?php echo $path; ?>
  4. <img src=" <?php echo $path; ?>" alt="">
  5. <img src=" img/sin.jpg" alt="">
Código PHP:
Ver original
  1. <?php
  2. $path =  getcwd().DIRECTORY_SEPARATOR;
  3. $img = "gclimb/img/sin.jpg";
  4. ?>
  5. <img src=" <?php echo $path.$img; ?>" alt="">

Última edición por webankenovi; 24/12/2012 a las 08:27
  #8 (permalink)  
Antiguo 24/12/2012, 08:50
 
Fecha de Ingreso: enero-2010
Mensajes: 8
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Pagina por modulos

Hola yo las paginas las separo en varias partes y carpetas separadas:

En el directorio raíz creo un fichero index.php que contiene algo asi:

index.php
Código PHP:
<?php
//Sesiones
session_start();
$_SESSION['usuario'] = 'usuarios';

//Constantes
define("TITULO_WEB""Tomaa!!!!!!!");    //Titulo de la web


    //Meta datos de la web
    
define("META_DESCRIPTION""");
    
define("META_KEYWORDS""");
    
define("META_AUTOR""Aitor Martin");
    
define("COPY_WEB""&copy; 2010-".date('Y')." Copy.....");
    
define("COPY_WEBMASTER""");

//Includes
include_once "lng/lng.php";         //Cargamos lel motor de los idiomas
include_once "datos/data.php";             //Conectamos con la base de datos de la web
include_once "datos/sql.php";             //Cargamos las funciones de las consultas SQL de la web
include_once "funciones/funciones.php";         //Cargamos las funciones de la web

include_once "css/aspecto_001/index.php";         //Plantilla a utilizar:
?>

Como puedes ver en la última linea del código anterior el documento echo en html y CSS lo guardo en css/aspecto_001/index.php, si he creado mas variantes de la web como puede ser un motivo navideño o veraniego o lo que se te ocurra lo guardas en otras carpetas css/aspecto_002/index.php o css/aspecto_003/index.php y luego modificando el index o me jor ahun desde una DB puedes modificar el aspecto en custión de segundo.


Código PHP:
<div id="site">

    <div class="center-wrapper">

        <div id="header">
            <div class="right" id="toolbar"><?php dame_idiomas(); ?></div>

            <div class="clearer">&nbsp;</div>

            <div id="site-title"><?php dame_cabecera (); ?></div>
            <div id="navigation"><?php dame_menu_superior (); ?></div>
        </div>

        <div class="main" id="main-two-columns">
            <div class="left" id="main-left"><div id="contenido"><?php dame_contenido (); ?></div></div>
            <div class="right sidebar" id="sidebar"><?php dame_barra_lateral (); ?></div>

            <div class="clearer">&nbsp;</div>

        </div>

        <div id="footer">
            <div class="content-separator"></div>
            <div class="left"><?php echo COPY_WEB?></div>
            <div class="right"><?php echo COPY_WEBMASTER?></div>

            <div class="clearer">&nbsp;</div>

        </div>

    </div>
</div>

</body>
En este último código como se puede ver los diferente elementos a mostrar les llamo mediante funciones <?php dame_contenido (); ?>....


Mediante este codigo hago una carga dinamica del contenido de la web.
Código PHP:
function dame_contenido ()
  {
  if (isset(
$_GET['id']))
    {
    switch (
$_GET['id']) 
      {
      case 
'inicio':            dame_noticias ();break;
          
      
//Valor por defecto
      
default:                dame_noticias ();break;
      }
    }
    else
    {
    
dame_noticias ();
    }
  } 
Luego mediante este otro codigo muestro el contenido:

Código PHP:
function dame_noticias ()
  {
  
$lineas dame_numero_registros ("articulo""WHERE id_lng='".$_SESSION['lang']."'");//Calculamos cuantas lineas tiene la tabla.
  
$link=Conectarse();                            //Abrimos la conexion.
  
$resultado sql_noticias ($_SESSION['lang']);            //Adquirimos las noticias.
  
  //Primero creamos un contador para saber cuantos cilcos ha echo el while. El while a mostrando las notias
  //el if comprueva si es la úlima noticia, si es la última no muestra la linea que separa las noticias.
  
$i 0;
  while (
$fila mysql_fetch_assoc($resultado))
    {
      
$i++;
      echo
      
"
      <div class='post'>

          <div class='post-title'><h2><a href='#'>"
.$fila['titulo']."</a></h2></div>

          <div class='post-date'>"
.$fila['fecha']."</div>

          <div class='post-body'>"
.$fila['texto']."</div>
      </div>"
;

      if (
$i $lineas) echo" <div class='content-separator'></div>";

    }
    
    
  
mysql_free_result($resultado);                    //Borramos el contenido de la variable donde hemos 
                                    //almacenado la consulta sql.
  
mysql_close($link);                             //Cierramos la conexion.
  

La función sql_noticias ($_SESSION['lang']); la tengo en otro en un archivo llamado datos/sql.php y lo he agregado con include en el index.php

Código PHP:
function sql_query ($consulta)                        //Esta función es la que realmente hace la consulta.
  
{
  
$query mysql_query($consulta);
  return 
$query;
  }

  function 
sql_noticias ($lng)                        //Esta función ordena las noticias por fecha descendente
                                    //para mostrarlas en la web.
  
{
  
$consulta "SELECT * FROM articulo WHERE id_lng='$lng' ORDER BY id_articulo DESC";
  return 
sql_query ($consulta);
  } 
Te puede parecer un conco enrebesado el tipo de orden que utilizo, pero ami me va bien por que consigo separar el aspecto de la web, el codigo SQL y el codigo PHP en archivos separados, y asi si algun día tengo que cambiar el tipo de base de datos o cualquier cosas me resulta mas facil el acer las actualizaciones.

Un saludo
  #9 (permalink)  
Antiguo 24/12/2012, 11:15
 
Fecha de Ingreso: mayo-2009
Mensajes: 232
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Pagina por modulos

Muchas gracias a todos, probare de ir cargado todo en el index segun lo enviado por url.

Se me va dando bien php, tan novato no soy, l oque como lo aprendi de forma autodidacta, la teorica fuera del puro codigo no tengo ni idea :) mirare lo de los frameworks, y MVC, uqe lo no habia escuchado.

Tambien la organizacion de aitormartin me parece bien, aunque ya hos digo que no se mucho sobre esto, si vierais el orden de mi codigo.. xD suerte k sublime te lo alinea almenos :)

A todo esto, la primera solucion que me dieron diciendo que asi es como se hacia, con el $_SERVER['DOCUMENT_ROOT'].. que decis a eso?

Etiquetas: modulos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:19.