Foros del Web » Programando para Internet » PHP »

PHP dynamic website

Estas en el tema de PHP dynamic website en el foro de PHP en Foros del Web. Hola de nuevo amigos. Hoy vengo a presentar un sistema de websites dinamicos a base de php, que necesita vuestras sugerencias y mejoras. (Yo solo ...
  #1 (permalink)  
Antiguo 26/06/2010, 03:33
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 402
Antigüedad: 14 años, 10 meses
Puntos: 20
Hola de nuevo amigos. Hoy vengo a presentar un sistema de websites dinamicos a base de php, que necesita vuestras sugerencias y mejoras. (Yo solo lo he customizado a mis necesidades, no es mio)

Organigrama de los directorios del sistema:

website/
-----------includes/
---------------------footer.html
---------------------header.html
...

----------modules/
---------------------home.php
---------------------contact.php
---------------------gallery.php
...

----------layouts/
--------------------resources/
---------------------------------css/
---------------------------------js/
---------------------------------imgs/
--------------------layout.php

-----------plugins/

-----------index.php
-----------conf.php
  • website-> el directorio principal que contiene todos los demas
  • includes-> el directorio de los archivos a incluir en las demas paginas.
  • modules-> el directorio que contiene los vinculos principales de la web.
  • layouts-> dentro esta el archivo layouts.php que es el template para toda la web, junto con una carpeta resources para los archivos css, js u otros
  • plugins-> es el directorio que contiene addons/plugins/extras para la web (archivos opcionales)

index.php
Código PHP:
<?php
error_reporting
(E_ALL);
include(
'conf.php');

if (!empty(
$_GET['mod']))
    
$module $_GET['mod'];
else
    
$module DEFAULT_MODULE;

if (empty(
$conf[$module]))
        
$module DEFAULT_MODULE;
if (empty(
$conf[$module]['layout']))
        
$conf[$module]['layout'] = DEFAULT_LAYOUT;

$path_layout LAYOUT_PATH.'/'.$conf[$module]['layout'];
$path_module MODULE_PATH.'/'.$conf[$module]['file'];

if (
file_exists($path_layout))
    include( 
$path_layout );
else
    if (
file_exists($path_module ))
        include( 
$path_module );
    else
        die(
'Error loading the module <b>'.$module.'</b>. The file <b>'.$conf[$module]['file'].' might have been deleted</b>');
?>
conf.php
Código PHP:
<?php
define
('DEFAULT_MODULE''home');
define('DEFAULT_LAYOUT''layout.php');
define('MODULE_PATH'realpath('./modules/'));
define('LAYOUT_PATH'realpath('./layouts/'));

$conf['home'] = array(
        
'file' => 'home.php',
        
'layout' => DEFAULT_LAYOUT );
$conf['about'] = array(
        
'file' => 'about.php' );
$conf['testimonials'] = array(
        
'file' => 'testimonials.php' );
$conf['references'] = array(
        
'file' => 'references.php' );
$conf['schedule'] = array(
        
'file' => 'calendar.php' );
$conf['registration'] = array(
        
'file' => 'register.php' );
$conf['contact'] = array(
        
'file' => 'contact/contact.php' );
?>
layout.php
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
<body>
    <?php include('includes/header.html'); ?>
    <?php include('includes/menu.html'); ?>

            <?php
                
if (file_exists$path_module )) include( $path_module );
                else die(
'Error loading the module <b>'.$module.'</b>. The file <b>'.$conf[$module]['file'].' might have been deleted</b>');
            
?>
            
    <?php include('includes/footer.html'); ?>
    
</body>
</html>
Ahora mis preguntas son:
  • Quiero tener la web (utilizando este modulo) en varios idiomas, no se me ocurre otra ideea que utilizar este
    modulo para cada idioma... pero eso seria un cachondeo, y mucho trabajo para traducir... entonces,
    Que se podria hacer para que desde este mismo modulo tener la web en varios idiomas

    -
  • Que se podria mejorar?

    -
  • La web a que utilizo este sistema, requiere un formulario de registro de pago para la asistencia a un evento...
    el formulario no es un problema, sino que el incorporar un sistema de pago y confirmacion a traves de un email con el billete a imprimir
    y que todo eso eset guardado en un bd relacionada con el siguiente punto... como lo podria hacer?

    -
  • Tengo que implementar un sistema de usuarios, que sirva de administrar esos registros de pago y non pago
    y tener algunas funciones como las siguientes: hacer un raporte de los participantes ya registrados por categorias (pago y non pago),
    tener la funcion de imprim el billete de un asistente, poder reenviar el email con el billete,... y ya vere si hay alguna otra cosa

