Foros del Web » Programando para Internet » PHP »

Ayuda con una funcion dentro de una Class

Estas en el tema de Ayuda con una funcion dentro de una Class en el foro de PHP en Foros del Web. Hola estoy intentando crear una clase simple para el paginado de las consultas MySQL. E estado estudiando un par de clases de este tipo pero ...
  #1 (permalink)  
Antiguo 18/02/2003, 19:47
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
Ayuda con una funcion dentro de una Class

Hola
estoy intentando crear una clase simple para el paginado de las consultas MySQL.

E estado estudiando un par de clases de este tipo pero no e copiado nada que conste.

(no es la primera clase que hago e)

Tengo esto por ahora
Código PHP:
<?php

class Paginado
{

/*variables para la conexion a la BD que deben ser editadas por el usuarios */
var $host="localhost";  //El host de MySQL
var $user="root";      //El user de MySQL
var $pass="";          //El pass de MySQL
var $db="";            //La Base de datos a utilizar

/*Variables definidas al instanciar la clase */
var $table;            //La tabla de la BD a la cual se le haran las consultas
var $sql_condiciones;  //Las condiciones tipo Where que se usaran en la consulta
var $sql_campo_orden;  //El campo por el cual se ordenaran los resultados

var $url;              //La url donde enlazar
var $total;            //Total de registros

/* Datos de pagina*/

var $numero_por_pagina;
var 
$numero_de_paginas;
var 
$id_inicio=0;

/********  Metodos de la clase (no tocar) ****************/

function Paginado($tabla)
{
global 
$id_inicio;

$this->table=$tabla;
$this->Conexion();

 if(isset(
$this->id_inicio))
 {
 
$this->id_inicio=$id_inicio;
 }
 else
 {
 
$this->id_inicio=0;
 }
}

function 
Conexion()
{
 if(!(
$conex[email protected]mysql_connect($this->host,$this->user,$this->pass)))
 {
 echo 
"Error conectando";
 }
 return 
$conex;
}

function 
Set_condiciones($cond)
{
$this->sql_condiciones=$cond;
}

function 
Set_orderby($campo)
{
$this->sql_campo_orden=$campo;
}

function 
Pagina_actual()
{
$pagina_actual=($this->id_inicio/$this->numero_por_pagina)+1;
return (
$pagina_actual);
}

function 
Total_paginas()
{
$sql="SELECT count(*) as total FROM $this->table";
 if(
$this->sql_condiciones!="")
 {
 
$sql.="$this->sql_condiciones";
 }
$conex=$this->Conexion();
mysql_select_db($this->db,$conex);
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$this->total=$row[total];
}


function 
Get_numero_por_pagina()
{
$this->Total_paginas();
$this->numero_de_paginas=$this->total/$this->numero_por_pagina;
if((
$this->total%$this->numero_por_paginas)>0)
$this->numero_de_paginas++;

$this->numero_de_paginas=floor($this->numero_de_paginas);
}

function 
Max_por_pagina($limite)
{
$this->numero_por_pagina=$limite;
$this->Get_numero_por_pagina;
}

function 
Consulta()
{
$conex=$this->Conexion();
mysql_select_db($this->db,$conex);

$sql="SELECT * FROM $this->table";

if(
$this->sql_condiciones!="")
{
$sql.="$this->sql_condiciones";
}

if(
$this->sql_campo_orden!="")
{
$sql.="ORDER BY $this->sql_campo_orden";
}
$sql.="LIMIT $this->id_inicio,$this->numero_por_pagina";
$result=mysql_query($sql);
$return ($result);
}


function 
Mostrar_numero_pagina()
{
$pagina_actual=$this->Pagina_actual();

echo 
"Pagina ",$pagina_actual," de ",$this->numero_de_paginas;
}


}
/*Fin de la clase*/
?>
Ahora me esta faltando la funcion para obtener la URL Donde enlazar, pero no se como hacerla, para luego con esta funcion crear las enlaces siguiente o atras segun corresponda.

Ademas necesito saber como documentar correctamente la clase.


