Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forum osCommerce-fr _ Contributions _ [Résolu] Ça existe ou pas ?

Écrit par : Rusti 29 Oct 2011, 06:13

Voila après moulte recherche je n'ai pas trouvez mon bonheur alors je viens vers vous.
En fait je voudrais liés des attributs je m'explique:
Si un client choisi l'attribut A alors l'attribut F et V s'affiche.
Par contre si il choisi l'attribut B alors c'est C et D qui se montre.

Pour être un peu plus précis ce n'est pas spécialement le nom de l'attribut c'est sont prix qui m'intéresse, je fais de la personnalisation et selon l'option choisi le prix des options qui suivent peu être différent
Exemple:
Impression 1 couleur
Taille logo = 10€

Impression 2 couleurs
Taille logo = 20€

Voila du coup je c'est pas trop si mon idée de départ est la bonne ou si il faut plutôt que je travail directement sur les prix.
Donc ci quelqu'un connait une contrib ou as des éléments qui pourrait me mettre sur la piste ou même tous simplement une remarque je suis preneur.

Merci et bonne journée

Écrit par : chti_poupon 29 Oct 2011, 10:09

Bonjour !
J'avais lu jadis ceci, et suivants, qui semble adapté à ton problème.
Bon code !

Chti Poupon

Citation (Webby And Wappy @ 28 Nov 2004, 12:33) *
Instructions d'installation du module CUSTOM PC CREATOR pour une version OSC2.2MS2 modifié :

etc... etc...
Sébastien

Écrit par : Rusti 29 Oct 2011, 10:17

Merci chti_poupon je vais regarder ça et je tient au courant.

Écrit par : Rusti 29 Oct 2011, 20:16

Bon j'ai regarder d'un peu plus près PC custom et CCC (custom Computer Creator) le soucis ces que mes attributs sont déjà extrêmement modifier (je m’était basé sur la contrib OptionTypes que j'ai beaucoup modifié pour en faire se que je désirais).
Bref petite question qui me parait bête au moment ou je la pose mais bon vaut mieux savoir que pas savoir.
Pensez vous qu'il soit possible d'afficher les options avec un onChange en fonction de l'option choisi (la je suis pas sur que tout le monde arrive à suivre wacko.gif ) ?

C'est une piste qui me parait possible avant de me dire que je vais faire passer mon module de personnalisation en devis pour la facturation ce qui m'embêterait un peu quand même.

Merci



Écrit par : Gnidhal 29 Oct 2011, 22:14

Bonjour,
je ne pense pas que ça existe en contribution, mais je crois que si ça n'est pas simple, ça n'est pas impossible.
le principe passe par la détection de l'option par le nom puis alors on ajoute selon ce nom des action js sur l'option
Cette action peut restreindre par exemple le nombre d'option du second déroulant.

Tout se passe dans product_info.php bien sur :
tu vas trouver la boucle de lecture des options dans ces lignes là :

Code
      $products_options_name_query = tep_db_query("select distinct popt.products_options_id, popt.products_options_name from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)$HTTP_GET_VARS['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)$languages_id . "' order by popt.products_options_name");
      while ($products_options_name = tep_db_fetch_array($products_options_name_query)) {

donc dans cette boucle tu peux ajouter ta détection sur le nom de l'option pour insérer plus bas le code dans la création du menu déroulant :
Code
            if (preg_match('/équipement?/i', $products_options_name['products_options_name']) ) {
              $onChange = 'checkEquipmt(this.value);';          
              $info_plus = picto_info(TEXT_PI_EQUIPEMENT, 'L',2);
              $idPull = ' id="PullEquip" ';
            }
            if (preg_match('/verres? teintés?/i', $products_options_name['products_options_name']) ) {
              $info_plus = picto_info(TEXT_PI_VERRE_TEINTE, 'L',2);
              $onChange = 'checkTeinte();';          
              $idTR = ' id="TrTeinte" ';
              $idPull = ' id="PullTeinte" ';
            }
          $params .= ' style="float:left;width:396px;" onchange="MaFonction(this.value,\''.$products_options_name['products_options_id'].'\');'.$onChange.'"';

donc plus bas tu trouve la création du pull_down qui selon l'option peut changer de mise en forme ou activer une fonction javascript sur le onchange :
Code
            <tr <?php echo $styleTR.$idTR;?>>
              <td class="main" style="width:160px;"><?php echo $products_options_name['products_options_name'] . ':'; ?></td>
              <td class="main"><?php echo tep_draw_pull_down_menu('id[' . $products_options_name['products_options_id'] . ']', $products_options_array, $selected_attribute, $params.$idPull). tep_draw_hidden_field('A_'.$products_options_name['products_options_id'].'','', 'id="'.'A_'.$products_options_name['products_options_id'].'"').$info_plus.' '; ?></td>
            </tr>

bien sur, c'est là une méthode mais je n'ai pas trouvé mieux.
comme tu le vois, le TR qui inclut le menu déroulant peut avoir un style ($styleTR) et un id ($idTR) de manière à modifier via la css la forme ou à l'adresser via le DOM
la fonction picto_info insère une icône d'information avec un mouseover jQuery
et tu peux personnaliser la fonction js déclenchée par le déroulant via la variable $onChange qui s'ajoute à une fonction générique "MaFonction(this.value)" qui récupère la valeur de l'option pour le js.

Il ne servirait à rien que je te file mon script, car il est complètement personnalisé et correspond spécifiquement à un besoin. J'espère que ces bouts de code te donneront des idées de dev à partir de ce principe.

Bon code wink.gif

Écrit par : Rusti 30 Oct 2011, 20:44

Merci Gnidhal, çà me permet déjà de comprendre le fonctionnement et donc me permettre d'avancer.

EDIT : j'ai mis résolu sur le post car la solution de Gnidhal est suffisante mais je n'ai pas encore terminer.

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)