Implementar un sistema de "volver atras"

322 views
Skip to first unread message

Daniel Martín Spiridione

unread,
Apr 28, 2009, 4:06:04 PM4/28/09
to CodeIgniter-spanish
Hola esta semana que paso me puse aprender codeigniter. Debo decir que
muchas cosas me las ha facilitado (muchisimo, pero muchisimo), pero
otras no se aún como implementarlas (todavía estoy acostumbrado a
hacer todo desde cero con PHP).

Tengo dos grandes problemas:
1) Estoy acostumbrado a tener un formulario de consultas del tipo GET.
Osea cuando hago una consulta me aparece abajo del formulario una
tabla con los resultados de acuerdo a como llene los campos (Ej buscar
clientes por nombre, apellido, etc). Esa tabla tiene un enlace
(imagen) para abrir cada uno de los items listados en otra pagina.
Para volver atras y conservar la consulta (los mismos parametros) le
pasaba al enlace (la imagen) el query_string de la pagina del form
(los campos get) asi cuando apretaba en un enlace de volver atras
volvia a la misma pagina del formulario con los mismos datos y la
consulta ya ejecutada. NO SE COMO IMPLEMENTAR ALGO ASI EN CODEIGNITER.
Si alguien me puede ayudar le agradecería muchisimo.
2) Como puedo hacer para navegar entre paginas (veo que son las vistas
en CI) sin necesidad de usar un controlador. Por ejemplo tengo una
pagina que es una ayuda y no necesita de ningun controlador, como
puedo hacer para verla???? tengo que hubicarla en otro directorio
distinto al de las vistas???

Como verán estoy bastante perdido.... agradecería mucho su ayuda!!!!!
saludos para todos!!!!

Ivan Alfredo Zenteno Aguilar

unread,
Apr 28, 2009, 5:30:28 PM4/28/09
to codeignit...@googlegroups.com
El mar, 28-04-2009 a las 13:06 -0700, Daniel Martín Spiridione escribió:
> Hola esta semana que paso me puse aprender codeigniter. Debo decir que
> muchas cosas me las ha facilitado (muchisimo, pero muchisimo), pero
> otras no se aún como implementarlas (todavía estoy acostumbrado a
> hacer todo desde cero con PHP).

Es bueno saber que te agrade CI :-D

>
> Tengo dos grandes problemas:
> 1) Estoy acostumbrado a tener un formulario de consultas del tipo GET.
> Osea cuando hago una consulta me aparece abajo del formulario una
> tabla con los resultados de acuerdo a como llene los campos (Ej buscar
> clientes por nombre, apellido, etc). Esa tabla tiene un enlace
> (imagen) para abrir cada uno de los items listados en otra pagina.
> Para volver atras y conservar la consulta (los mismos parametros) le
> pasaba al enlace (la imagen) el query_string de la pagina del form
> (los campos get) asi cuando apretaba en un enlace de volver atras
> volvia a la misma pagina del formulario con los mismos datos y la
> consulta ya ejecutada. NO SE COMO IMPLEMENTAR ALGO ASI EN CODEIGNITER.
> Si alguien me puede ayudar le agradecería muchisimo.
Checa la libreria form_validation te ayudará mucho ;-) ahi en su
documentación puedes encontrar varios ejemplos.

http://codeigniter.com/user_guide/libraries/form_validation.html

> 2) Como puedo hacer para navegar entre paginas (veo que son las vistas
> en CI) sin necesidad de usar un controlador. Por ejemplo tengo una
> pagina que es una ayuda y no necesita de ningun controlador, como
> puedo hacer para verla???? tengo que hubicarla en otro directorio
> distinto al de las vistas???
CI esta pensando en POO por lo tanto es necesario crear un class llamada
ayuda por dar un ejemplo, esta clase contendría su contructor y un
function index() para dentro del index() generar tu
$this->load->view('ayuda_view', TRUE);
Asi URI sería http://host.com/ayuda

>
> Como verán estoy bastante perdido.... agradecería mucho su ayuda!!!!!
> saludos para todos!!!!
> >
--
Ivan Alfredo Zenteno Aguilar <k001.o...@gmail.com>

Pedro Navarro Monter

unread,
Apr 28, 2009, 6:21:37 PM4/28/09
to codeignit...@googlegroups.com


2009/4/28 Ivan Alfredo Zenteno Aguilar <k001.o...@gmail.com>

Hola Daniel Martín Spiridione:

Cómo bien te lo menciona k001 hay varias cosas ya hechas para que no tengas que romperte la cabeza. Ahora, CI (codeigniter) maneja ambos tipos de request, ya sea por get o post.
Get: adquiere los parametros desde la url, usando el método URI
Véase http://codeigniter.com/user_guide/libraries/input.html para más información referente del método get de la clase input.
Ejemplo: (http://codeigniter.com/user_guide/libraries/uri.html)

http://localhost/index.php/news/local/metro/crime_is_up
Los segmentos por orden de aparición seran los siguientes:
  1. news
  2. local
  3. metro
  4. crime_is_up
Y accesas a ellos mediante $this->uri->segment(), para que la librería de URI esté disponible, puedes cargarla al inicio de tu controlador ó bien en el archivo autoload.php de la carpeta de configuración.


Post: adquiere los parametros usando la librería input con su método post.
Ejemplo: (http://codeigniter.com/user_guide/libraries/input.html)

$this->input->post('parametro',TRUE);

El último TRUE, es una declaración que puedes agregar opcionalmente a tu request para evitar el XSS (cross-site scripting attack). La librería para filtrar XSS también debe ser cargada como te explicaba en el caso anterior.

Para hacer lo que citas en el inciso 1), te recomiendo que la liga se haga dinámicamente con los parametros que necesites en el método de tu controlador para que de esta manera se ejecute todo de manera convencional, ejemplo:

*Suponiendo que así es tu tabla*
id    nombre   apellido     opciones
--    -----------   -----------     --------------
1    emilio      azcárraga  detalles <-- Al dar clic aquí te diriges a
2    caro        quintero     detalles
3    amado     carrillo      detalles

detalles  <-- La referencia a la cual apunta esta liga sería algo como esto:
http://localhost/index.php/usuarios/detalles/1; siendo 1 el id del usuario, entonces, vas a la clase usuarios y usas el método detalles. Suponiendo que éste es tu controlador:

<?php if (!defined("BASEPATH")) { exit("No direct access allowed");}
class Usuarios extends Controller {

  function __construct(){
    parent::Controller();
    $this->load->model('getusuarios');
  }

  function detalles($id=-1){
 
    if ($id > -1 ) {
      $recordset = $this->getusuarios->details($id);
      if (count($recordset) > 0) {
        $data['registros'] = $recordset;
      } else {
        $data['registros'] = NULL;
      }

      $this->load->view('user_details',$data);
    } else {
      $this->usuarios();
    }

  }

  function usuarios(){
 
    $recordset = $this->getusuarios->list();
    if (count($recordset) > 0) {
      $data['registros'] = $recordset;
    } else {
        $data['registros'] = NULL;      
    }

    $this->load->view('users_list',$data);
  }
}

?>

***  function detalles($id=-1) ***
El parámetro que especifícas en la declaración de la función debe llegar por uristring. No te preocupes, sí todo sale bien, llega solito.
También te recomiendo que uses la función log_message() junto con ob_start() y ob_get_contents() para escribir tus datos de debug en el registro de CI.

Espero que ya sido de ayuda mi respuesta. Sí gustas, aquí tengo un demo de CI que traé ejemplos de este tipo, además de incorporar Scriptaculous, tambien aquí he publicado varios posts con referencia al uso de Code Igniter; no olvides comentar, un saludo.

--
-----BEGIN GEEK CODE BLOCK-----
GCS !d- s++:++ a? c+++ BL u+++ P+ L+ E! W+++
N O? W! O M V? PS PE++ Y PGP+ T S? X++ R? tv-
b DI+++ D+ G++ e++ h---- y+-- z+
------END GEEK CODE BLOCK------

Pedro Navarro Monter

unread,
Apr 28, 2009, 6:27:06 PM4/28/09
to codeignit...@googlegroups.com
Olvidé mi comentario para el inciso 2) . k001 también tiene razón, aunque sí no quieres crear un controlador, crea una carpeta llamada ayuda y posteriormente ház la liga, de manera que sí se pueda accesar sin pasar por los controladores, regularmente sí pones así las carpetas:

/var/www/htdocs/www.misitio.com/system/ <-- Instalación por defecto de CI
/var/www/htdocs/www.misitio.com/ayuda/ <-- Esta carpeta es accesible sin pasar por los controladores.

Entonces la liga va directa a la carpeta. ¿Me expliqué bien?.

Bueno, de nuevo saludos.

Daniel Perez

unread,
Apr 29, 2009, 2:54:48 AM4/29/09
to codeignit...@googlegroups.com
En este caso ...

cuando decies de poner la carpeta "ayuda" a la misma altura que "system"

vamos en la raiz de CI ...

no seria necesario hacerla accesible configurandola en el .htaccess?
--
DANIEL PEREZ
Fotógrafo

Web/Blog: www.daniperezfotografia.es
Email: danip...@gmail.com
Movil: 627.93.74.93
Localizacion: Madrid

Pedro Navarro Monter

unread,
Apr 29, 2009, 11:26:13 AM4/29/09
to codeignit...@googlegroups.com


2009/4/29 Daniel Perez <danip...@gmail.com>

No, dudo que se necesario (nunca he configurado un .htaccess); sino, sitúa tu carpeta de JS a la altura de system y verás lo que sucede, en mi caso así está la configuración que tengo en el sitio que estoy desarrollando y los archivos son perfectamente accesibles por URL.

Pedro Navarro Monter

unread,
Apr 29, 2009, 12:02:24 PM4/29/09
to codeignit...@googlegroups.com
Aunque de hecho en la instalación por defecto de CI tienes la carpeta user_guide, y funciona bien, y NO tienes que modificar ningún .htaccess.
Reply all
Reply to author
Forward
0 new messages