A ver que tal va, es solo para aprender y si funciona usarla yo mismo.

Si tiene algun error no me vendria mal saber cual es que hasta ahora no he hecho pruebas por que con lo que llevo nada funciona.

Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon

Última edición por MSDark; 18/02/2003 a las 19:50
  #2 (permalink)  
Antiguo 18/02/2003, 19:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Veo q ya estas programando en OOP y no tienes claro la teoria al respecto .. OOP es bastante estricto si quieres hacerlo bien .. Por ejemplo en la sintax de como llamas a tus métodos (una función de un objeto classe se le denomina método).

Sobre como documentar y como seguir normas para el diseño de tu classe puedes recurrir a las especificaciones de PEAR:

http://pear.php.net

Ahí tienes herramientas para generar documentación semi-automática de un Objeto . por ejemplo PHPdoc.

Un saludo,
  #3 (permalink)  
Antiguo 18/02/2003, 20:10
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
Sobre la teoria:

por que crees que me e demorado tanto en empezar.

POr que e leido y estudiado todo de forma teorica, entonces de teoria ya se harto (segun yo), enntonces me propuse empezar con codigo y ya e creado algunas cosillas, entonces es esta clase mi reto (por ahora).

Hice una modificaciones y ya funciona una parte, me falta solo lo de obtener la url para poder crear los enlaces de siguiente o atras, pero lo que tengo ya funciona

Código PHP:
 <?php

class Paginado
{

/*variables para la conexion a la BD que deben ser editadas por el usuarios */
var $host="localhost";  //El host de MySQL
var $user="root";      //El user de MySQL
var $pass="";          //El pass de MySQL
var $db="mysql";            //La Base de datos a utilizar

/*Variables definidas al instanciar la clase */
var $table;            //La tabla de la BD a la cual se le haran las consultas
var $sql_condiciones;  //Las condiciones tipo Where que se usaran en la consulta
var $sql_campo_orden;  //El campo por el cual se ordenaran los resultados

var $url;              //La url donde enlazar
var $total;            //Total de registros

/* Datos de pagina*/

var $numero_por_pagina;
var 
$numero_de_paginas;
var 
$id_inicio=0;
var 
$variables;

/********  Metodos de la clase (no tocar) ****************/

function Paginado($table)
{
global 
$id_inicio;

$this->table=$table;
$this->Conexion();

 if(isset(
$this->id_inicio))
 {
 
$this->id_inicio=$this->id_inicio;
 }
 else
 {
 
$this->id_inicio=0;
 }

}

function 
Conexion()
{
 if(!(
$conex[email protected]mysql_connect($this->host,$this->user,$this->pass)))
 {
 echo 
"Error conectando";
 }
 return 
$conex;
}

function 
Set_condiciones($cond)
{
$this->sql_condiciones=$cond;
}

function 
Set_orderby($campo)
{
$this->sql_campo_orden=$campo;

}

function 
Pagina_actual()
{
$pagina_actual=($this->id_inicio/$this->numero_por_pagina)+1;
return (
$pagina_actual);
}

function 
Total_paginas()
{
$sql="SELECT count(*) as total FROM $this->table";
 if(
$this->sql_condiciones!="")
 {
 
$sql.="$this->sql_condiciones";
 }
$conex=$this->Conexion();
mysql_select_db($this->db,$conex);
$result=mysql_query($sql);
$row=mysql_fetch_object($result);
$this->total=$row->total;
}


function 
Get_por_pagina()
{
$this->Total_paginas();
$this->numero_de_paginas[email protected]round($this->total/$this->numero_por_pagina);
if((
$this->total%$this->numero_por_pagina)>0)
{
$this->numero_de_paginas++;
}
$this->numero_de_paginas=floor($this->numero_de_paginas);

}

function 
Max_por_pagina($limite)
{
$this->numero_por_pagina=$limite;
$this->Get_por_pagina();
}

function 
Consulta()
{
$conex=$this->Conexion();
mysql_select_db($this->db,$conex);

$sql="SELECT * FROM $this->table ";


if(
$this->sql_condiciones!="")
{
$sql.=" $this->sql_condiciones";
}

if(
$this->sql_campo_orden!="")
{
$sql.=" ORDER BY $this->sql_campo_orden";
}

$sql.=" LIMIT $this->id_inicio,$this->numero_por_pagina";
$result=mysql_query($sql);
return (
$result);
}


function 
Mostrar_numero_pagina()
{
$pagina_actual=$this->Pagina_actual();

echo 
"Pagina ",$pagina_actual," de ",$this->numero_de_paginas;
}

}
/*Fin de la clase*/

