Presentación joomla-day-2010 Jordi Vila

Preview:

DESCRIPTION

Conferencia de desarrollo en la nueva version 1.6 de Joomla por Jordi Vila, Joomla!Day Valencia, Joomla Spain

Citation preview

Taller: Desarrollo de extensiones en Joomla! 1.6

Jordi Vila Gallardo jordi.vila@dunlock.comwww.arambee.com · 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 jordi.vila@dunlock.comwww.arambee.com · www.dunlock.com · www.criteria.cat · www.webactualizable.com

Recommended