Podeis ver la web a la que he empleado este sistema aqui:

http://mtc.w0rldart.com/

Última edición por GatorV; 27/06/2010 a las 10:46
  #2 (permalink)  
Antiguo 26/06/2010, 09:47
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: PHP dynamic website

no quiero desanimar, pero este no es el foro correcto para colocar esto...

en todo caso debes ir al foro de sugerencias web, o web general... (:

espera a que muevan tu tema!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 26/06/2010, 10:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: PHP dynamic website

Se ve interesante, tal vez algunas de las mejoras que requieras serian:

- Pasar el validador XHTML y CSS
- Enlaces amigables
- Administrar las diferentes secciones usando base de datos en vez de crear manualmente $conf

Por lo demas, comienza con el registro de usuarios, una vez que lo tengas listo ya podras ver de que manera integras el sistema de pago y emision del billete, tal vez lo puedas generar en PDF... tambien tendras que pensar en que pasa si alguien imprime dos o mas veces el billete y como controlar el ingreso al evento.

Ah, para los idiomas, necesitaras hacer lo que hace la mayoria de aplicaciones prefabricadas: tener archivos PHP para cada lenguaje con constantes o variables que contengan cada palabra, frase o mensaje, por ejemplo:

espanol.php
Código PHP:
Ver original
  1. <?php
  2. $lang = array(
  3.     'login' => 'Iniciar sesión',
  4.     'logout' => 'Finalizar sesión',
  5.     'buy ticket' => 'Comprar billete'
  6. );

Y en los scripts:
Código PHP:
Ver original
  1. $userlang = $_GET['lang'];
  2. if($userlang == 'es')
  3.     include 'espanol.php';
  4.  
  5. echo "<a href=\"index.php?pag=login\">{$lang['login']}</a>";

Esto es solo un ejemplo, tendras que ingeniartelas para aplicarlo en tu sistema.
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 26/06/2010, 13:49
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 402
Antigüedad: 14 años, 10 meses
Puntos: 20
Respuesta: PHP dynamic website

Triby, muchas gracias por tu ideea.

-Enlaces amigables-> ya estoy trabajando en ello

-Administrar las diferentes secciones usando base de datos en vez de crear manualmente $conf -> me podrias guiar un poco para esto?

-Sistema de registro -> Ya tengo una posible solucion para ello, aunque tambien necesitare vuestra ayuda a customizarlo.

-El sistema de pago necesitaria que funcione de esta manera -> Cuando un usuario decide asistir al evento, cuando vaya rellenando sus datos... legue a un punto que le pida pagar un cierta cantidad (aqui es donde la mayor duda tengo de como hacerlo) y una vez confirmado el pago que se emita un pdf que rellene automaticamente los datos del usuario con un numero unico identificador

-Sobre lo de las idiomas -> Estoy pensando hacerlo como un plugin...

Invito a una cerveza o algo para beber a aquel que sea de madrid y me eche una mano con esto xD
  #5 (permalink)  
Antiguo 26/06/2010, 15:55
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: PHP dynamic website

No soy de Madrid, pero la cerveza corona es ampliamente vendida, recomendada, reconocida y aceptada en todo el mundo... principalmente por mi.

Veras, tengo un mini CMS con un concepto muy similar al tuyo, aunque con muchos errores de planeacion, tanto de diseño como de desarrollo y optimizacion, pero ahi va funcionando.

Basicamente es un "creador de paginas" mediante un editor de texto Javascript (actualmente FCKEditor), guardando toda la informacion capturada en MySQL y/o archivo de cache. La tabla es:

Código MySQL:
Ver original
  1. CREATE TABLE prefix_pages (
  2.   pgparent mediumint(5) NOT NULL DEFAULT '0',
  3.   pgmenu tinyint(1) NOT NULL DEFAULT '1',
  4.   pgorder mediumint(5) NOT NULL DEFAULT '10',
  5.   pgtype varchar(10) COLLATE latin1_spanish_ci NOT NULL DEFAULT 'code',
  6.   pgname varchar(50) COLLATE latin1_spanish_ci NOT NULL,
  7.   pgcode text COLLATE latin1_spanish_ci NOT NULL,
  8.   pgfile varchar(100) COLLATE latin1_spanish_ci NOT NULL,
  9.   pgseo varchar(50) COLLATE latin1_spanish_ci DEFAULT NULL,
  10.   PRIMARY KEY (pgid)
  11. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=1 ;

- pgid = Numero de pagina, asignado automaticamente, excepto el 1 que corresponde a la pagina principal
- pgparent = Si la pagina es "sub-seccion" de otra, aqui se coloca la "pagina padre"
- pgmenu = 1/Menu principal, 2/Sub pagina de "pgparent", 3/Menu secundario y 9/No aparece en menu, solo por enlace directo en el contenido de alguna otra pagina
- pgorder = Orden en que debe aparecer en el menu correspondiente
- pgtype = 'code' para 'pagina estatica', modificada con FCKEditor o nombre del modulo a ejecutar (calendario, galeria, etc.)
- pgname = Nombre o titulo de la pagina (Inicio, Nosotros, Historia, etc.)
- pgcode = Codigo HTML de paginas estaticas, lo guardo aqui solo cuando no puedo crear cache
- pgfile = Archivo de cache o el que corresponda al modulo (galeria.php, etc.)
- pgseo = Cadena para usar en URL amigable y comparar contra la URL mostrada en el navegador, ejemplo si la pagina es "Historia de nuestra empresa", la cadena seria: "historia-nuestra-empresa' (quitando algunas preposiciones: a, ante, de, para, con, contra, etc.)

Realmente no es tan dificil esto, lo que resulta un tanto problematico es como integras registro de usuarios + permisos + administracion de paginas + plantillas HTML/CSS + desarrollo de modulos y plugins.

Ultima recomendacion: Usa el trabajo de otros solo como ejemplo para desarrollar tu proyecto, desde cero y de acuerdo a tus necesidades; agregar o quitar campos en trabajos realizados por terceros puede resultar complicado, tedioso y una gran perdida de tiempo, tardaras menos si analizas, planeas y diseñas correctamente lo que necesitas.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 27/06/2010, 05:10
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 402
Antigüedad: 14 años, 10 meses
Puntos: 20
Respuesta: PHP dynamic website

Como puedo hacer que cuando se envie un mensaje a traves del formulario de contact que uso, se guarde en una base de datos?

Este es el archivo que envia el correo
Código PHP:
<?php

/* config start */

$emailAddress '[email protected]';

/* config end */


require "phpmailer/class.phpmailer.php";

session_name("fancyform");
session_start();


foreach(
$_POST as $k=>$v)
{
    if(
ini_get('magic_quotes_gpc'))
    
$_POST[$k]=stripslashes($_POST[$k]);
    
    
$_POST[$k]=htmlspecialchars(strip_tags($_POST[$k]));
}


$err = array();

if(!
checkLen('name'))
    
$err[]='The name field is too short or empty!';

if(!
checkLen('email'))
    
$err[]='The email field is too short or empty!';
else if(!
checkEmail($_POST['email']))
    
$err[]='Your email is not valid!';

if(!
checkLen('message'))
    
$err[]='The message field is too short or empty!';

if((int)
$_POST['captcha'] != $_SESSION['expect'])
    
$err[]='The captcha code is wrong!';


if(
count($err))
{
    if(
$_POST['ajax'])
    {
        echo 
'-1';
    }

    else if(
$_SERVER['HTTP_REFERER'])
    {
        
$_SESSION['errStr'] = implode('<br />',$err);
        
$_SESSION['post']=$_POST;
        
        
header('Location: '.$_SERVER['HTTP_REFERER']);
    }

    exit;
}


$msg=
'Name:    '.$_POST['name'].'<br />
Email:    '
.$_POST['email'].'<br />
IP:    '
.$_SERVER['REMOTE_ADDR'].'<br /><br />

Message:<br /><br />

'
.nl2br($_POST['message']).'

'
;


$mail = new PHPMailer();
$mail->IsMail();

$mail->AddReplyTo($_POST['email'], $_POST['name']);
$mail->AddAddress($emailAddress);
$mail->SetFrom($_POST['email'], $_POST['name']);
$mail->Subject "A new ".mb_strtolower($_POST['subject'])." from ".$_POST['name']." | contact form feedback";

$mail->MsgHTML($msg);

$mail->Send();


unset(
$_SESSION['post']);

if(
$_POST['ajax'])
{
    echo 
'1';
}
else
{
    
$_SESSION['sent']=1;
    
    if(
$_SERVER['HTTP_REFERER'])
        
header('Location: '.$_SERVER['HTTP_REFERER']);
    
    exit;
}

function 
checkLen($str,$len=2)
{
    return isset(
$_POST[$str]) && mb_strlen(strip_tags($_POST[$str]),"utf-8") > $len;
}

function 
checkEmail($str)
{
    return 
preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/"$str);
}

?>
Triby, ese cms tiene funciones administrativas? Y por cierto estoy mirando en implementar este sistema de login : http://tympanus.net/codrops/2009/09/...reloaded-v1-1/ , y customizarlo para mis necesidades

EDITO: Mejor todavia Triby, he encontrado un tal FancySlidingForm, que es un formulario de registro que bueno contiene todos los campos que me interesan, ahora falta adjuntarlo a ese sistema de login. Lo intentare y espero que como muy tarde, este listo para manana por la tarde (ya que ahora me voy con mi familia a visitar a otras familias :)) )