$page= new Paginado("user");
$page->Max_por_pagina("3");
echo 
"<br><br>";
$page->Mostrar_numero_pagina();
$result=$page->Consulta();
echo 
"<p>&nbsp</p>";
while(
$row=mysql_fetch_object($result))
{
echo 
$row->Host,"-",$row->User,"-",$row->Password,"<br>";
}
mysql_free_result($result);

?>
Prueba eso y veras que funciona.


Saludos


PD: aproposito no encuentro lo de como documentar las clases en la page que me diste no se sere ciego o simplemente no entiendo ingles.
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon

Última edición por MSDark; 18/02/2003 a las 22:08
  #4 (permalink)  
Antiguo 19/02/2003, 02:15
Avatar de e-miliox  
Fecha de Ingreso: noviembre-2002
Ubicación: San Antonio - Chile
Mensajes: 223
Antigüedad: 15 años, 1 mes
Puntos: 7
interesante herramienta me parece PHPdoc, pero... como se usa??? :PPP
__________________
=PoWeReD By MySeLf!=
  #5 (permalink)  
Antiguo 19/02/2003, 09:36
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,
Cita:
function Paginado($table)
{
global $id_inicio;

$this->table=$table;
$this->Conexion();

if(isset($this->id_inicio))
{
$this->id_inicio=$this->id_inicio;
}
else
{
$this->id_inicio=0;
}

}
Bien, si esto es OOP, ¿me puedes explicar que hace ese global $id_inicio? Por favor, eliminalo inmediatamente. Y si esta funcion es el constructor, $this->id_inicio no tiene valor. Por lo que siempre deberias asignarle 0.

Exactamente, ¿que problemas tienes con la funcion de la URL? Yo creo que sencillamente podrias hacer una funcion que reciba una cadena (la URL base) y la almacene en la propiedad url.

Para usar el PHPDoc, tienes que poner los comentarios dentro de tu clase con un formato definido. Luego ejecutas el script de PHPDoc que te genera ficheros HTML con la informacion de los comentarios. En www.devshed.com habia un articulo (en ingles) de como usarlo.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 19/02/2003, 10:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El artículo que hace mención Josemi sobre PHPDoc esta en:
http://www.devshed.com/Server_Side/P...Doc/page1.html

PHPdoc sitio oficial (descargas y documentación):
http://www.phpdoc.de/

Sobre el standar de PEAR (teoría):

Standares de PEAR:
http://pear.php.net/manual/en/standards.php

Ahí tienes todo .. desde identación del código .. hasta como poner comentarios a tu código .. Como veras es MUY estricto a la hora de "escribir" el código, pero de eso se trata .. de seguir unas normas standares para que cualquiera q lea tu código sepa interpretarlo de forma facil y ordenada.

Cuando programas algo (en cualquier lenguaje) hay como tres cosas a tener en cuenta:
1) q funcione
2) q sea optimo el código (tal vez aquí habria q meter otros conceptos como .. q sea modular o reutilizable .. etc.. Pero este no es el foro para discutir estos temas .. tenemos el foro "Ingenería del Software ....".
3) q esté escrito de forma limpia, ordenada y documentado correctamente.

Con esa classe q estas haciendo ya estas aprendiendo a seguir algunas normas .. normas q te las da la propia programación OOP .. Ahora estas en el punto 1. .. Para conseguir un buen desarrollo deberías llegar hasta el punto 3. Josemi por su parte ya te ha "introducido" en el punto 2 .. y si sigues las normas de PEAR por ejemplo llegaras al punto 3 con una buena aplicación.

