22 mayo 2009

Paginacion simple en Front-end Joomla


Programar componentes para Joomla es un verdadero desafio asi que aqui les traigo un ejemplo que les puede servir para paginar en el front-end, el componente no tiene un instalador solo hay que seguir los pasos de este mini tuto
para ver funcionando el componente, en la siguiente figura se muestra la estructura de directorios que se deve formar en el directorio components de nuestro joomla:
Primero crearemos la tabla que contiene los registros a paginar en este caso crea un archivo sql o pega el codigo en tu phpmyadmin:
CREATE TABLE IF NOT EXISTS `jos_edosmx` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL default '',
`alias` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`))
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=34 ;
--
-- Dumping data for table `jos_edosmx`
--
INSERT INTO `jos_edosmx` (`id`, `title`,`alias`) VALUES
(1, 'Aguascalientes','aguascalientes'),
(2, 'Baja California','baja-california'),
(3, 'Baja California Sur','baja-california-sur'),
(4, 'Campeche','campeche'),
(5, 'Chiapas','chiapas'),
(6, 'Chihuahua','chihuahua'),
(7, 'Coahuila de Zaragoza','coahuila-de-zaragoza'),
(8, 'Colima','colima'),
(9, 'Distrito Federal','distrito-federal'),
(10, 'Durango','durango'),
(11, 'Guanajuato','guanajuato'),
(12, 'Guerrero','guerrero'),
(13, 'Hidalgo','hidalgo'),
(14, 'Jalisco','jalisco'),
(15, 'México','mexico'),
(16, 'Michoacán de Ocampo','michoacan-de-ocampo'),
(17, 'Morelos','morelos'),
(18, 'Nayarit','nayarit'),
(19, 'Nuevo León','nuevo-leon'),
(20, 'Oaxaca','oaxaca'),
(21, 'Puebla','puebla'),
(22, 'Querétaro Arteaga','queretaro-arteaga'),
(23, 'Quintana Roo','quintana-roo'),
(24, 'San Luís Potosí','san-luis-potosi'),
(25, 'Sinaloa','sinaloa'),
(26, 'Sonora','sonora'),
(27, 'Tabasco','tabasco'),
(28, 'Tamaulipas','tamaulipas'),
(29, 'Tlaxcala','tlaxcala'),
(30, 'Veracruz Llave','veracruz-llave'),
(31, 'Yucatán','yucatan'),
(32, 'Zacatecas','zacatecas');


Seguimos dentro del archivo pag.php introducimos el siguiente codigo
<?php
defined('_JEXEC')or die('Restricted Access');
//importando el contollador base
require_once(JPATH_COMPONENT.DS.'controller.php');
if($controller = JRequest::getWord('controller')){
$path = JPATH_COMPONENT.DS.'controller'.DS.$controller.'.php';
if(file_exists($path)){
require_once $path;
}else{
$controller = "";
}
}
$classname = 'PagController'.$controller;
$controller = new $classname();
$controller->execute(JRequest::getVar('task'));
$controller->redirect();
?>

contenido del fichero controller.php
<?php
defined('_JEXEC')or die('Acceso Resntringido');
jimport('joomla.application.component.controller');
class PagController extends JController{
function display(){
parent::display();
}
}
?>
contenido /models/pag.php
<?php
defined('_JEXEC') or die( 'Restricted access' );
jimport('joomla.application.component.model');
class PagModelPag extends JModel{
//obtiene el numero maximo de registros en la tabla
function getTotal(){
$db =& JFactory::getDBO();
$query = 'SELECT COUNT(*) '.' FROM #__edosmx ';
$db->setQuery($query);
return $db->loadResult();
}

function getData($limitstart,$limit){
$db =& JFactory::getDBO();
$query = "SELECT * FROM #__edosmx";
$db->setQuery( $query, $limitstart, $limit );
return $db->loadObjectList();
}
}
?>
contenido /views/view.html.php
<?php
defined('_JEXEC')or die('Acceso Restringido');
jimport('joomla.application.component.view');
class PagViewPag extends JView{
function display($tpl = null){
global $mainframe, $option;
$params = &$mainframe->getParams();
$layout = JRequest::getCmd('layout');
$limitstart = JRequest::getVar('limitstart', 0, '', 'int');
$params->def('show_pagination_limit', 1);
$params->def('filter',2);

jimport('joomla.html.pagination');
$limit = $mainframe->getUserStateFromRequest('com_pag.'.$this->getLayout().'.limit', 'limit', $default_limit, 'int');
$total = & $this->get( 'Total' );
$pagination = new JPagination($total, $limitstart, $limit);
$model =& $this->getModel();
$datos = & $model->getData($pagination->limitstart,$pagination->limit);
$filter= JRequest::getString('filter');

$this->assign('datos',$datos);
$this->assignRef('params', $params);
$this->assignRef('pagination', $pagination);
parent::display($tpl);
}
}
?>



contenido views/tmpl/default.php

<?php
defined('_JEXEC')or die('Acceso Restringido');
?>
<form action="<?php echo $this->action; ?>" method="post" name="adminForm">
<div style="text-align:center;">
<?php echo $this->pagination->getPagesLinks(); ?>
</div>
<table width="100%">
<tr>
<?php if ($this->params->get('filter')) :?>
<td align="left" width="60%" nowrap="nowrap">
<?php echo JText::_($this->params->get('filter_type') . ' Filter').'&nbsp;'; ?>
<input type="text" name="filter" value="<?php echo $this->escape($this->lists['filter']);?>" class="inputbox" onchange="document.adminForm.submit();" />
</td>
<?php endif; ?>
<?php if ($this->params->get('show_pagination_limit')) : ?>
<td align="right" width="40%" nowrap="nowrap">
<?php
echo '&nbsp;&nbsp;&nbsp;'.JText::_('Display Num').'&nbsp;';
echo $this->pagination->getLimitBox();
?>
</td>
<?php endif; ?>
</tr>
</table>

<table width="100%">
<tr>
<td align="center" class="sectiontableheader<?php echo $this->params->get( 'pageclass_sfx' ); ?>" width="5%" nowrap="nowrap">
<?php echo JText::_('id'); ?>
</td>
<td class="sectiontableheader<?php echo $this->params->get( 'pageclass_sfx' ); ?>" width="45%">
<?php echo JText::_('Titulo'); ?>
</td>
<td class="sectiontableheader<?php echo $this->params->get( 'pageclass_sfx' ); ?>" width="20%">
<?php echo JText::_('Alias'); ?>
</td>
</tr>

<?php
/**contenido de la tabla*/
foreach ($this->datos as $dato) : ?>
<tr class="sectiontableentry<?php echo ($item->odd +1 ) . $this->params->get( 'pageclass_sfx' ); ?>" >
<td><?php echo $dato->id;?></td>
<td><?php echo $dato->title;?></td>
<td><?php echo $dato->alias;?></td>
</tr>
<?php endforeach;?>
</table>

<div style="text-align:center;">
<?php echo $this->pagination->getPagesLinks(); ?>
</div>

ahora acceder a nuetro local, o donde tengamos alojado nuestro joomla con la siguiente url: http://localhost/index.php?option=com_pag
  • Se que es un ejemplo simple pero espero y alguien puede ampliarlo para el filtrado por busqueda y columnas.

  • 3 comentarios:

    zodman dijo...

    aaaaaaaah tu codigo se ve horribleeeeeeeeeeeee

    te recomiendo usar pygments para colorear tu codigo

    Unknown dijo...

    Muy bueno el articulo, me sirvio de mucha ayuda, gracias maestro!

    Unknown dijo...

    Gracias me ha servido perfecto para joomla 3x, solo hay que cambiar la asignacion de las variables del view.thml al defaul.php y funciona perfecto. Llevaba todo el dia intentando hacerlo y mirando documentacion pero nada, hasta encontrar tu eplicacion, Mil gracias.

    Excel 2013, convertir mes en texto a numero

    Si tienes un mes en formato ENERO este lo cambiara a 02, funciona en la versión de Excel 2013, solo se tienen que reemplazar J2 por la celda...