Statistiques

Compteur d'affichages des articles
1040163

 10-Case à cocherLogo Joomla 2.5

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.

Création nouveau champ pour le prêt

 

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 :

Vue en liste

Comme aucun livre n'est prêté nous n'avons rien dans la colonne Prêt.

Si nous allons sur un livre :

Vue fiche d'un livre

Cochons (roses) Livre en prêt et sauvegardons.

Vue avec case cochée.

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 :

Vue liste avec cases à cocher