Jump to content

[Résolu] Ajout nouveaux champs pour les attributs


Recommended Posts

Bonjour,

 

je vous expose mon soucis :

 

je doit mettre en place pour chaque attribut une infobulle qui décrit l'attribut.

 

C'est à dire que lorsque l'on ajoute un attribut on rentre son nom, le nom public et un textarea pour la description qui apparaitra dans l'infobulle.

 

Puis cela s'affichera sur la fiche produit à côté de son attribut (la mise en forme je m'en occuperais).

 

Mon problème est que je ne sais pas comment récupérer une valeur dans la base de données ni comment l'insérer.

 

J'ai rajouter un champs 'infobulle' de type TEXT dans la table 'attribute_lang'.

 

Merci :)

 

 

Edited by Odev (see edit history)
Link to comment
Share on other sites

Bonjour,

 

Quelle est votre version de prestashop ?

Il faudrait également préciser si votre description s'applique au groupe d'attribut : ex : Couleur
( Dans ce cas il faut modifier la table attribute_group_lang  et surcharger le modèle AttributeGroup)

 

Ou à la valeur de cet attribut : ex: jaune
( Dans ce cas il faut modifier la table attribute_lang et surcharger le modèle Attribute )

Edited by herve25 (see edit history)
Link to comment
Share on other sites

Version 1.5.6.

 

Oui elle s'applique au groupe d'attribut et non au valeur.

 

J'ai donc rajouter une colonne 'infos' dans la table _attibute_group_lang.

 

Maintenant faut que je vois pour surcharger le modèle.

 

Merci :)

Edited by Odev (see edit history)
Link to comment
Share on other sites

J'ai surcharger AttributeGroup dans override/classes.

 

Quel fonction dois-je modifier ? Car j'ai vu qu'il y a la fonction native getAttributeGroup qui récupère normalement tous les données de la table attribute_group_lang donc ma colonne rajouté 'infos'.

 

Que dois je faire à présent pour récupérer l'infos dans ma product.tpl ?

Link to comment
Share on other sites

Je dirais qu'il faudrait encore surcharger les fichiers suivants :

 

classes/Product.php ( fonction getAttributesGroups : rajouter le nouveau champ dans la requête sql )

controller/front/ProductController.php ( fonction assignAttributesGroups() : renseigner la valeur du champ dans la variable $groups )

 

Ensuite tu pourra accéder à la nouvelle information depuis le fichier tpl via la variable $group.champ

<div class="product_attributes">
				{if isset($groups)}
				<!-- attributes -->
				<div id="attributes">
				{foreach from=$groups key=id_attribute_group item=group}
					{if $group.attributes|@count}
						<fieldset class="attribute_fieldset">
							<label class="attribute_label" for="group_{$id_attribute_group|intval}">{$group.name|escape:'htmlall':'UTF-8'} :</label>
							{assign var="groupName" value="group_$id_attribute_group"}
							<div class="attribute_list">
							{if ($group.group_type == 'select')}
								<select name="{$groupName}" id="group_{$id_attribute_group|intval}" class="attribute_select" onchange="findCombination();getProductAttribute();{if $colors|@count > 0}$('#wrapResetImages').show('slow');{/if};">
									{foreach from=$group.attributes key=id_attribute item=group_attribute}
										<option value="{$id_attribute|intval}"{if (isset($smarty.get.$groupName) && $smarty.get.$groupName|intval == $id_attribute) || $group.default == $id_attribute} selected="selected"{/if} title="{$group_attribute|escape:'htmlall':'UTF-8'}">{$group_attribute|escape:'htmlall':'UTF-8'}</option>
									{/foreach}
								</select>
							{elseif ($group.group_type == 'color')}
								<ul id="color_to_pick_list" class="clearfix">
									{assign var="default_colorpicker" value=""}
									{foreach from=$group.attributes key=id_attribute item=group_attribute}
									<li{if $group.default == $id_attribute} class="selected"{/if}>
										<a id="color_{$id_attribute|intval}" class="color_pick{if ($group.default == $id_attribute)} selected{/if}" style="background: {$colors.$id_attribute.value};" title="{$colors.$id_attribute.name}" onclick="colorPickerClick(this);getProductAttribute();{if $colors|@count > 0}$('#wrapResetImages').show('slow');{/if}">
											{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}
												<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$colors.$id_attribute.name}" width="20" height="20" /><br>
											{/if}
										</a>
									</li>
									{if ($group.default == $id_attribute)}
										{$default_colorpicker = $id_attribute}
									{/if}
									{/foreach}
								</ul>
								<input type="hidden" class="color_pick_hidden" name="{$groupName}" value="{$default_colorpicker}" />
							{elseif ($group.group_type == 'radio')}
								{foreach from=$group.attributes key=id_attribute item=group_attribute}
									<input type="radio" class="attribute_radio" name="{$groupName}" value="{$id_attribute}" {if ($group.default == $id_attribute)} checked="checked"{/if} onclick="findCombination();getProductAttribute();{if $colors|@count > 0}$('#wrapResetImages').show('slow');{/if}">
									{$group_attribute|escape:'htmlall':'UTF-8'}<br/>
								{/foreach}
							{/if}
							</div>
						</fieldset>
					{/if}
				{/foreach}
				</div>
			{/if}
