Diferencia entre revisiones de «Como Programar Consultas Paginadas en KumbiaPHP»
De KumbiaPHP Framework Wiki
(No se muestran 9 ediciones intermedias de 2 usuarios) | |||
Línea 1: | Línea 1: | ||
Tomado del ejemplo: [[Como Programar Consultas Paginadas en KUMBIAPHP]] | Tomado del ejemplo: [[Como Programar Consultas Paginadas en KUMBIAPHP]] | ||
+ | |||
+ | |||
+ | '''Diagrama de Clases''' | ||
[[Archivo:Geo.png]] | [[Archivo:Geo.png]] | ||
Línea 6: | Línea 9: | ||
<source lang='sql'> | <source lang='sql'> | ||
− | + | CREATE SCHEMA geo; | |
− | CREATE TABLE Pais | + | CREATE TABLE geo.Pais |
( | ( | ||
Id serial, | Id serial, | ||
Línea 14: | Línea 17: | ||
Codigo char(2) UNIQUE NOT NULL, | Codigo char(2) UNIQUE NOT NULL, | ||
Nombre character varying(100) NOT NULL, | Nombre character varying(100) NOT NULL, | ||
+ | Bandera bytea, | ||
Activ boolean DEFAULT true | Activ boolean DEFAULT true | ||
); | ); | ||
− | CREATE TABLE Departamento | + | CREATE TABLE geo.Departamento |
( | ( | ||
Id serial, | Id serial, | ||
Línea 27: | Línea 31: | ||
); | ); | ||
− | CREATE TABLE Ciudad | + | CREATE TABLE geo.Ciudad |
( | ( | ||
Id bigserial, | Id bigserial, | ||
Línea 39: | Línea 43: | ||
); | ); | ||
</source> | </source> | ||
+ | |||
''' Modelo: pais.php ''' | ''' Modelo: pais.php ''' | ||
+ | |||
<source lang='php'> | <source lang='php'> | ||
<?php | <?php | ||
class Pais extends ActiveRecord { | class Pais extends ActiveRecord { | ||
+ | protected $schema = 'geo'; | ||
public function getPaises($page, $ppage=25) | public function getPaises($page, $ppage=25) | ||
{ | { | ||
Línea 58: | Línea 65: | ||
''' Modelo: departamento.php ''' | ''' Modelo: departamento.php ''' | ||
+ | |||
<source lang='php'> | <source lang='php'> | ||
<?php | <?php | ||
class Departamento extends ActiveRecord { | class Departamento extends ActiveRecord { | ||
+ | protected $schema = 'geo'; | ||
public function getDepartamentosPais($page, $paisid, $ppage=25) | public function getDepartamentosPais($page, $paisid, $ppage=25) | ||
{ | { | ||
Línea 79: | Línea 88: | ||
''' Modelo: ciudad.php ''' | ''' Modelo: ciudad.php ''' | ||
+ | |||
<source lang='php'> | <source lang='php'> | ||
<?php | <?php | ||
class Ciudad extends ActiveRecord { | class Ciudad extends ActiveRecord { | ||
+ | protected $schema = 'geo'; | ||
public function getCiudadesPais($page, $paisid, $ppage=25) | public function getCiudadesPais($page, $paisid, $ppage=25) | ||
{ | { | ||
Línea 95: | Línea 106: | ||
− | '''Controlador: pais_controller.php''' | + | '''Diagrama de Secuencia''' |
+ | |||
+ | [[Archivo:ConsultaGeo.png]] | ||
+ | |||
+ | |||
+ | '''Controlador: ../geo/pais_controller.php''' | ||
+ | |||
<source lang='php'> | <source lang='php'> | ||
<?php | <?php | ||
Load::models('ciudad', 'pais'); | Load::models('ciudad', 'pais'); | ||
− | class PaisController extends | + | class PaisController extends AppController { |
− | + | public function index($page=1) | |
− | + | { | |
− | + | $pais = new Pais(); | |
− | + | $this->listPaises = $pais->getPaises($page); | |
− | + | } | |
− | + | public function pageCiudades($page=1, $paisid=48) | |
− | + | { | |
− | + | $paises = new Pais(); | |
− | + | $this->nombredelpais = $paises->getNombre($paisid); | |
− | + | $ciudadespais = new Ciudad(); | |
− | + | $this->listCiudadesPais = $ciudadespais->getCiudadesPais($page, $paisid); | |
− | + | } | |
} | } | ||
+ | ?> | ||
</source> | </source> | ||
− | ''' Vista: | + | ''' Vista: ../geo/pais/index.phtml ''' |
+ | |||
<source lang='php'> | <source lang='php'> | ||
<div class="content"> | <div class="content"> | ||
− | + | <?php echo View::content();?> | |
− | + | <h3>Paises</h3> | |
− | + | <ul> | |
− | + | <?php foreach ($listPaises->items as $item):?> | |
− | + | <li> | |
− | + | <?php if ($item->id == 48) echo Html::link("geo/departamento/index/1/$item->id", $item->codigo); else echo Html::linkAction("pageCiudades/1/$item->id", $item->codigo);?> - <?php echo $item->nombre?> - <?php echo Html::img('banderas/' . 'flag_' . $item->codigo . '.gif', "$item->nombre")?> | |
− | + | </li> | |
− | + | <?php endforeach;?> | |
− | + | </ul> | |
− | + | <?php if($listPaises->prev) echo Html::linkAction("index/$listPaises->prev/", '<< Anterior |');?> | |
− | + | <?php if($listPaises->next) echo Html::linkAction("index/$listPaises->next/", 'Próximo >>');?> | |
</div> | </div> | ||
</source> | </source> | ||
− | ''' Vista: | + | ''' Vista: ../geo/pais/pageCiudades.phtml''' |
+ | |||
<source lang='php'> | <source lang='php'> | ||
<div class="content"> | <div class="content"> | ||
− | + | <?php echo View::content();?> | |
− | + | <h3>Ciudades de <?php echo $nombredelpais;?></h3> | |
− | + | <ul> | |
− | + | <?php foreach ($listCiudadesPais->items as $item):?> | |
− | + | <li> | |
− | + | <?php if ($item->codigo == " ") echo "S/C"; else echo $item->codigo;?> - <?php echo $item->nombre;?> | |
− | + | </li> | |
− | + | <?php endforeach;?> | |
− | + | </ul> | |
− | + | <?php if($listCiudadesPais->prev) echo Html::linkAction("pageCiudades/$listCiudadesPais->prev/$item->pais_id/", '<< Anterior |');?> | |
− | + | <?php if($listCiudadesPais->next) echo Html::linkAction("pageCiudades/$listCiudadesPais->next/$item->pais_id/", 'Próximo >>');?> | |
</div> | </div> | ||
</source> | </source> | ||
− | ''' Controlador: departamento_controller.php ''' | + | ''' Controlador: ../geo/departamento_controller.php ''' |
+ | |||
<source lang='php'> | <source lang='php'> | ||
<?php | <?php | ||
Load::models('ciudad', 'departamento', 'pais'); | Load::models('ciudad', 'departamento', 'pais'); | ||
class DepartamentoController extends ApplicationController { | class DepartamentoController extends ApplicationController { | ||
− | + | public function index($page=1, $paisid=48) | |
− | + | { | |
− | + | $paises = new Pais(); | |
− | + | $this->nombredelpais = $paises->getNombre($paisid); | |
− | + | $departamentospais = new Departamento(); | |
− | + | $this->listDepartamentosPais = $departamentospais->getDepartamentosPais($page, $paisid); | |
− | + | } | |
− | + | public function pageCiudades($page=1, $departamentoid=15) | |
− | + | { | |
− | + | $departamentos = new Departamento(); | |
− | + | $this->nombredeldepartamento = $departamentos->getNombre($departamentoid); | |
− | + | $this->idpais = $departamentos->getIdPais($departamentoid); | |
− | + | $paises = new Pais(); | |
− | + | $this->nombredelpais = $paises->getNombre($this->idpais); | |
− | + | $ciudadesdepartamento = new Ciudad(); | |
− | + | $this->listCiudadesDepartamento = $ciudadesdepartamento->getCiudadesDepartamento($page, $departamentoid); | |
− | + | } | |
} | } | ||
?> | ?> | ||
Línea 180: | Línea 201: | ||
− | ''' Vista: | + | ''' Vista: ../geo/departamento/index.phtml ''' |
+ | |||
<source lang='php'> | <source lang='php'> | ||
<div class="content"> | <div class="content"> | ||
− | + | <?php echo View::content();?> | |
− | + | <h3>Departamentos de <?php echo $nombredelpais;?></h3> | |
− | + | <ul> | |
− | + | <?php foreach ($listDepartamentosPais->items as $item):?> | |
− | + | <li> | |
− | + | <?php echo Html::linkAction("pageCiudades/1/$item->id", str_pad($item->codigonumerico, 2, "0", STR_PAD_LEFT));?> - <?php echo $item->nombre;?> | |
− | + | </li> | |
− | + | <?php endforeach;?> | |
− | + | </ul> | |
− | + | <?php if($listDepartamentosPais->prev) echo Html::linkAction("index/$listDepartamentosPais->prev/$item->pais_id/", '<< Anterior |');?> | |
− | + | <?php if($listDepartamentosPais->next) echo Html::linkAction("index/$listDepartamentosPais->next/$item->pais_id/", 'Próximo >>');?> | |
− | </div></source> | + | </div> |
+ | </source> | ||
+ | |||
+ | ''' Vista: ../geo/departamento/pageCiudades.phtml''' | ||
− | |||
<source lang='php'> | <source lang='php'> | ||
<div class="content"> | <div class="content"> | ||
− | + | <?php echo View::content();?> | |
− | + | <h3>Ciudades de <?php echo $nombredeldepartamento;?> - <?php echo $nombredelpais;?></h3> | |
− | + | <ul> | |
− | + | <?php foreach ($listCiudadesDepartamento->items as $item):?> | |
− | + | <li> | |
− | + | <?php if ($item->codigo == " ") echo "S/C"; else echo $item->codigo;?> - <?php echo str_pad($item->codigonumerico, 3, "0", STR_PAD_LEFT);?> - <?php echo $item->nombre;?> | |
− | + | </li> | |
− | + | <?php endforeach;?> | |
− | + | </ul> | |
− | + | <?php if($listCiudadesDepartamento->prev) echo Html::linkAction("pageCiudades/$listCiudadesDepartamento->prev/$item->departamento_id/", '<< Anterior |');?> | |
− | + | <?php if($listCiudadesDepartamento->next) echo Html::linkAction("pageCiudades/$listCiudadesDepartamento->next/$item->departamento_id/", 'Próximo >>');?> | |
</div> | </div> | ||
</source> | </source> |
Revisión actual del 02:28 27 may 2012
Tomado del ejemplo: Como Programar Consultas Paginadas en KUMBIAPHP
Diagrama de Clases
DDL para PostgreSQL
CREATE SCHEMA geo;
CREATE TABLE geo.Pais
(
Id serial,
PRIMARY KEY (Id),
Codigo char(2) UNIQUE NOT NULL,
Nombre character varying(100) NOT NULL,
Bandera bytea,
Activ boolean DEFAULT true
);
CREATE TABLE geo.Departamento
(
Id serial,
PRIMARY KEY (Id),
Nombre character varying(100) NOT NULL,
Pais_Id integer REFERENCES Pais(Id) NOT NULL,
CodigoNumerico integer,
Activ boolean DEFAULT true
);
CREATE TABLE geo.Ciudad
(
Id bigserial,
PRIMARY KEY (Id),
Nombre character varying(100) NOT NULL,
Pais_Id integer REFERENCES Pais(Id) NOT NULL,
Departamento_Id integer REFERENCES Departamento(Id),
Codigo char(3) DEFAULT ' ',
CodigoNumerico integer,
Activ boolean DEFAULT true
);
Modelo: pais.php
<?php
class Pais extends ActiveRecord {
protected $schema = 'geo';
public function getPaises($page, $ppage=25)
{
return $this->paginate("page: $page", "per_page: $ppage", 'order: nombre asc');
}
public function getNombre($id)
{
return $this->find($id)->nombre;
}
}
?>
Modelo: departamento.php
<?php
class Departamento extends ActiveRecord {
protected $schema = 'geo';
public function getDepartamentosPais($page, $paisid, $ppage=25)
{
return $this->paginate("page: $page", "pais_id = $paisid", "per_page: $ppage", 'order: nombre asc');
}
public function getNombre($id)
{
return $this->find($id)->nombre;
}
public function getIdPais($id)
{
return $this->find($id)->pais_id;
}
}
?>
Modelo: ciudad.php
<?php
class Ciudad extends ActiveRecord {
protected $schema = 'geo';
public function getCiudadesPais($page, $paisid, $ppage=25)
{
return $this->paginate("page: $page", "pais_id = $paisid", "per_page: $ppage", 'order: nombre asc');
}
public function getCiudadesDepartamento($page, $departamentoid, $ppage=25)
{
return $this->paginate("page: $page", "departamento_id = $departamentoid", "per_page: $ppage", 'order: nombre asc');
}
}
?>
Diagrama de Secuencia
Controlador: ../geo/pais_controller.php
<?php
Load::models('ciudad', 'pais');
class PaisController extends AppController {
public function index($page=1)
{
$pais = new Pais();
$this->listPaises = $pais->getPaises($page);
}
public function pageCiudades($page=1, $paisid=48)
{
$paises = new Pais();
$this->nombredelpais = $paises->getNombre($paisid);
$ciudadespais = new Ciudad();
$this->listCiudadesPais = $ciudadespais->getCiudadesPais($page, $paisid);
}
}
?>
Vista: ../geo/pais/index.phtml
<div class="content">
<?php echo View::content();?>
<h3>Paises</h3>
<ul>
<?php foreach ($listPaises->items as $item):?>
<li>
<?php if ($item->id == 48) echo Html::link("geo/departamento/index/1/$item->id", $item->codigo); else echo Html::linkAction("pageCiudades/1/$item->id", $item->codigo);?> - <?php echo $item->nombre?> - <?php echo Html::img('banderas/' . 'flag_' . $item->codigo . '.gif', "$item->nombre")?>
</li>
<?php endforeach;?>
</ul>
<?php if($listPaises->prev) echo Html::linkAction("index/$listPaises->prev/", '<< Anterior |');?>
<?php if($listPaises->next) echo Html::linkAction("index/$listPaises->next/", 'Próximo >>');?>
</div>
Vista: ../geo/pais/pageCiudades.phtml
<div class="content">
<?php echo View::content();?>
<h3>Ciudades de <?php echo $nombredelpais;?></h3>
<ul>
<?php foreach ($listCiudadesPais->items as $item):?>
<li>
<?php if ($item->codigo == " ") echo "S/C"; else echo $item->codigo;?> - <?php echo $item->nombre;?>
</li>
<?php endforeach;?>
</ul>
<?php if($listCiudadesPais->prev) echo Html::linkAction("pageCiudades/$listCiudadesPais->prev/$item->pais_id/", '<< Anterior |');?>
<?php if($listCiudadesPais->next) echo Html::linkAction("pageCiudades/$listCiudadesPais->next/$item->pais_id/", 'Próximo >>');?>
</div>
Controlador: ../geo/departamento_controller.php
<?php
Load::models('ciudad', 'departamento', 'pais');
class DepartamentoController extends ApplicationController {
public function index($page=1, $paisid=48)
{
$paises = new Pais();
$this->nombredelpais = $paises->getNombre($paisid);
$departamentospais = new Departamento();
$this->listDepartamentosPais = $departamentospais->getDepartamentosPais($page, $paisid);
}
public function pageCiudades($page=1, $departamentoid=15)
{
$departamentos = new Departamento();
$this->nombredeldepartamento = $departamentos->getNombre($departamentoid);
$this->idpais = $departamentos->getIdPais($departamentoid);
$paises = new Pais();
$this->nombredelpais = $paises->getNombre($this->idpais);
$ciudadesdepartamento = new Ciudad();
$this->listCiudadesDepartamento = $ciudadesdepartamento->getCiudadesDepartamento($page, $departamentoid);
}
}
?>
Vista: ../geo/departamento/index.phtml
<div class="content">
<?php echo View::content();?>
<h3>Departamentos de <?php echo $nombredelpais;?></h3>
<ul>
<?php foreach ($listDepartamentosPais->items as $item):?>
<li>
<?php echo Html::linkAction("pageCiudades/1/$item->id", str_pad($item->codigonumerico, 2, "0", STR_PAD_LEFT));?> - <?php echo $item->nombre;?>
</li>
<?php endforeach;?>
</ul>
<?php if($listDepartamentosPais->prev) echo Html::linkAction("index/$listDepartamentosPais->prev/$item->pais_id/", '<< Anterior |');?>
<?php if($listDepartamentosPais->next) echo Html::linkAction("index/$listDepartamentosPais->next/$item->pais_id/", 'Próximo >>');?>
</div>
Vista: ../geo/departamento/pageCiudades.phtml
<div class="content">
<?php echo View::content();?>
<h3>Ciudades de <?php echo $nombredeldepartamento;?> - <?php echo $nombredelpais;?></h3>
<ul>
<?php foreach ($listCiudadesDepartamento->items as $item):?>
<li>
<?php if ($item->codigo == " ") echo "S/C"; else echo $item->codigo;?> - <?php echo str_pad($item->codigonumerico, 3, "0", STR_PAD_LEFT);?> - <?php echo $item->nombre;?>
</li>
<?php endforeach;?>
</ul>
<?php if($listCiudadesDepartamento->prev) echo Html::linkAction("pageCiudades/$listCiudadesDepartamento->prev/$item->departamento_id/", '<< Anterior |');?>
<?php if($listCiudadesDepartamento->next) echo Html::linkAction("pageCiudades/$listCiudadesDepartamento->next/$item->departamento_id/", 'Próximo >>');?>
</div>
--Cbeltranv 02:56 2 nov 2010 (UTC) --Henry.stivens 12:00 2 nov 2010 (UTC)