Yo mismo recien estoy en el punto 2 y viendo cosas del punto 3 .. y me cuesta (todo esto por malas costumbres a la hora de programar) .. pero si quieres hacerlo bien .. hay q ceñirse algun standar.

Un saludo,

Última edición por Cluster; 19/02/2003 a las 10:22
  #7 (permalink)  
Antiguo 19/02/2003, 10:34
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Yo el punto 3) lo definiria diciendo que el codigo/aplicacion se pueda mantener facilmente. Con mantener me refiero a correccion de bugs, añadir nuevas caracteristicas, optimizar parte del codigo, ... Y eso es lo que estas haciendo desde casi el principio del proyecto, es logico que tenga que ser facil. Y cualquiera que haya escrito codigo "al vuelo" sin seguir ningun standard (aunque sea uno propio) y haya intentado modificar ese codigo un par de meses despues, sabe la pesadilla que es.

Del punto 2), mas que codigo "optimo", yo diria codigo "de calidad".

Saludos.

PD: Si os animais podemos abrir una discusion sobre OOP u otros temas nombrados en este mensaje en el foro de "Ingenieria... " en plan general, no sobre OOP en PHP.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 19/02/2003, 18:42
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
OK, vamos aprendiendo.
Gracias por la info que me han dado.


Josemi sobre la funcion de la URl no se me ocurre como hacer algo que me consiga la URL y me construya la url para enlazar las paginas del paginado osea que me construya la URL que necesito para los enlaces siguiente o atras


Habia pensado en algo que recoga la URL actual, y le agrege el id_inicio, que iria incrementado ose algo como que el anlace siguiente sea tip www.pagina.com/paginado.php?id_inicio=1.

Pero no se al menos se que lo que tengo algop funciona no?



PD: Sobre el PHPDoc lo descarge y me da una serie de errores, que onda con es?

O debo usarlo de otra forma osea como una clase? por que algo asi logre entender de ese articulo en devshed, pero..... ya lo intentare leer con mas calma(ingles)


Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon

Última edición por MSDark; 19/02/2003 a las 18:53
  #9 (permalink)  
Antiguo 19/02/2003, 20:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Obtener el URI actual (con o sin las variables q se le ha pasado como parámetro) lo puedes obtener con las numerosas variables de servidor q PHP puede acceder via:

$_SERVER['variable de servidor']

http://www.php.net/manual/en/reserved.variables.php

Ahi veras por ejemplo:

QUERY_STRING y PHP_SELF ... con eso obtienes el URI q se usó para llamar a esa pagina y tan solo tendrias q concatenear tu variable extra tipo "&id_tuyo=$valor".

Un saludo,
  #10 (permalink)  
Antiguo 19/02/2003, 23:55
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
OK gracias, intentare hacerlo y les cuento.

Mi pregunta es ahora como diablos ocupo el PHPDoc?


lo intente de la siguiente forma
Código PHP:
<?php

define
("PHPDOC_INCLUDE_DIR""/htdocs/phpdoc/");

define("PHPDOC_LINEBREAK""\r\n");

include(
"prepend.php");        

$doc = new Phpdoc;

$doc->setApplication("Paginado");

$doc->setSourceDirectory("/htdocs/phpdoc/Paginado/");

$doc->setTarget("/htdocs/phpdoc/Paginado/docs/");

$doc->setTemplateDirectory("/htdocs/phpdoc/renderer/html/templates/");

$doc->setSourceFileSuffix( array ("php""inc") );

$doc->parse();

$doc->render();
?>
Y me da los siguientes errores

Cita:
Warning: main(/htdocs/phpdoc/exceptions/PhpdocError.php) [function.main]: failed to create stream: No such file or directory in c:\archivos de programa\apache group\apache\htdocs\phpdoc\prepend.php on line 2