Última edición por w0rldart; 27/06/2010 a las 05:44
  #7 (permalink)  
Antiguo 01/07/2010, 07:56
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 402
Antigüedad: 14 años, 10 meses
Puntos: 20
Respuesta: PHP dynamic website

Buaj, es un lio con ese sistema... imenso. Al final decidi en usar un formulario HTML, y busco ahora la manera de hacer que todos los datos que se rellenen en el formulario... se guarden en una base de datos.

Este es el formulario que uso: http://tympanus.net/codrops/2010/06/...m-with-jquery/

Me podria indicar alguien algo de ayuda para conseguir guardar esos datos en una bd y tambien enviar un email a la vez?
  #8 (permalink)  
Antiguo 01/07/2010, 10:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: PHP dynamic website

Cita:
Iniciado por w0rldart Ver Mensaje
Buaj, es un lio con ese sistema... imenso. Al final decidi en usar un formulario HTML, y busco ahora la manera de hacer que todos los datos que se rellenen en el formulario... se guarden en una base de datos.

Este es el formulario que uso: http://tympanus.net/codrops/2010/06/...m-with-jquery/

Me podria indicar alguien algo de ayuda para conseguir guardar esos datos en una bd y tambien enviar un email a la vez?
Código PHP:
// ...
if (mail($para$asunto$datos) !== FALSE)
{
  
$sql ="INSERT INTO tabla(datos) VALUES('$datos')";
  
// ...

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 01/07/2010, 10:32
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 402
Antigüedad: 14 años, 10 meses
Puntos: 20
Respuesta: PHP dynamic website

Guay, lo intentare esta misma tarde... gracias pateketrueke
  #10 (permalink)  
Antiguo 15/07/2010, 13:57
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 402
Antigüedad: 14 años, 10 meses
Puntos: 20
Respuesta: PHP dynamic website

Vengo con un problema de header, de los formularios que tengo

Código:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/content/e/d/h/edh0sting/html/modules/contact/work.php:1) in /home/content/e/d/h/edh0sting/html/modules/contact/work.php  on line 4

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/content/e/d/h/edh0sting/html/modules/contact/work.php:1) in /home/content/e/d/h/edh0sting/html/modules/contact/work.php on line 4
Esto es lo que genera
Código PHP:
<?php

