10-Case à cocher
Nous allons voir ici le cas des cases à cocher.
Je n'ai jamais réussi à les faire fonctionner (il semble que je ne sois pas le seul), j'ai cherché sur les forums français et US sans succès.
La case se coche bien et sauvegarde la valeur mais elle ne se décoche pas donc la valeur est toujours à 1.
J'ai donc choisi de coder quelque chose pour corriger cela.
Nous modifions la table Livres pour ajouter un champ pour gérer le prêt de livres.
Les valeurs seront: 1 pour prêter et 0 pour en stock.
Les modifications du code sont les suivantes:
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', 'id_auteur', 'a.id_auteur', 'auteur_title' ); } parent::__construct($config); }
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', 'pret', 'a.pret' ); }
Ligne 139 :
'a.parameters, a.custom_fields, a.id_auteur'
==>
'a.parameters, a.custom_fields, a.id_auteur, a.pret'
administrator\components\com_livres\models\forms\livre.xml
Ajouter la déclaration suivante :
<field name="pret" type="checkbox" label="COM_LIVRES_FIELD_PRET_LABEL" description="COM_LIVRES_FIELD_PRET_DESC" class="inputbox" size="1" value="1" checked="checked" />
administrator\components\com_livres\views\livres\tmpl\default.php
Ajouter à la ligne 70 :
<th width="5%"> <?php echo JHtml::_('grid.sort', 'COM_LIVRES_PRET_TITLE', 'a.pret', $listDirn, $listOrder); ?> </th>
puis à la ligne 135 :
<td class="center"> <?php $checked=""; if ($item->pret == 1){ $checked="checked"; ?> <input type="checkbox" name="pret[]" id="pret" value="<?php echo $item->pret;?>" <?php echo $checked;?> disabled="disabled" > <?php };?> </td>
Dans le fichier de langue ajouter les déclarations suivantes :
COM_LIVRES_PRET_TITLE="Prêt"
COM_LIVRES_FIELD_PRET_LABEL="Livre en prêt"
COM_LIVRES_FIELD_PRET_DESC="Cocher si livre prété"
administrator\components\com_livres\views\livre\tmpl\edit.php
Ajouter à la ligne 45 :
<li><?php echo $this->form->getLabel('pret'); ?> <?php echo $this->form->getInput('pret'); ?></li>
administrator\components\com_livres\models\livre.php
La fonction save est :
public function save($data) { // Alter the title for save as copy if (JRequest::getVar('task') == 'save2copy') { list($title,$alias) = $this->generateNewTitle($data['catid'], $data['alias'], $data['title']); $data['title'] = $title; $data['alias'] = $alias; } if (parent::save($data)) { return true; } return false; }
devient
public function save($data) { // Alter the title for save as copy if (JRequest::getVar('task') == 'save2copy') { list($title,$alias) = $this->generateNewTitle($data['catid'], $data['alias'], $data['title']); $data['title'] = $title; $data['alias'] = $alias; } if ( array_key_exists('pret', $data)) { $data['pret']='1'; } else { $data['pret']='0'; } if (parent::save($data)) { return true; } return false; }
Cela nous donne :
Comme aucun livre n'est prêté nous n'avons rien dans la colonne Prêt.
Si nous allons sur un livre :
Cochons (roses) Livre en prêt et sauvegardons.
Si nous changeons dans :
administrator\components\com_livres\views\livres\tmpl\default.php
<td class="center"> <?php $checked=""; if ($item->pret == 1){ $checked="checked"; ?> <input type="checkbox" name="pret[]" id="pret" value="<?php echo $item->pret;?>" <?php echo $checked;?> disabled="disabled" > <?php };?> </td>
par
<td class="center"> <?php $checked=""; if ($item->pret == 1){ $checked="checked"; ?> <?php };?> <input type="checkbox" name="pret[]" id="pret" value="<?php echo $item->pret;?>" <?php echo $checked;?> disabled="disabled" > </td>
Cela donne :