Diferencia entre revisiones de «Como Programar Consultas Paginadas en KUMBIAPHP»
(Consultas paginadas de un modelo Pais Ciudad Departamento) |
(exdendiendo los controladores de AppController ( Beta2 )) |
||
(No se muestran 5 ediciones intermedias de 3 usuarios) | |||
Línea 1: | Línea 1: | ||
== Ejemplo probado del uso de paginate en Beta 2 == | == Ejemplo probado del uso de paginate en Beta 2 == | ||
− | + | '''Controlador: consultarpaises_controller.php''' | |
− | + | <source lang='php'> | |
− | Controlador: consultarpaises_controller.php | ||
− | |||
<?php | <?php | ||
Load::models('pais'); | Load::models('pais'); | ||
− | class ConsultarPaisesController extends | + | class ConsultarPaisesController extends AppController { |
public function index($page=1) | public function index($page=1) | ||
{ | { | ||
Línea 15: | Línea 13: | ||
} | } | ||
?> | ?> | ||
+ | </source> | ||
− | Modelo: pais.php | + | ''' Modelo: pais.php ''' |
+ | <source lang='sql'> | ||
+ | -- DDL para PostgreSQL | ||
+ | CREATE TABLE Pais | ||
+ | ( | ||
+ | Id serial, | ||
+ | PRIMARY KEY (Id), | ||
+ | Codigo char(2) UNIQUE NOT NULL, | ||
+ | Nombre character varying(100) NOT NULL, | ||
+ | Activ boolean DEFAULT true | ||
+ | ); | ||
+ | </source> | ||
+ | <source lang='php'> | ||
<?php | <?php | ||
class Pais extends ActiveRecord { | class Pais extends ActiveRecord { | ||
Línea 30: | Línea 41: | ||
} | } | ||
?> | ?> | ||
+ | </source> | ||
− | Vista: index.phtml de views/consultarpaises | + | ''' Vista: index.phtml de views/consultarpaises ''' |
+ | <source lang='php'> | ||
<div class="content"> | <div class="content"> | ||
<?php echo View::content();?> | <?php echo View::content();?> | ||
<h3>Paises</h3> | <h3>Paises</h3> | ||
<ul> | <ul> | ||
− | + | <?php foreach ($listPaises->items as $item):?> | |
<li> | <li> | ||
<?php if ($item->id == 48) echo Html::link("consultardepartamentospais/index/1/$item->id", $item->codigo); else echo Html::link("consultarciudadespais/index/1/$item->id", $item->codigo);?> - <?php echo $item->nombre?> | <?php if ($item->id == 48) echo Html::link("consultardepartamentospais/index/1/$item->id", $item->codigo); else echo Html::link("consultarciudadespais/index/1/$item->id", $item->codigo);?> - <?php echo $item->nombre?> | ||
Línea 46: | Línea 59: | ||
<?php if($listPaises->next) echo Html::linkAction("index/$listPaises->next/", 'Próximo >>');?> | <?php if($listPaises->next) echo Html::linkAction("index/$listPaises->next/", 'Próximo >>');?> | ||
</div> | </div> | ||
+ | </source> | ||
Como se nota con Html::link("consultarciudadespais/index/1/$item->id"?> permite el despliegue de las ciudades del respectivo pais entonces: | Como se nota con Html::link("consultarciudadespais/index/1/$item->id"?> permite el despliegue de las ciudades del respectivo pais entonces: | ||
− | Controlador: consultarciudadespais_controller.php | + | ''' Controlador: consultarciudadespais_controller.php ''' |
+ | <source lang='php'> | ||
<?php | <?php | ||
Load::models('ciudad', 'pais'); | Load::models('ciudad', 'pais'); | ||
− | class ConsultarCiudadesPaisController extends | + | class ConsultarCiudadesPaisController extends AppController { |
public function index($page=1, $paisid=48) | public function index($page=1, $paisid=48) | ||
{ | { | ||
Línea 63: | Línea 78: | ||
} | } | ||
?> | ?> | ||
+ | </source> | ||
− | La | + | La función index tiene el parámetro $paisid con default 48 que en mi caso es el id de Colombia |
− | Modelo: ciudad.php | + | ''' Modelo: ciudad.php ''' |
+ | <source lang='sql'> | ||
+ | -- DDL para PostgreSQL | ||
+ | CREATE TABLE 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 | ||
+ | ); | ||
+ | </source> | ||
+ | <source lang='php'> | ||
<?php | <?php | ||
class Ciudad extends ActiveRecord { | class Ciudad extends ActiveRecord { | ||
Línea 80: | Línea 111: | ||
} | } | ||
?> | ?> | ||
+ | </source> | ||
Al invocar paginate se debe incluir el parametro "pais_id = $paisid" con comillas dobles para que resuelva $paisid | Al invocar paginate se debe incluir el parametro "pais_id = $paisid" con comillas dobles para que resuelva $paisid | ||
− | Vista: index.phtml de views/consultarciudadespais | + | ''' Vista: index.phtml de views/consultarciudadespais ''' |
+ | <source lang='php'> | ||
<div class="content"> | <div class="content"> | ||
<?php echo View::content();?> | <?php echo View::content();?> | ||
<h3>Ciudades de <?php echo $nombredelpais;?></h3> | <h3>Ciudades de <?php echo $nombredelpais;?></h3> | ||
<ul> | <ul> | ||
− | + | <?php foreach ($listCiudadesPais->items as $item):?> | |
<li> | <li> | ||
<?php if ($item->codigo == " ") echo "ZZZ"; else echo $item->codigo;?> - <?php echo $item->nombre;?> | <?php if ($item->codigo == " ") echo "ZZZ"; else echo $item->codigo;?> - <?php echo $item->nombre;?> | ||
Línea 98: | Línea 131: | ||
<?php if($listCiudadesPais->next) echo Html::linkAction("index/$listCiudadesPais->next/$item->pais_id/", 'Próximo >>');?> | <?php if($listCiudadesPais->next) echo Html::linkAction("index/$listCiudadesPais->next/$item->pais_id/", 'Próximo >>');?> | ||
</div> | </div> | ||
+ | </source> | ||
Ahora para Colombia el Html::link("consultardepartamentospais/index/1/$item->id"?> permite el despliegue de los departamentos del respectivo pais entonces: | Ahora para Colombia el Html::link("consultardepartamentospais/index/1/$item->id"?> permite el despliegue de los departamentos del respectivo pais entonces: | ||
− | Controlador: consultardepartamentospais_controller.php | + | ''' Controlador: consultardepartamentospais_controller.php ''' |
+ | <source lang='php'> | ||
<?php | <?php | ||
Load::models('departamento', 'pais'); | Load::models('departamento', 'pais'); | ||
Línea 115: | Línea 150: | ||
} | } | ||
?> | ?> | ||
+ | </source> | ||
+ | |||
− | Modelo: departamento.php | + | ''' Modelo: departamento.php ''' |
+ | <source lang='sql'> | ||
+ | -- DDL para PostgreSQL | ||
+ | CREATE TABLE 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 | ||
+ | ); | ||
+ | </source> | ||
+ | <source lang='php'> | ||
<?php | <?php | ||
class Departamento extends ActiveRecord { | class Departamento extends ActiveRecord { | ||
Línea 134: | Línea 184: | ||
} | } | ||
?> | ?> | ||
+ | </source> | ||
− | Vista: index.phtml de views/consultardepartamentospais | + | ''' Vista: index.phtml de views/consultardepartamentospais ''' |
+ | <source lang='php'> | ||
<div class="content"> | <div class="content"> | ||
<?php echo View::content();?> | <?php echo View::content();?> | ||
<h3>Departamentos de <?php echo $nombredelpais;?></h3> | <h3>Departamentos de <?php echo $nombredelpais;?></h3> | ||
<ul> | <ul> | ||
− | + | <?php foreach ($listDepartamentosPais->items as $item):?> | |
<li> | <li> | ||
<?php echo Html::link("consultarciudadesdepartamento/index/1/$item->id", str_pad($item->codigonumerico, 2, "0", STR_PAD_LEFT));?> - <?php echo $item->nombre;?> | <?php echo Html::link("consultarciudadesdepartamento/index/1/$item->id", str_pad($item->codigonumerico, 2, "0", STR_PAD_LEFT));?> - <?php echo $item->nombre;?> | ||
Línea 150: | Línea 202: | ||
<?php if($listDepartamentosPais->next) echo Html::linkAction("index/$listDepartamentosPais->next/$item->pais_id/", 'Próximo >>');?> | <?php if($listDepartamentosPais->next) echo Html::linkAction("index/$listDepartamentosPais->next/$item->pais_id/", 'Próximo >>');?> | ||
</div> | </div> | ||
+ | </source> | ||
Como se nota Html::link("consultarciudadesdepartamento/index/1/$item->id"?> permite el despliegue de los departamentos del respectivo pais entonces: | Como se nota Html::link("consultarciudadesdepartamento/index/1/$item->id"?> permite el despliegue de los departamentos del respectivo pais entonces: | ||
− | Controlador: consultarciudadesdepartamento_controller.php | + | ''' Controlador: consultarciudadesdepartamento_controller.php ''' |
+ | <source lang='php'> | ||
<?php | <?php | ||
Load::models('ciudad', 'departamento', 'pais'); | Load::models('ciudad', 'departamento', 'pais'); | ||
− | class ConsultarCiudadesDepartamentoController extends | + | class ConsultarCiudadesDepartamentoController extends AppController { |
public function index($page=1, $departamentoid=15) | public function index($page=1, $departamentoid=15) | ||
{ | { | ||
Línea 170: | Línea 224: | ||
} | } | ||
?> | ?> | ||
+ | </source> | ||
+ | |||
+ | La función index tiene el parámetro $departamentoid con default 15 que en mi caso es el id de Cundinamarca | ||
− | Vista: index.phtml de views/consultarciudadesdepartamento | + | ''' Vista: index.phtml de views/consultarciudadesdepartamento ''' |
+ | <source lang='php'> | ||
<div class="content"> | <div class="content"> | ||
<?php echo View::content();?> | <?php echo View::content();?> | ||
<h3>Ciudades de <?php echo $nombredeldepartamento;?> - <?php echo $nombredelpais;?></h3> | <h3>Ciudades de <?php echo $nombredeldepartamento;?> - <?php echo $nombredelpais;?></h3> | ||
<ul> | <ul> | ||
− | + | <?php foreach ($listCiudadesDepartamento->items as $item):?> | |
<li> | <li> | ||
<?php if ($item->codigo == " ") echo "ZZZ"; else echo $item->codigo;?> - <?php echo str_pad($item->codigonumerico, 3, "0", STR_PAD_LEFT);?> - <?php echo $item->nombre;?> | <?php if ($item->codigo == " ") echo "ZZZ"; else echo $item->codigo;?> - <?php echo str_pad($item->codigonumerico, 3, "0", STR_PAD_LEFT);?> - <?php echo $item->nombre;?> | ||
Línea 186: | Línea 244: | ||
<?php if($listCiudadesDepartamento->next) echo Html::linkAction("index/$listCiudadesDepartamento->next/$item->departamento_id/", 'Próximo >>');?> | <?php if($listCiudadesDepartamento->next) echo Html::linkAction("index/$listCiudadesDepartamento->next/$item->departamento_id/", 'Próximo >>');?> | ||
</div> | </div> | ||
+ | </source> | ||
+ | |||
+ | |||
+ | [[Categoría:Tutoriales KumbiaPHP]] | ||
+ | --[[Usuario:Cbeltranv|Cbeltranv]] 02:56 2 nov 2010 (UTC) |
Revisión actual del 02:27 27 may 2012
Ejemplo probado del uso de paginate en Beta 2[editar]
Controlador: consultarpaises_controller.php
<?php
Load::models('pais');
class ConsultarPaisesController extends AppController {
public function index($page=1)
{
$pais = new Pais();
$this->listPaises = $pais->getPaises($page);
}
}
?>
Modelo: pais.php
-- DDL para PostgreSQL
CREATE TABLE Pais
(
Id serial,
PRIMARY KEY (Id),
Codigo char(2) UNIQUE NOT NULL,
Nombre character varying(100) NOT NULL,
Activ boolean DEFAULT true
);
<?php
class Pais extends ActiveRecord {
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;
}
}
?>
Vista: index.phtml de views/consultarpaises
<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("consultardepartamentospais/index/1/$item->id", $item->codigo); else echo Html::link("consultarciudadespais/index/1/$item->id", $item->codigo);?> - <?php echo $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>
Como se nota con Html::link("consultarciudadespais/index/1/$item->id"?> permite el despliegue de las ciudades del respectivo pais entonces:
Controlador: consultarciudadespais_controller.php
<?php
Load::models('ciudad', 'pais');
class ConsultarCiudadesPaisController extends AppController {
public function index($page=1, $paisid=48)
{
$paises = new Pais();
$this->nombredelpais = $paises->getNombre($paisid);
$ciudadespais = new Ciudad();
$this->listCiudadesPais = $ciudadespais->getCiudadesPais($page, $paisid);
}
}
?>
La función index tiene el parámetro $paisid con default 48 que en mi caso es el id de Colombia
Modelo: ciudad.php
-- DDL para PostgreSQL
CREATE TABLE 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
);
<?php
class Ciudad extends ActiveRecord {
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');
}
}
?>
Al invocar paginate se debe incluir el parametro "pais_id = $paisid" con comillas dobles para que resuelva $paisid
Vista: index.phtml de views/consultarciudadespais
<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 "ZZZ"; else echo $item->codigo;?> - <?php echo $item->nombre;?>
</li>
<?php endforeach;?>
</ul>
<?php if($listCiudadesPais->prev) echo Html::linkAction("index/$listCiudadesPais->prev/$item->pais_id/", '<< Anterior |');?>
<?php if($listCiudadesPais->next) echo Html::linkAction("index/$listCiudadesPais->next/$item->pais_id/", 'Próximo >>');?>
</div>
Ahora para Colombia el Html::link("consultardepartamentospais/index/1/$item->id"?> permite el despliegue de los departamentos del respectivo pais entonces:
Controlador: consultardepartamentospais_controller.php
<?php
Load::models('departamento', 'pais');
class ConsultarDepartamentosPaisController 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);
}
}
?>
Modelo: departamento.php
-- DDL para PostgreSQL
CREATE TABLE 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
);
<?php
class Departamento extends ActiveRecord {
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;
}
}
?>
Vista: index.phtml de views/consultardepartamentospais
<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::link("consultarciudadesdepartamento/index/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>
Como se nota Html::link("consultarciudadesdepartamento/index/1/$item->id"?> permite el despliegue de los departamentos del respectivo pais entonces:
Controlador: consultarciudadesdepartamento_controller.php
<?php
Load::models('ciudad', 'departamento', 'pais');
class ConsultarCiudadesDepartamentoController extends AppController {
public function index($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);
}
}
?>
La función index tiene el parámetro $departamentoid con default 15 que en mi caso es el id de Cundinamarca
Vista: index.phtml de views/consultarciudadesdepartamento
<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 "ZZZ"; 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("index/$listCiudadesDepartamento->prev/$item->departamento_id/", '<< Anterior |');?>
<?php if($listCiudadesDepartamento->next) echo Html::linkAction("index/$listCiudadesDepartamento->next/$item->departamento_id/", 'Próximo >>');?>
</div>
--Cbeltranv 02:56 2 nov 2010 (UTC)