Jump to content

Caractéristique -> choix multiples


Recommended Posts

Bonjour,

Je ne suis pas un développeur ni un avisé en matière de php et de sql.
Voila mon souhait :

Dans l'édition d'une fiche produit depuis l'admin, je souhaite qu'une de mes caractéristiques soit à réponse multiple du type "maintient de la touche CTRL ou SHIFT pour sélection)
Je souhaite apporter plusieurs réponse possible pour une caractéristique car je m'en sert pour un moteur de recherche un peu plus poussé.

Je ne sais pas s'il faut effectuer une modif sur une page php ou s'il faut effectuer une modif sur sql.

Par avance merci de votre aide !

Link to comment
Share on other sites

J'ai une caractéristique "AMBIANCE"
en valeurs j'ai par exemple : nostalgique, dynamique, romantique...

Le but étant de pouvoir sélectionner plusieurs valeurs pour la caractéristique "AMBIANCE" du produit.

Merci de l'attention.

Link to comment
Share on other sites

Ok.
J'avoue que je ne sais pas si c'est faisable sans ajout de module.
J'ai un peu cherché sur prestatools.com mais je n'ai rien vu qui pourrait fonctionner comme çà. Avez-vous cherché aussi sur le forum ?
Mis à part les créations d'attributs, mais que l'on choisit uniquement un à la fois, je ne vois pas comment faire...

Link to comment
Share on other sites

Bonjour,

je en comprends pas bien ce que vous voulez faire.

Voici ce que j'ai compris :

Dans la partie caractéristiques de la fiche produit, à la place d'avoir une liste déroulante avec vos "ambiances" vous souhaiteriez avoir la possibilité d'en sélectionner plusieurs et donc de les afficher du style "nostalgique, dynamique, romantique" sur la fiche technique apparaissant sur le frontoffice.

Si c'est cela et si cette caractéristique ne possède pas 600 possibilités, pourquoi ne pas préenregistrer les possibilité et les sélectionner par la suite ?

Link to comment
Share on other sites

En faite, dans les caractéristique d'une fiche produit, la caractéristique me permet d'enregistrer plusieurs valeurs. Par contre, dans le menu déroulant, je ne peux en sélectionner qu'une seule sauf si je les rajoute à la suite dans le champs libre.
Ce que je souhaite faire c'est d'avoir la possibilité d'en sélectionner plusieurs.
La finalité c'est que le multivaleur sur une caractéristique, je pourrais l'utiliser dans un module de recherche avancée cela permet d'affiner avec précision.

Je ne sais pas si je me suis fait comprendre ?

Link to comment
Share on other sites

  • 5 weeks later...

Si je comprends bien vous souhaitez que les caractéristiques s'affichent sous forme de list (http://blog.mikarama.fr/astest/img/list.png ) au lieu d'un select ( http://blog.mikarama.fr/astest/img/combobox.png ) ?

Si c'est bien cela il devrait suffire de modifier le formulaire en question. Un peu d'aide ici : http://www.commentcamarche.net/contents/html/htmlform.php3

mika

Link to comment
Share on other sites

Désolé mais après étude, il semblerait que ce ne soit pas la solution.
Cela ne suffit car bien évidemment ces variables sont stockées dans la base de donnée et malheureusement, pour faire cela il faut modifier la structure de la table ainsi que les requêtes SQL.

Link to comment
Share on other sites

  • 9 months later...
En faite, dans les caractéristique d'une fiche produit, la caractéristique me permet d'enregistrer plusieurs valeurs. Par contre, dans le menu déroulant, je ne peux en sélectionner qu'une seule sauf si je les rajoute à la suite dans le champs libre.
Ce que je souhaite faire c'est d'avoir la possibilité d'en sélectionner plusieurs.
La finalité c'est que le multivaleur sur une caractéristique, je pourrais l'utiliser dans un module de recherche avancée cela permet d'affiner avec précision.
Je ne sais pas si je me suis fait comprendre ?


Bonjour Cocoges,
J'ai le même problème, afin d'utiliser une moteur de recherche avec fonction de tri, j'ai besoin d'affecter plusieurs valeurs à une même caractéristique. Après plusieurs recherches je n'ai rien trouvé sur le ou les forums.
j'ai pensé à une solution qui consiste à créer une catégorie correspondant à la caractéristique et plusieurs sous-catégorie correspondant aux différentes valeurs.
Ce système peut permettre d'utiliser la fonction tri sur cette catégorie.
Si tu as une autre solution ou si tu as trouvé comment résoudre ton problème, je suis preneur.

@+
Link to comment
Share on other sites

  • 7 months later...

Salut,

 

Je me permets de déterrer ce post, car j'ai le même besoin : pour une boutique musicale, j'ai forcément une caractéristique "Artiste", et un morceau peut avoir plusieurs artistes...

 

J'ai un peu regardé, et la modification est envahissante.

En gros, il faut :

- Modifier la table feature_product pour permettre d'attribuer plusieurs valeurs.

- Modifier la classe admin/tabs/AdminProducts.php pour poster un tableau dans le formulaire.

- Créer un override de la classe Product et surcharger addFeaturesToDB, getFeaturesStatic et getFrontFeaturesStatic pour gérer les valeurs sous forme de tableau.

 

Sinon l'idée de speedscuba n'est pas bête ! Avec une arborescence de catégories cachées qui représentent les caractéristiques multiples, ça peut le faire, et c'est moins envahissant, car il "suffit" de créer un module qui créé automatiquement les caractéristiques en fonction des catégories.

 

Je pense que je vais opter pour la deuxième solution... ;)

