Associer plusieurs marques à un produit

16 messages dans ce sujet

Posté(e) · Signaler ce message

Je souhaiterais pouvoir associer plusieurs marques à un produit.

Est-ce réalisable sans un gros développement supplémentaire ? (un peu de la même façon que l'on peut associer plusieurs couleurs ou plusieurs produits complémentaires)

Merci pour les indices ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Pour ce faire j'ai commencé par ajouter une table spécifique :

CREATE TABLE IF NOT EXISTS `peel_produits_marques` (

`produit_id` int(11) NOT NULL default '0',

`marque_id` int(11) NOT NULL default '0',

PRIMARY KEY (`produit_id`,`marque_id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

faut s'inspirer de la pages produits.php de l'admin

ligne 967 avant ou apres

<tr>

<td class="entete">Choisir les marques</td>

</tr>

<tr>

<td>

<select name="marques[]" multiple style="width:760" size="5">

<option value="" selected>-------------------------------------------</option>

<?

$select = mysql_query("SELECT id, marque, nom_".$_SESSION['langue']." FROM peel_marques ORDER BY nom_fr ASC");

if (mysql_num_rows($select) > 0) {

while ($nom = mysql_fetch_array($select)) {

$selectionne = in_array( $nom['id'], vb($frm['marques'])) ? "selected" : "";

echo "<option value=\"" . $nom['id'] . "\" $selectionne>" . $nom['nom_fr'] . " - ". $nom['nom_'.$_SESSION['langue'].''] ."</option>";

}

}

?>

</select>

</td>

</tr>

et du coté de la ligne 1361

ajouter

for ($i = 0; $i < count(vn($frm['marques'])); $i++) {

if (!empty($frm['marques'][$i])) {

$qid = mysql_query("

INSERT INTO peel_produits_marques (marque_id, produit_id)

VALUES ('{$frm['marques'][$i]}', '$produit_id')

");

}

}

j'ai pas mis en place j'ai juste changé le code ...

essais pour voir ??? ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Merci pour ces petits bouts !

Après quelques essais, j'ai réussis à trouver leur place (le fichier produit.php s'exécute sans erreur)

Par contre... rien ne s'affichait dans ce nouveau tableau "choisir les marques"

J'ai donc remis la query telle qu'elle était à l'origine dans mon produit.php (je suis en 5.1)

$select = mysql_query("SELECT id, nom_".$_SESSION['langue']." FROM peel_marques INNER JOIN peel_sites_pivots ON (marque_id = id) WHERE site_id = '".intval($_SESSION['ecom']['id'])."' ORDER BY position");

Et là, impec !

mes marques apparraissent, et je peux faire une sélection mutiple...

je vais de suite regarder si cela renseigne bien comme il faut la table "peel_produits_marques"

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

je vais de suite regarder si cela renseigne bien comme il faut la table "peel_produits_marques"

Bon... tout semble bien se passer... sauf qu'il ne se passe rien ;-)

- la table peel_produits_marques est aussi vierge qu'à se creation

- et bien entendu, lorsque je charge a nouveau la fiche du produit dans l'admin, les marques ne sont pas sélectionnées

je viens de passer 20 bonnes minutes a triturer la choses dans tous les sens mais je sèche :-(

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

je vais regarder ...

mais j'ai fais ça en 5 minutes ... faut que je livre ce que j'ai fais sur un site et que je valide le tout ;)

je post des que c'est bon pour moi :P

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

à rajouter aussi dans la page

faire une recherche sur le texte efface ce produit de la et rajouter cette ligne

mysql_query("DELETE FROM peel_produits_marques WHERE produit_id = '".intval($id)."'");

initialiser aussi la variable frm dans affiche_formulaire_ajout_produit

$frm['marques'] = array();
à deux endroit différents $frm['references'] = array(); et

$frm['marque'] = "";

if (count(vn($frm['marques'])) == 0) {

$frm['marques'][] = 0;

}

moi la table est alimentée .... :P je suis sur le code pour que quand on modifie on voit le choix precedent

du cote de la ligne 1410 et 1660 (vue qu'a force de rajouter les lignes change) texte de recheche count(vn($frm['references']

for ($i = 0; $i < count(vn($frm['marques'])); $i++) {

if (!empty($frm['marques'][$i])) {

$sql="

INSERT INTO peel_produits_marques (marque_id, produit_id)

VALUES ('{$frm['marques'][$i]}', '$produit_id')

";

$qid = mysql_query($sql);

}

}

vers ligne 363

if ($marques) {

if (mysql_num_rows($marques) > 0) {

while ($ref = mysql_fetch_array($marques)) {

$frm['marques'][] = $ref['marque_id'];

}

}

}

vers lignes 302

$marques = mysql_query("

SELECT marque_id

FROM peel_produits_marques

WHERE produit_id = '".intval($id)."'

");

/* Charge les couleurs du produit */

$couleurs = mysql_query("

SELECT couleur_id

FROM peel_produits_couleurs

WHERE produit_id = '".intval($id)."'

");

je crois que c'est tout :(

si je me suis planté ... ne pas hésiter à le dire ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

moi la table est alimentée .... <_< je suis sur le code pour que quand on modifie on voit le choix precedent

et bien de mon côté... j'ai tj la même chose : mon fichier produits.php est bien impacté par les changements, je peux bien sélectionner plusieurs marques, mais au final : rien aucun impact sur la table :(

pourtant je pige bien la manip, je fais certainement une erreur mais je ne vois pas laquelle.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

je viens de comprendre !

il faut vraiment ajouter :

for ($i = 0; $i < count(vn($frm['marques'])); $i++) {

if (!empty($frm['marques'][$i])) {

$sql="

INSERT INTO peel_produits_marques (marque_id, produit_id)

VALUES ('{$frm['marques'][$i]}', '$produit_id')

";

$qid = mysql_query($sql);

}

}

a DEUX endroits différents : dans le premier cas c'est utilisé lors de la création de produit et dans le second cas lors de la modification d'un produit.

j'avais oublié de reporter ce changement vers les lignes 1660 ce qui explique que cela ne modifiait pas ma table puisque j'étais dans le cas de la modification d'un produit.

Par contre, il doit falloir changer autre chose afin de bien retrouver la variable correspondant à l'ID du produit (là, ça me met "0" lorsque je le fais sur des produits existants.

Je vais essayer de voir ça...

J'ai donc ajouté en 1625 :

if (count(vn($frm['marques'])) == 0) {

$frm['marques'][] = 0;

}

et en 1610

mysql_query("DELETE FROM peel_produits_marques WHERE produit_id = '".intval($id)."'");

mais visiblement ce n'était pas ça...

et j'ai finalement compris que les insertions de creation et de modification ne devaient pas être les mêmes !

il ne faut pas mettre VALUES ('{$frm['marques'][$i]}', '$produit_id') mais VALUES ('{$frm['marques'][$i]}', '$id')

for ($i = 0; $i < count(vn($frm['marques'])); $i++) {

if (!empty($frm['marques'][$i])) {

$sql="

INSERT INTO peel_produits_marques (marque_id, produit_id)

VALUES ('{$frm['marques'][$i]}', '$id')

";

$qid = mysql_query($sql);

}

}

et là, impec (enfin... il semblerait ;-) )

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Il ne reste plus qu'à modifier la fonction affiche_marque pour ressortir qq chose du genre : marque 1, marque 2, marque 3

Et là, je pense que c'est plus qu'une simple refonte de la fonction actuelle...

function affiche_marque($id_marque) {

global $wwwroot;

$sql = "SELECT id, nom_".$_SESSION['langue']." as marque, image FROM peel_marques WHERE id = '".intval($id_marque)."'";

$query = mysql_query($sql);

if (mysql_num_rows($query) > 0) {

$brand = mysql_fetch_object($query);

echo "<strong>".BRAND." : <a href=\"$wwwroot/achat/marque.php?id=".$brand->id."\"><b>".html_entity_decode($brand->marque)."</b></a></strong>";

}

}

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

super !!

je post ça ce soir la fonction est faite y a plus qu'a faire copier coller ... mais d'abord les gamins ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

comme promis

<?php

$sql="SELECT id, nom_fr FROM peel_marques ORDER BY nom_fr ASC";

$select = mysql_query($sql);

?>

<option value="" >-------------------------------------------</option>

<select name="marques[]" multiple style="width:760" size="5">

<?php

if (mysql_num_rows($select) > 0) {

while ($nom = mysql_fetch_array($select)) {

$selectionne = in_array( $nom['id'], vb($frm['marques'])) ? "selected" : "";

echo "<option value=\"" . $nom['id'] . "\" ".$selectionne.">" . $nom['nom_fr'] . " - ". $nom['nom_'.$_SESSION['langue'].''] ."</option>";

}

}

?>

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Cool ! merci !

j'ai hâte de tester ;-)

mais moi aussi... les enfants d'abord (9, 7 et 3 ... déjà.... pfff... le coup de vieux d'un coup...)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

pas mieux ... 10 .... 5 et 3 !!

mais non pas vieux .... dans la force de l'age

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Voilà, j'ai finalement pris le temps de tester...

mais visiblement nous ne nous sommes pas compris sur le but de la fonction.

là, cela fait apparaître la liste des marques disponibles (pour un menu par exemple) mais normalement, le but de la fonction "affiche_marque" est d'afficher la (ou les maintenant) marque(s) correspondant à un produit donné.

c'est une fonction que l'on appelle généralement dans la fiche produit.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

bonsoir , apres quelques echanges avec Albert

dans le standard/template.php ligne 491

echo affiche_marque2($id)." ";

et bien sur on fait la fonction qui correspond dans template

function affiche_marque2($id) {

global $prefixe,$wwwroot;

$aut="";

$sql = "select p.id,m.nom_fr as marque,m.id as id_marque FROM peel_produits p ,peel_produits_marques pm,peel_marques m where pm.marque_id=m.id and pm.produit_id=p.id and p.id = '".$id."'";

//echo $sql;

$query = mysql_query($sql);

echo "<h3>Auteur / Dessinateur :</h3>";

if (mysql_num_rows($query) > 0) {

while ($brand = mysql_fetch_array($query)){

$aut.="<a href=\"$wwwroot/achat/marque.php?id=".$brand['id_marque']."\"><b>".html_entity_decode($brand['marque'])."</b></a>&nbsp;,";

}

echo substr($aut,0,-1);

}

}

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

Twitter Advisto ecommerce

Facebook PEEL Shopping