Fatal error: main() [function.main]: Failed opening required '/htdocs/phpdoc/exceptions/PhpdocError.php' (include_path='.;c:\php4\pear') in c:\archivos de programa\apache group\apache\htdocs\phpdoc\prepend.php on line 2
y esa linea es esta require( PHPDOC_INCLUDE_DIR . "exceptions/PhpdocError.php" );
Como lo uso?

Gracias de antemano

Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #11 (permalink)  
Antiguo 20/02/2003, 15:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El problemon q tienes con PHPdoc es de rutas .. no se las estas indicando correctamente.

Si vas a usar direcciones absolutas debes indicar la ruta completa:
c:\nose\veteasasber\PHPdoc\

o usas simplemente direcciones relativas.

Ejemplo:

Teniendo una estructura tipo:

(del raiz de mi "Documen root")
\PHPdoc (aquí tengo al PHPdoc y sus scripts ...)
\pruebasphpdoc (aquí meto las classes q voy a documentar)

Y .. usando el index.php q trae el propio PHPdoc:

Código PHP:
<?php
// Ajusto el "time out" (tiempo maximo de ejecucion) a "infinito tiempo"
// algunas classes complejas le puede demorar un buen tiempo ..
set_time_limit(0);

$start time();
        
// WARNING: long runtimes! Make modifications
// to the php[3].ini if neccessary. A P3-500
// needs slightly more than 30 seconds to
// document phpdoc itself.
            
// Directory with include files
define("PHPDOC_INCLUDE_DIR""./");
// Important: set this to the Linebreak sign of your system!
define("PHPDOC_LINEBREAK""\r\n");

// main PHPDoc Include File
include("./prepend.php");        
        
$doc = new Phpdoc;
            
// Sets the name of your application.
// The name of the application gets used in many default templates.
$doc->setApplication("Cluster Repository ;)");
                
// directory where your source files reside:
$doc->setSourceDirectory("../pruebasphpdoc/");
                
// save the generated docs here:
$doc->setTarget("../pruebasphpdoc/docs/");
                
// use these templates:
$doc->setTemplateDirectory("./renderer/html/templates/");
                
// source files have one of these suffixes:
$doc->setSourceFileSuffix( array ("php""inc") );
        
// parse and generate the xml files
$doc->parse();
                
// turn xml in to html using templates
$doc->render();
                
printf("%d seconds needed\n\n."time() - $start);
?>
Por lo demas .. ejecutas el inde.php y en la carpeta docs de pruebasphpdoc veras los XML q genera junto con sus .html .. Pero antes TU debes de haber puesto los comentarios a cada método para q lo genere el PHPdoc ..

Un saludo,
  #12 (permalink)  
Antiguo 20/02/2003, 15:47
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años, 1 mes
Puntos: 68
Me parece que ninguno de uds. utilizó el "HelpGenerator" que viene incluido con el PHPEdit....
Se los recomiendo !!
Toma toda la sintaxis PHPDoc de tus domcumentos, y te los presenta de una manera visual muy muy muy aceptable. La verdad, todo un lujo.
Denle una probada y no se van a arrepentir.

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #13 (permalink)  
Antiguo 20/02/2003, 16:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Habrá q probar el PHPEdit con esa funcionalidad ...

Lo que es PHPdoc .. tampoco está tan mal .. sobre todo cuando le pillas el trukillo de configuración xDD ...

Por lo demas al ser una aplicación PHP .. si hay algo q modificar (por ejemplo algo de traducción a castellano .. o detallitos así .. ) es facil modificarlo. Tambien trabaja con un sistema de "templates" propios (no se si PHPEdit tambien )

Ahora recien estaba bajando phpDocumentor:
http://phpdocu.sourceforge.net

A ver q tal es .. tiene buena pinta

Un saludo,
  #14 (permalink)  
Antiguo 22/02/2003, 10:45
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
OK gracias a todos.

cre que ya logre lo de los enlaces, solo que me muestra uno demas y no se a que se debe, (osea es en bucle for pero no se por que lo hace)

Aqui está la clase

