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.

  • 05 mayo 2009

    Habilitar mod_rewrite para urls amigables DEBIAN

    Habilitar el mod_rewrite para uso de urls amigables

    # a2enmod rewrite

    Enabling module rewrite.

    Run '/etc/init.d/apache2 restart' to activate new configuration!

    Reiniciar los servicios de apache

    #/etc/init.d/apache2 restart

    probar la configuracion con script php

    Crear un virtualHost con soporte de lectura .htaccess, editar el archivo /etc/hosts/apache2/sities/available/default , al final del archivo agregue las siguientes lineas:

    <VirtualHost *:80>
    ServerName www.urlamiga.com
    DocumentRoot /var/www/examples/php/urls/
    <Directory />
    Options FollowSymLinks
    AllowOverride All
    </Directory>
    DirectoryIndex index.php index.html index.htm
    </virtualhost>

    Nuevamente reiniciamos los servicios de apache.
    # /etc/init.d/apache2 force-reload

    Editar el archivo de hosts /etc/hosts, y en la linea 127.0.0.1 agregar el ServerName del VirtualHost antes creado:

    127.0.0.1 localhost www.urlamiga.com

    Guardar los suiguientes ficheros (rewrite.php y .htaccess) en /var/www/examples/php/urls/

    rewrite.php
    Crea un archivo php llamado rewrite.php con el siguiente codigo:

    <h2 align=center>
    <? if(isset($_GET['link'])){
    if($_GET['link']==1){echo"Enlace sin usar mod_rewrite";}
    elseif($_GET['link']==2){echo"Felicitaciones!! Tu has usado mod_rewrite de Apache y funciona correctamente";}
    else{echo"Verifica el modulo mod_rewrite de tu Apache";}
    }
    ?>
    </h2>
    <hr>
    <head>
    <title>Probar mod_rewrite en Apache Linux&lt;/title>
    </head>
    <body>
    <h1>Probar mod_rewrite en Apache Linux</h1>
    <p><a href="rewrite.php?link=1">Enlace uno </a> = rewrite.php?link=1</p>
    <p><a href="link2.html">Enlace 2</a&gt; = link2.html</p>
    <ul>
    <li>Prueba el enlace uno</li>
    <li>Luego prueba el enlace dos</li>
    <li>Si con el enlace dos te sale que la p�gina no fue encontrada entonces no tienes activado los .htaccess del apache o no funciona el mod_rewrite</li>
    </ul>
    </body>
    </html>


    .htaccess
    1. RewriteEngine On
    2. RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L]


    Resultados:





    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...