Download - Presentación joomla-day-2010 Jordi Vila
Taller: Desarrollo de extensiones en Joomla! 1.6
Jordi Vila Gallardo [email protected] · www.dunlock.com · www.criteria.cat · www.webactualizable.com
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Sobre mi
Jordi Vila Ingeniero Técnico en Informática, especializado en Ingeniería web
D-Unlock Ingeniería Web
Consultoría Web, Ingeniería Web, Comunicación Digital, Consultoría Joomla, Arquitectura Web
•Participo en varias asociaciones:– JCI Girona (Asociación de jovenes emprendedores)
Empecé con Joomla 1.5.
Índice: Parte 1
PART 1
● Requerimientos básicos
● Nuevo diseño
● Categorías anidadas
● Control de permisos (ACL)
● Mantenimieto de redirecciones
● Papelera Integrada
● Nuevos botones
● Artículo destacados
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Índice: Parte 2
PART 2
● Introducción al componente de saludos
● Estructura de directorios
● La clase controlador
● La clase modelo
● Gestión de permisos
● Gestión de validaciones
● Gestión de layouts
● Añadir nuevos “felds”
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Requerimientos básicos
Joomla! 1.6
● PHP 5.2+
● MySQL 5.0.4+
Joomla! 1.5
● PHP 5.2+
● MySQL 4.1.x +
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Nuevo diseño
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Categorías anidadas
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Control de permisos
● En Joomla! 1.6 un usuario puede formar parte de múltiples grupos, que por lo contrario, en Joomla! 1.5 un usuario podía ser asignado a un único grupo.
● En Joomla! 1.6 es posible crear todos los niveles de acceso que se quiera para una buena gestión de la web, que por el contrario en Joomla! 1.5 se limitavan en los niveles (público, registrado y especial).
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Tipos de atorgamiento● No determinado: el permiso asume el valor “negativo” o el
valor del elemento padre y no quedan afectados los elementos hijos, es decir, podrán ser modifcados los permisos sin heredar los permisos del padre.
● Heredado: El elemento hijo hereda los permisos de los elementos padre.
● Denegar: Se niega permisos. A diferencia de la primera opción esta involucrara a los elementos hijo, es decir, en caso que se otorgue permisos a niveles de jerarquía inferior esto no tendrá ningún efecto y se mantendrá el permiso del elemento padre.
● Permitir: Habilita el permiso al elemento o acción. Al igual que en el caso anterior, hereda el permiso a los niveles inferiores.
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Niveles / Tipos de acciones
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Mantenimiento de redirecciones
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Papelera integrada
Nuevos botones
Joomla! 1.6
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Artículos destacados
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Introducción: Listado de saludos
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Introducción: Permisos del componenteJoomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Introducción: Listado de categorías
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Introducción: Edición de un saludo
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Introducción: Permisos de un elemento
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Estructura de directorios: Diferencias
Joomla! 1.5 Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
La librería Jform: Ejemplo
<form> ... <fieldset name="data" label="COM_HELLOS_FIELDSET_DATA"> <field name="title" type="text" class="inputbox" size="40" label="JGLOBAL_TITLE" description="COM_HELLOS_FIELD_TITLE_DESC" required="true" /> <field name="alias" type="text" class="inputbox" size="40" label="JFIELD_ALIAS_LABEL" description="COM_HELLOS_FIELD_ALIAS_DESC" /> ... </fieldset></form>
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
La librería Jform: Otros tipos
<form> <fieldset name="data" label="COM_HELLOS_FIELDSET_DATA"> <field name="ordering" type="Ordering" ... />
<field name="access" type="accesslevel" ... /> <field name="language" type="contentlanguage" ... <option value="*">JALL</option> </field>
<field name="rules" type="rules" filter="rules" component="com_hellos" section="hello"/> </fieldset></form>
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
La librería JForm: Mostrar atributos a la vista
<?phpforeach($this->form->getFieldset('data') as $field):
if (!$field->hidden): echo $field->label; endif; if ($field->type=="Editor"): ?>
<div class="clr"></div><? endif; echo $field->input; endforeach;?>
<?php echo $this->form->getLabel('rules');
echo $this->form->getInput('rules'); ?>
Joomla! 1.6
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
La clase controlador: Herencia
// No direct accessdefined('_JEXEC') or die;
jimport('joomla.application.component.controller');
class HellosControllerHello extends JController {…}
// No direct accessdefined('_JEXEC') or die;
jimport('joomla.application.component.controllerform');
class HellosControllerHello extends JControllerForm {…
}
Joomla! 1.6
Joomla! 1.5
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
La clase controlador: Funciones
class HellosControllerHello extends JController {…
function edit() {…}
function save() {…}
function remove() {…}
function cancel() {…}
}
class HellosControllerHello extends JControllerForm {…
function allowAdd($data = array() ) {/* Si hay categorías */…}
function allowEdit($data = array() ) {/* Si hay categorías */…}
/*El resto de las clases ja están implementadas en la clase
JControllerForm*/
}
Joomla! 1.6Joomla! 1.5
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Las clases modelo: Herencia
// No direct accessdefined('_JEXEC') or die;
jimport('joomla.application.component.model');
class HellosModelHello extends JModel {…}
// No direct accessdefined('_JEXEC') or die;
jimport('joomla.application.component.modeladmin');
class HellosModelHello extends JModelAdmin {…
}
Joomla! 1.6
Joomla! 1.5
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
La clase modelo: Funciones
class HelloModelHello extends JModel { …
function setId($id) {…}
function getData() {…}
function store() {…}
function delete() {…}
}
class HellosModelHello extends JModelAdmin {
…function getForm($data=array(),
$loadData=true) { … }
function loadFormData() { /* Implementado en JmodelAdmin */… }function getItem($pk = null) {/* Implementado en JModelAdmin */ … }function prepareTable(& $table) {/* Implementación en JModelAdmin *//* Ej: Insertar el ordering */… }
}
Joomla! 1.6Joomla! 1.5
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
La clase modelo: Obtener formulario
public function getForm($data = array(), $loadData = true) {
// Initialise variables. $app = JFactory::getApplication();
// Get the form. $form = $this->loadForm('com_hellos.hello','hello',array('control'=> 'jform', 'load_data'=>$loadData));
if (empty($form)) { return false; }
... return $form;}
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
La clase modelo: Lectura de datos
protected function loadFormData() {
// Check the session for previously entered form data. $data = Jfactory::getApplication() >getUserState('com_hellos.edit.hello.data', array());
if (empty($data)) { $data = $this->getItem(); // Prime some default values. if ($this->getState('hello.id') == 0) { $app = JFactory::getApplication(); $data->set('catid', JRequest::getInt('catid', $app- >getUserState('com_hellos.hellos.filter.category_id'))); } }
... return $data;}
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
La clase modelo: Obtener listado
class HelloModelHellos extends JModel { …
function _buildQuery() {…}
function getData() {…}…
}
class HellosModelHellos extends JModelList {
…function getListQuery() { … }
}
Joomla! 1.6Joomla! 1.5
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
La clase model: Función para obtener el listado
function getData(){// Lets load the data if it doesn't already existif (empty( $this->_data )) {
$query = $this->_buildQuery();$this->_data = $this->_getList( $query );
}return $this->_data;
}
protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select(a.id, ...); $query->from('`#__hellos` AS a');
$query->where('a.state = 1');}
Joomla! 1.6
Joomla! 1.5
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Gestión de permisos: Implementación
/* La función está en una clase helper */
public static function getActions($categoryId = 0, $helloId = 0) {... }
/* Modo de empleo en la vista */
$canDo = HellosHelper::getActions($this->state->get('filter.category_id'), $this->item->id);
$canDo->get('core.create')
* Ver los fichero access.xml, hello.xml, config.xml
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Gestión de validaciones: Ejemplo
<form> <fieldset name="data" label="COM_HELLOS_FIELDSET_DATA"> <field name="email_to" class="inputbox validate-email" ... />
<field name="width" class="inputbox validate-numeric" ... /> <field name="title" required="true" ...
/> </fieldset></form>
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Gestión de layouts: Ejemplo
<?php// No direct access.defined('_JEXEC') or die; echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_PUBLISHING'), 'publishing-details');?><fieldset class="panelform"> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('publishing') as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul></fieldset>
<?php echo $this->loadTemplate('rules'); ?>
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
Directorio “felds”: Añadir nuevo
* Ver ejemplo de ordering
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
¿ Preguntas, dudas ?Gracias por vuestra asistencia
Taller: Desarrollo de extensiones en Joomla! 1.6
Jordi Vila Gallardo [email protected] · www.dunlock.com · www.criteria.cat · www.webactualizable.com