Link to comment
Share on other sites

  • 2 months later...

Désolé pour mon français, traduite via Google.

 

Je tiens à mettre en œuvre cette fonctionnalité en utilisant select multiple a changé le code, mais tombe malheureusement dans la base de la première valeur des caractéristiques de l'.

 

est une liste:

 

1.

if (sizeof($featureValues))
	 {
	  echo '
	   <select multiple id="feature_'.$tab_features['id_feature'].'_value" name="feature_'.$tab_features['id_feature'].'_value[]"
		onchange="$('.custom_'.$tab_features['id_feature'].'_').val('');">
		<option value="0">--- </option>';
	  foreach ($featureValues AS $value)
	  {
	   if ($current_item == $value['id_feature_value'])
		$custom = false;
	   echo '<option value="'.$value['id_feature_value'].'"'.(($current_item == $value['id_feature_value']) ? ' selected="selected"' : '').'>'.substr($value['value'], 0, 40).(Tools::strlen($value['value']) > 40 ? '...' : '').' </option>';
	  }
	  echo '</select>';
	 }

 

2

/* Product features management */
 elseif (Tools::isSubmit('submitProductFeature'))
 {
  if ($this->tabAccess['edit'] === '1')
  {
if (Validate::isLoadedObject($product = new Product((int)(Tools::getValue('id_product')))))
{
	 // delete all objects
	 $product->deleteFeatures();[/color][/size][/font]
	 // add new objects
	 $languages = Language::getLanguages(false);
	 foreach ($_POST AS $key => $val)
	 {
	  if (preg_match('/^feature_([0-9]+)_value/i', $key, $match))
	  {
	   if (is_array($val))	
		$product->addFeaturesToDB($match[1], $val);
	   else
	   {
		if ($default_value = $this->checkFeatures($languages, $match[1]))
		{
			 $id_value = $product->addFeaturesToDB($match[1], 0, 1, (int)$language['id_lang']);
			 foreach ($languages AS $language)
			 {
			  if ($cust = Tools::getValue('custom_'.$match[1].'_'.(int)$language['id_lang']))
			   $product->addFeaturesCustomToDB($id_value, (int)$language['id_lang'], $cust);
			  else
			   $product->addFeaturesCustomToDB($id_value, (int)$language['id_lang'], $default_value);
			 }
		}
	   }
	  }
	 }
	 if (!sizeof($this->_errors))
	  Tools::redirectAdmin($currentIndex.'&id_product='.(int)$product->id.'&id_category='.(!empty($_REQUEST['id_category'])?$_REQUEST['id_category']:'1').'&add'.$this->table.'&tabs=4&conf=4&token='.($token ? $token : $this->token));
}
else
	 $this->_errors[] = Tools::displayError('Product must be created before adding features.');
  }
$this->_errors[] = Tools::displayError('You do not have permission to edit here.');
 }

 

3.

public function addFeaturesToDB($id_feature, $id_value, $cust = 0)
{
 if ($cust)
 {
  $row = array('id_feature' => (int)($id_feature), 'custom' => 1);
  Db::getInstance()->autoExecute(_DB_PREFIX_.'feature_value', $row, 'INSERT');
  $id_value = Db::getInstance()->Insert_ID();
  $row = array('id_feature' => (int)($id_feature), 'id_product' => (int)($this->id), 'id_feature_value' => (int)($id_value));
  Db::getInstance()->autoExecute(_DB_PREFIX_.'feature_product', $row, 'INSERT');
  return ($id_value);
 }else{
  $row = array();
foreach ($id_value AS $val){
$row[] = '('.(int)($id_feature).', '.(int)($this->id).', '.(int)($val).')';
  Db::getInstance()->Execute(
  'INSERT INTO `'._DB_PREFIX_.'feature_product` (`id_feature`, `id_product`, `id_feature_value`)
  VALUES '.implode(',', $row));}
 }
}

 

PrestaShop v.1.4.6.2

Link to comment
Share on other sites

  • 2 years later...

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...