http://members.lycos.co.uk/masterdar....Paginado.phps
Y aqui su forma de uso

http://members.lycos.co.uk/masterdark1/page.phps


El unico problema ahora es que no me cambia la pagina actual osea siempre se queda en pagina 1 de algo siempre dice pagina 1 y nose como arreglarlo

pero ahi esta

Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon

Última edición por MSDark; 22/02/2003 a las 10:48
  #15 (permalink)  
Antiguo 22/02/2003, 11:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Un conseje:

$sql="SELECT * FROM ".$this->table_db ;

Deberias de dejar opcion a pasar por parametro la consulta que el usuario quiera hacer y tu classe de paginado SOLO añadir la lógica para el LIMIT y paginado en sí .. Así limitas mucho el tipo de consultas q se pueden "paginar" con tu classe.

(por cierto . vistes la classe de paginado de Webstudio? .. podrias hecharle un vistazo )

Un saludo,
  #16 (permalink)  
Antiguo 22/02/2003, 14:57
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Mas consejos. NO hagas echo dentro de tus metodos. Crea una variable donde vas almacenando la salida y devuelvela. Que sea el script que crea el objeto el que se encarge de hacer el echo.

Y en tu consultaDb() no deberias acceder a la variable del $_GET. Tendrias que tener un metodo que de el valor a id_inicio. Por eso no te funciona bien la funcion mostarNumeroPaginas().

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #17 (permalink)  
Antiguo 22/02/2003, 17:16
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
ok tomare en cuenta sus consejos.

Cluster si e visto la class de WebStudio y es bastante buena pero aún hay cosas que no entiendo y estoy empezando con esto.

Josemi, se que no deberia hacerlo pero no pude de otra forma

con ese
Código PHP:
if(!$_GET){ 
         
$sql.=" LIMIT 0,".$this->max_por_pagina;//fin if
         
}else{
         
$this->id_inicio=$_GET["id_inicio"];
       
$sql.=" LIMIT ".$this->id_inicio.",".$this->max_por_pagina;
         } 
Reviso si recibe algo por la url si no póngo el LIMIT a 0 si recibe algo pongo el LIMIT de acuerdo al id_inicio.


Saludos

PD: Toy mejorandola poco a poco
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #18 (permalink)  
Antiguo 22/02/2003, 17:59
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
El problema con esa forma es que hasta que no llamas a ese metodo $this->id_inicio no tiene un valor valido. Podrias hacer que se tenga que pasar como parametro al constructor, o en el peor de los casos, hacerlo directamente con el $_GET pero en el constructor. Porque creo que es en constructor donde se deberia inicializar. O crear otro metodo para darle el valor y llamar a ese metodo justo despues de crear el objeto.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #19 (permalink)  
Antiguo 23/02/2003, 11:05
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
Gracias de nuevo.


Haber ahora la modifique por completo y tengo esto.

en localhost funciona , aun no le e podido probar en mi servidor (lycos anda de malas);

Ok aqui se los dejo

http://members.lycos.co.uk/masterdar....paginado.phps

y el uso

http://members.lycos.co.uk/masterdark1/usoclass.phps

A ver que tal va.


(pronto cuelgo una especie de web con las cosas que hago para no estar dando url´s a diestra y siniestra)


Saludos

PD: Si hay algo que se paresca a la clase de web-studio es por que en alguna cosas mire esa clase para entender.

Pero en ningun caso la e querido copiar.
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #20 (permalink)  
Antiguo 23/02/2003, 15:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sigues haciendo "echo" en tu classe .. Como te comentó josemi en otra ocasión .. es mas versatil una classe (de lo que sea) que entrega el valor de algun evento (en ese caso por ejemplo el de un error) .. así yo puedo "formatear" ese error con la tipografía que yo estime oportuno .. o incluso ignorar ese tipo de mensajes si así lo deseo.

mm Tambien .. por ejemplo esos mensajes de error "prediseñados" prodrias tenerlos en un array .. Con eso sería facil hacer a futuro algun tipo de "extended" para tu clase y por ejemplo tener esos mensajes de error personalizados a gusto del usuario e incluso en varios idiomas ..

