Statistiques

Compteur d'affichages des articles
1040147

7-Création des fiches de testLogo Joomla 2.5

Nous allons créer comme livres:

Fondation

Ubik

Herzog

Le maître du haut château

Nous allons créer comme auteurs:

Philip K. Dick

Asimov

Philip Roth

Nous allons créer comme catégories:

Science fiction

Contemporaine

Cela nous donne :

Liste des livres

 

Liste des catégories

Liste des auteurs

 

8-Liaison livre-auteur (vue liste)

En l'état actuel il n'est pas possible de gérer la liaison entre les livres et les auteurs. Pour corriger cela il est nécessaire de modifier du code.

Tout d'abord il faut prendre en compte le champ id_auteur.

administrator\components\com_livres\models\livres.php

La fonction __construct est :

public function __construct($config = array())
{
if (empty($config['filter_fields'])) {
$config['filter_fields'] = array(
'id', 'a.id',
'title', 'a.title',
'alias', 'a.alias',
'checked_out', 'a.checked_out',
'checked_out_time', 'a.checked_out_time',
'catid', 'a.catid', 'category_title',
'state', 'a.state',
'access', 'a.access', 'access_level',
'created', 'a.created',
'created_by', 'a.created_by',
'ordering', 'a.ordering',
'publish_up', 'a.publish_up',
'publish_down', 'a.publish_down',
);
}

parent::__construct($config);
}

Elle devient :

public function __construct($config = array())
{
if (empty($config['filter_fields'])) {
$config['filter_fields'] = array(
'id', 'a.id',
'title', 'a.title',
'alias', 'a.alias',
'checked_out', 'a.checked_out',
'checked_out_time', 'a.checked_out_time',
'catid', 'a.catid', 'category_title',
'state', 'a.state',
'access', 'a.access', 'access_level',
'created', 'a.created',
'created_by', 'a.created_by',
'ordering', 'a.ordering',
'publish_up', 'a.publish_up',
'publish_down', 'a.publish_down',
'id_auteur', 'a.id_auteur', 'auteur_title'
);
}

parent::__construct($config);
}

Les lignes 127 à 140 sont :

$query->select(
$this->getState(
'list.select',
'a.id, a.title, a.alias, a.subtitle, ' .
'a.snippet, a.fulltext, a.catid, ' .
'a.created, a.created_by, a.created_by_alias, '.
'a.modified, a.modified_by, '.
'a.checked_out, a.checked_out_time, ' .
'a.state, a.publish_up, a.publish_down, ' .
'a.access, a.asset_id, a.version, a.language, a.ordering, ' .
'a.metakey, a.metadesc, a.metadata, ' .
'a.parameters, a.custom_fields'
)
);

Elles deviennent :

$query->select(
$this->getState(
'list.select',
'a.id, a.title, a.alias, a.subtitle, ' .
'a.snippet, a.fulltext, a.catid, ' .
'a.created, a.created_by, a.created_by_alias, '.
'a.modified, a.modified_by, '.
'a.checked_out, a.checked_out_time, ' .
'a.state, a.publish_up, a.publish_down, ' .
'a.access, a.asset_id, a.version, a.language, a.ordering, ' .
'a.metakey, a.metadesc, a.metadata, ' .
'a.parameters, a.custom_fields, a.id_auteur'
)
);

Il faut aussi rajouter à partir de la ligne 154 :

 

// Join over the auteurs.
$query->select('au.title AS auteur_title');
$query->join('LEFT', '#__auteurs AS au ON au.id = a.id_auteur');

 

 administrator\components\com_livres\views\livres\tmpl\default.php

Il faut ajouter à partir de la ligne 67 :

<th width="5%">
<?php echo JHtml::_('grid.sort', 'COM_LIVRES_AUTEUR_TITLE', 'a.id_auteur', $listDirn, $listOrder); ?>
</th>

Puis à partir de la ligne 129 :

<td class="center">
<?php echo $this->escape($item->auteur_title); ?>
</td>

administrator\components\com_livres\language\en-GB\en-GB.com_livres.ini

Il faut ajouter cette définition :

COM_LIVRES_AUTEUR_TITLE="Auteur"

 

L'affichage en liste des livres gère maintenant les auteurs.

Prise en compte des auteurs

 Mais si nous cliquons sur un livre l'éditer nous n'avons pas de gestion des auteurs dans la fiche d'un livre.

Fiche livre sans auteur

Nous allons résoudre cela.

8-Liaison livre-auteur (vue fiche - liste déroulante)

 administrator\components\com_livres\views\auteur\tmpl\edit.php

Il faut insérer à partir de la ligne 41 :

<li><?php echo $this->form->getLabel('id_auteur'); ?>
<?php echo $this->form->getInput('id_auteur'); ?></li>

administrator\components\com_livres\models\forms\livre.xml

Il faut insérer une définition du champ id_auteur:

<field
name="id_auteur"
type="text"
label="COM_LIVRES_FIELD_AUTEUR_LABEL"
description="COM_LIVRES_FIELD_AUTEUR_DESC"
class="inputbox"
size="30" />

administrator\components\com_livres\language\en-GB\en-GB.com_livres.ini

Il faut ajouter ces définitions :

COM_LIVRES_FIELD_AUTEUR_LABEL="Auteur"

COM_LIVRES_FIELD_AUTEUR_DESC="Saisir l'ID de l'auteur de ce livre"

 

Cela donne ceci :

 Saisie de l'ID de l'auteur

 

Ce n'est pas satisfaisant car il faut connaître l'id de l'auteur.

Nous allons créer une liste déroulante pour choisir un auteur.

Nous allons créer un fichier : administrator\components\com_livres\models\fields\selectauteur.php

Le contenu est :

<?php
jimport('joomla.form.helper');
JFormHelper::loadFieldClass('list');


class JFormFieldSelectAuteur extends JFormFieldList
{
/**
* The field type.
*
* @var string
*/
protected $type = 'selectauteur';

/**
* Method to get a list of options for a list input.
*
* @return array An array of JHtml options.
*/
protected function getOptions() 
{
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('id AS value, title AS text');
$query->from('#__auteurs');
$db->setQuery((string)$query);
$messages = $db->loadObjectList();
$options = array();
if ($messages)
{
foreach($messages as $message) 
{
$options[] = JHtml::_('select.option', $message->value, $message->text);
}
}
$options = array_merge(parent::getOptions(), $options);

return $options;
}
}

administrator\components\com_livres\models\forms\livre.xml

Il faut modifier la définition du champ id_auteur:

<field
name="id_auteur"
type="selectauteur"
label="COM_LIVRES_FIELD_AUTEUR_LABEL"
description="COM_LIVRES_FIELD_AUTEUR_DESC"
required="true"
size="1"
default="0"
class="inputbox"
/>

Maintenant quand nous cliquons sur l'édition d'un livre cela donne :

Liste déroulante auteurs

Choisir l'auteur (ici Asimov) et sauvegarder.

Si nous renseignons tous les livres cela donne:

Liste des livres avec auteurs

Si nous voulons ré-éditer un livre nous voyons que l'auteur est bien renseigné:

Ré-édition d'un livre

 

 

Nous verrons dans l'article suivant comment faire pour choisir un auteur dans une fenêtre "Modal".