Link to comment
Share on other sites

Super !! ça fonctionne :P

 

J'ai donc ajouter mon champs dans la table.

 

J'ai surcharger les méthodes correspondant dans les fichiers : -Product, AttributeGroup et ProductController.

 

Puis j'ai afficher dans mon product.tpl.

 

Meerci beaucoup Herve :)

Link to comment
Share on other sites

  • 2 weeks later...

Voila c'est bon chaque attribut à son infobulle qui s'affiche mais pour mettre du texte dans les infobulles, je doit aller dans la base de données et éditer via phpmyadmin.

 

Mon besoin serait que dans le back office, quand je vais dans Catalogue -> Attributs et Valeurs -> et que je clique sur éditer un attribut, j'aurais une textarea pour pouvoir éditer mes infobulles.

 

Dans quel fichier dois-je faire ses ajouts ?

 

Merci.

Edited by Odev (see edit history)
Link to comment
Share on other sites

Voila j'ai surchagrer le controller pourtant rien ne change, je l'ai mis dans override -> controllers -> admin.

<?php
class AdminAttributesGroupsController extends AdminAttributesGroupsControllerCore{

	public function renderForm()
	{
		$this->table = 'attribute_group';
		$this->identifier = 'id_attribute_group';

		$group_type = array(
			array(
				'id' => 'select',
				'name' => $this->l('Drop-down list')
			),
			array(
				'id' => 'radio',
				'name' => $this->l('Radio button')
			),
			array(
				'id' => 'color',
				'name' => $this->l('Color')
			),
		);

		$this->fields_form = array(
			'legend' => array(
				'title' => $this->l('Attributes'),
				'image' => '../img/admin/asterisk.gif'
			),
			'input' => array(
				array(
					'type' => 'text',
					'label' => $this->l('Name:'),
					'name' => 'name',
					'lang' => true,
					'size' => 33,
					'required' => true,
					'hint' => $this->l('Invalid characters:').' <>;=#{}'
				),
				array(
					'type' => 'text',
					'label' => $this->l('Public name:'),
					'name' => 'public_name',
					'lang' => true,
					'size' => 33,
					'required' => true,
					'hint' => $this->l('Invalid characters:').' <>;=#{}',
					'desc' => $this->l('Group name displayed to the customer')
				),
				array(
					'type' => 'text',
					'label' => $this=>l('Infobulle :'),
					'name' => 'infos',
					'lang' => true,
					'required' => true,
					'hint' => $this->l('Invalid characters:').' <>;=#{}'
				),
				array(
					'type' => 'select',
					'label' => $this->l('Attribute type:'),
					'name' => 'group_type',
					'required' => true,
					'options' => array(
						'query' => $group_type,
						'id' => 'id',
						'name' => 'name'
					),
					'desc' => $this->l('Choose the type of the attribute')
				)				
			)
		);

		if (Shop::isFeatureActive())
		{
			$this->fields_form['input'][] = array(
				'type' => 'shop',
				'label' => $this->l('Shop association:'),
				'name' => 'checkBoxShopAsso',
			);
		}

		$this->fields_form['submit'] = array(
			'title' => $this->l('Save   '),
			'class' => 'button'
		);

		if (!($obj = $this->loadObject(true)))
			return;

		return parent::renderForm();
	}

}


Merci beaucoup Hervé pour tes réponses !

Link to comment
Share on other sites

Bonjour,

 

J'ai oublié de préciser dans le message précèdent : quand je me rendais dans la partie 'Attributs et Valeurs', j'avais une page blanche.

 

J'ai remplacer le return dans la fonction et j'ai toujours une page blanche quand je vais dans la partie admin 'Attributs et Valeurs'.

 

Tu as bien mis la surcharge dans override -> controllers -> admin ?

Link to comment
Share on other sites

C'est bon j'ai trouver mon erreur à présent ça s'affiche ! :)

'label' => $this=>l('Infobulle :'),

La flèche double à la place d'une flèche simple -> .. Erreur de frappe :wacko: .

 

Merci beaucoup Hervé pour ta patience et tes réponses. Tout fonctionne parfaitement à présent !

 

Je passe en résolu !

Edited by Odev (see edit history)
Link to comment
Share on other sites

Oups dernier soucis, je récupère bien la valeur existante de l'infobulle dans mon formulaire en backoffice mais lorsque je rentre une nouvelle valeur, elle n'est pas pris en compte.

 

Je suppose qu'il y a une fonction avec requête UPDATE à modifier pour prendre en compte mon infos mais je ne trouve pas cette requête. :unsure:

Link to comment
Share on other sites

Je penser l'avoir fait, je l'ai déclaré dans 'classes -> AttributeGroup.php'.

/** @var string Name */
	public $name;
	public $is_color_group;
	public $position;
	public $group_type;
	public $infos;
	/** @var string Public Name */
	public $public_name;

J'ai déclaré mon nouveau champ infos.

 

J'arrive à le récupérer mais pas à le modifier.

 

Edit: Je modifie et j'enregistre, il me dit 'Mise à jour réussi' pourtant il n'enregistre pas.

Edited by Odev (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...