Has de pensar que un objeto en general es "merjor" cuando mas modular es.

El if(!$_GET){ .. lo sigues teniendo "incrustado" en tu classe .. Así como está limitas tu classe a PHP versiónes 4.1.x o superiroes (cosa q si hicieras un método para pasar las variables q entren por GET podría usar yo por ejemplo $HTTP_GET_VARS .. o getev() por ejemplo dependiendo de las caracteristivas y version de mi PHP )

GET["id"] ... el nombre de variable "id" es supertipico cuando se está usando edición/borrado de registros .. Como sugerencia te diría q lo cambiases de nombre o mejor todavía dejases la opción (via alguna variable en el constructor o metodo para ello) que el Usuario decida que nombre de variable va a usar para el control del páginado.

echo " <a href=\"$enlace\">$pagina</a> ";
Lo dicho antes .. Crea métodos q devuelvan ese $enlace .. o ese $pagina para yo poder hacer algo tipo:

echo " <a class="miCSS" href=\"$paginado->dame_enlace()\">$paginado->dame_pagina()</a> ";

Como ejemplo de para que crear dos metodos para esa taréa .. Imagina si quiero yo programar usando algun sistema de Templates .. Con tu classe no podría pues hace "echo" .. y a mi (en caso de usar template) me interesa que me devuelva un valor para yo pasarselo a la template con el método q disponga para tal fin.

El hecho de hacer tanto método para hacer cosas q tu a lo mejor piensas en "simplificar" y lamar a 1 metodo en vez de a dos por ejemplo .. te servirá para X proyectos .. pero toma el ejemplo superior .. Y si necesito un link con mi CSS propio asignado así? .. Con tu classe actual tendría q entrar a modificar el código de la misma y la idea de OOP no es esa sino de "modularidad".

Si lo deseas puedes usar "extended" para por ejemplo crear una definicion de estados de ciertos métodos o variables para que sea mas cómodo iniciar tu classe .. Pero NUNCA "cierres" el código.

Tomatelo como consejos para mejorar. Esperamos tu nueva versión xDD.

Un saludo,
  #21 (permalink)  
Antiguo 23/02/2003, 18:01
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
ok, entiendo algo.

Entiendo que la idea de programar OOP es que sea modular asi que intentare mejorarla (por lo menos ahora funciona mejor al menos en lycos).

Eso de $_GET lo uso por que en localhost no me aceptaba $HTTP_GET_VARS; osea me daba error de que no era definida y otra cantidad de errores correspondientes a la linea en donde estaba $HTTP_GET_VARS y la unica forma de que funcionara con $HTTT_XXX_VARS era poniendo un global que como ya dijo josemi no tiene por que estar en una clase (dijo si esto es OOP para que global. o algo asi).

Sobre los echo entonces como , tendria que el usuario hacerlo osea en ves de $p->enlaces(); hacerlo echo $p->enlaces(); y yo solo hacer un return dentro de la clase no?

Sobre lo de los errore si solo hiciese return en ves de echo no los mostraria a menos que el usuario pusiese un echo $p->error();

y bueno no habia pensado en eso de poner los tipos de errores dentro de un array.

Pero bueno poco a poco aprendiendo cosas nuevas.

Seria interesante tener un subforo o mas bien un post donde solo se posteara sobre OOP, bueno propongo eso tener alg donde solo hablar de OOP (para php claro).


Bueno saludos

Y si teneis alguna idea para esta clase no dudes en darla, por ahora la tengo para aprender y para usarla yo (esa es la idea) pero si empezara a trabajar de maravilla por que no colgarla por ahi para que sea utilizada por mas usuarios no?
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #22 (permalink)  
Antiguo 23/02/2003, 19:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Eso de $_GET lo uso por que en localhost no me aceptaba $HTTP_GET_VARS; osea me daba error de que no era definida y otra cantidad de errores correspondientes a la linea en donde estaba $HTTP_GET_VARS y la unica forma de que funcionara con $HTTT_XXX_VARS era poniendo un global que como ya dijo josemi no tiene por que estar en una clase (dijo si esto es OOP para que global. o algo asi).
No es cosa de declararlo global como lo hacias.. sino de crear un simple método q de valor a la variable que vas a usar en vez de $_GET['id'] o lo das como parametro en el "constructor" del objeto para poder hcer algo tipo:

$p=new paginado($conex,$HTTP_GET_VARS['id'])
ó
$p=new paginado($conex,$_GET['id'])

O bien algun método q tengas q usar antes de trabajar con la classe .. algo tipo $p->inicializa($_GET['id'])

todo eso con el fin de dar valor a una variable en la classe tipo:

var $id;
... En tus llamadas q haces tipo:

if($id) o donde lo uses .. usa esa variable en vez de tu if($_GET['id'])

Pero para eso se ha de pasar como parametro a tu classe (objeto) ese valor de iniciación de esa variable ..



Cita:
Sobre los echo entonces como , tendria que el usuario hacerlo osea en ves de $p->enlaces(); hacerlo echo $p->enlaces(); y yo solo hacer un return dentro de la clase no?
Así es ... tus métodos de ese estilo solo devuelvan un return para hacer yo un echo $p->enlaces() .. Pero date cuenta en mi ejemplo q te puse .. Un "enlace" se compone de dos partes: el link del enlace y el texto a mostrar para ese enlace:

echo " <a class="miCSS" href=\"$paginado->dame_enlace()\">$paginado->dame_pagina()</a> ";

Por eso tendrias q desglosar tu método actual en dos al estilo del ejemplo ...

Cita:
Sobre lo de los errore si solo hiciese return en ves de echo no los mostraria a menos que el usuario pusiese un echo $p->error();
El hecho de documentar una classe y sus métodos no es decir lo q hace el método en una frase .. Lo que importa es decir que parametros requiere el método (y sus tipos) y que entrega

Fijate en la sintax de la documentación de las funciones de PHP:

Cita:
bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]] )
Si interpretas la sintax dice bien claro "bool" (q devuelve un booleano . true/false) . y cada uno de sus parametros y el tipo q son "string" o el que corresponda .. tambien se indican los parámetros q son opcionales entre corchetes [..] y si alguno tomase algun valor por defecto se avisaría igualmente ..