session_name
("fancyform");
session_start();


$_SESSION['n1'] = rand(1,20);
$_SESSION['n2'] = rand(1,20);
$_SESSION['expect'] = $_SESSION['n1']+$_SESSION['n2'];


$str='';
if(
$_SESSION['errStr'])
{
    
$str='<div class="error">'.$_SESSION['errStr'].'</div>';
    unset(
$_SESSION['errStr']);
}

$success='';
if(
$_SESSION['sent'])
{
    
$success='<h1>Thank you!</h1>';
    
    
$css='<style type="text/css">#contact-form{display:none;}</style>';
    
    unset(
$_SESSION['sent']);
}
?>
He mirado aqui y en otros sitios intentando buscar una solucion, pero si exito. Espero que me podeis hechar una mano con esto.

Y tambien, alguna recomendacion al respeto de la web? Quiero hacer las urls amigables... y por lo tanto lo intento con este .htaccess, copiado del drupal que instale y todavia lo estoy modificando pero me interesa si teneis alguna sugerencia al respeto ya que no consigo esas urls amigables:
Código:
#
# Apache/PHP/Drupal settings:
#

# Protect files and directories from prying eyes.
<FilesMatch "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$">
  Order allow,deny
</FilesMatch>

# Don't show directory listings for URLs which map to a directory.
Options -Indexes

