1. Taller: Desarrollo de extensiones en Joomla! 1.6
Jordi Vila Gallardo jordi.vila@dunlock.com
www.arambee.com · www.dunlock.com · www.criteria.cat · www.webactualizable.com
2. 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.
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
3. Í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
4. Í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
5. 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
6. Nuevo diseño
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
7. Categorías anidadas
Joomla! 1.6
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
8. 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
9. 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
10. Niveles / Tipos de acciones
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
21. La librería Jform: Otros tipos
Joomla! 1.6
<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!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
22. La librería JForm: Mostrar atributos a la vista
<?php
foreach($this->form->getFieldset('data') as $field):
if (!$field->hidden):
echo $field->label;
endif;
Joomla! 1.6 if ($field->type=="Editor"): ?>
<div class="clr"></div><?
endif;
echo $field->input;
endforeach;
?>
<?php
Joomla! 1.6 echo $this->form->getLabel('rules');
echo $this->form->getInput('rules');
?>
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
23. La clase controlador: Herencia
// No direct access
defined('_JEXEC') or die;
Joomla! 1.5 jimport('joomla.application.component.controller');
class HellosControllerHello extends JController {
…
}
// No direct access
defined('_JEXEC') or die;
jimport('joomla.application.component.controllerform');
Joomla! 1.6
class HellosControllerHello extends JControllerForm {
…
}
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
24. La clase controlador: Funciones
Joomla! 1.5 Joomla! 1.6
class HellosControllerHello extends class HellosControllerHello extends
JController { JControllerForm {
… …
function edit() { function allowAdd($data = array() ) {
… /* Si hay categorías */
} …
}
function save() {
… function allowEdit($data = array() ) {
} /* Si hay categorías */
…
function remove() { }
…
} /*
El resto de las clases ja están
function cancel() { implementadas en la clase
… JControllerForm
} */
} }
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
25. Las clases modelo: Herencia
// No direct access
defined('_JEXEC') or die;
Joomla! 1.5 jimport('joomla.application.component.model');
class HellosModelHello extends JModel {
…
}
// No direct access
defined('_JEXEC') or die;
jimport('joomla.application.component.modeladmin');
Joomla! 1.6
class HellosModelHello extends JModelAdmin {
…
}
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
26. La clase modelo: Funciones
Joomla! 1.5 Joomla! 1.6
class HelloModelHello extends JModel { class HellosModelHello extends
… JModelAdmin {
function setId($id) { …
… function getForm($data=array(),
} $loadData=true) { … }
function getData() { function loadFormData() {
… /* Implementado en JmodelAdmin */
} …
}
function store() { function getItem($pk = null) {
… /* Implementado en JModelAdmin */
} …
}
function delete() { function prepareTable(& $table) {
… /* Implementación en JModelAdmin */
} /* Ej: Insertar el ordering */
} …
}
}
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
27. La clase modelo: Obtener formulario
Joomla! 1.6
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!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
28. La clase modelo: Lectura de datos
Joomla! 1.6
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!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
29. La clase modelo: Obtener listado
Joomla! 1.5 Joomla! 1.6
class HelloModelHellos extends JModel { class HellosModelHellos extends JModelList
… {
function _buildQuery() { …
… function getListQuery() {
} …
}
function getData() {
… }
}
…
}
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
30. La clase model: Función para obtener el listado
function getData(){
// Lets load the data if it doesn't already exist
if (empty( $this->_data )) {
Joomla! 1.5 $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);
Joomla! 1.6 // Select the required fields from the table.
$query->select(a.id, ...);
$query->from('`#__hellos` AS a');
$query->where('a.state = 1');
}
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
31. Gestión de permisos: Implementación
Joomla! 1.6
/* 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!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
32. Gestión de validaciones: Ejemplo
Joomla! 1.6
<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!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
33. Gestión de layouts: Ejemplo
Joomla! 1.6
<?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!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
34. Directorio “felds”: Añadir nuevo
* Ver ejemplo de ordering
Joomla!Day Valencia 2010 – Desarrollo de extensiones en Joomla! 1.6
35. ¿ Preguntas, dudas ?
Gracias por vuestra asistencia
Taller: Desarrollo de extensiones en Joomla! 1.6
Jordi Vila Gallardo jordi.vila@dunlock.com
www.arambee.com · www.dunlock.com · www.criteria.cat · www.webactualizable.com