Ademas de eso .. no se como se indicaria q tu metodo tal hace un "echo" de ese string q devulve .. Pero de alguna forma hay q indicarlo.

Piensa que una buena documentación ayuda a comprender cualquier error q pueda cometer el usuario de tu classe.

Cita:
Seria interesante tener un subforo o mas bien un post donde solo se posteara sobre OOP, bueno propongo eso tener alg donde solo hablar de OOP (para php claro).
Recientemente se creó el foro "Ingenería del Software y gestión de proyectos" .. Es el foro mas indicado para preguntar cosas sobre OOP .. Los "detallitos" de como es la sintax de una llamada a un metodo .. o como se instancia un objeto en PHP es lo de menos .. Con una buena base de teoria en la mano no tendrias estos problemas de "conceptos" como los vas solventando a base de que poco a poco vas aprendiendo de las sugerencias q se te van dando ...
Cuando llegue PHP 5 ahí hablaremos de crear un sub-foro de OOP para PHP xDD .. mientras tanto si lo estimas oportuno .. inicia un mensaje en el foro con tu propuesta. Yo ya te digo q votaría q "ahora de momento no" ..

Un saludo,
  #23 (permalink)  
Antiguo 23/02/2003, 19:41
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
OK, a ese foro me voy para aprender algunas cosillas mas.


Sobre lo de esa clase la ire arreglando, gracias por las ideas y propuestas dadas.

Cualquier cosa les cuento.

Creo que entonces le dariamos fin a este mensaje o no?

Bueno si no es asi, que sigan dando mensajes para poder mejorar la clase.


Saludos

PD: Gracias cluster se me ilumino la mente con tu post.
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
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 18:58.