# Follow symbolic links in this directory.
Options +FollowSymLinks

# Set the default handler.
DirectoryIndex index.php

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
  # Enable expirations.
  ExpiresActive On

  # Cache all files for 2 weeks after access (A).
  ExpiresDefault A1209600

  <FilesMatch \.php$>
    # Do not allow PHP scripts to be cached unless they explicitly send cache
    # headers themselves. Otherwise all scripts would have to overwrite the
    # headers set by mod_expires if they want another caching behavior. This may
    # fail if an error occurs early in the bootstrap process, and it may cause
    # problems if a non-Drupal PHP file is installed in a subdirectory.
    ExpiresActive Off
  </FilesMatch>
</IfModule>

# Various rewrite rules.
<IfModule mod_rewrite.c>
  RewriteEngine on

  # If your site can be accessed both with and without the 'www.' prefix, you
  # can use one of the following settings to redirect users to your preferred
  # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
  #
  # To redirect all users to access the site WITH the 'www.' prefix,
  # (http://example.com/... will be redirected to http://www.example.com/...)
  # adapt and uncomment the following:
  # RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
  # RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
  #
  # To redirect all users to access the site WITHOUT the 'www.' prefix,
  # (http://www.example.com/... will be redirected to http://example.com/...)
  # uncomment and adapt the following:
  # RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
  # RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

  # Modify the RewriteBase if you are using Drupal in a subdirectory or in a
  # VirtualDocumentRoot and the rewrite rules are not working properly.
  # For example if your site is at http://example.com/drupal uncomment and
  # modify the following line:
  # RewriteBase /drupal
  #
  # If your site is running in a VirtualDocumentRoot at http://example.com/,
  # uncomment the following line:
  # RewriteBase /

  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^mod([^/]*).html$ index.php?mod=$1 [L]
</IfModule>

# $Id: .htaccess,v 1.90.2.5 2010/02/02 07:25:22 dries Exp $
  #11 (permalink)  
Antiguo 15/07/2010, 14:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: PHP dynamic website

Respecto al error del header:
http://www.forosdelweb.com/wiki/PHP:...lready_sent%3F
http://www.forosdelweb.com/wiki/PHP:...n_line_4%22%3F

El segundo, no es error de PHP, revisa mejor en el foro de Apache si quieres tratar temas de URLs Amigables con .htaccess

Saludos.
  #12 (permalink)  
Antiguo 16/07/2010, 03:47
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 402
Antigüedad: 14 años, 10 meses
Puntos: 20
Respuesta: PHP dynamic website

Lo del header, y otros problemas que tenia se solucionaron (gracias a este post)

El hex editor y a borrar los primeros 2, 3 o 4 carracteres inutiles que tenian todos los ficheros, pero porque? Si antes nunca tuve este problema
  #13 (permalink)  
Antiguo 16/07/2010, 08:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: PHP dynamic website

Si lees el FAQ que te deje, es por causa de guardar el archivo en formato UTF8 con BOM.

Saludos.

Etiquetas: website
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 14:12.