Joomladay francophone 2018 à Paris 18 et 19 mai

Tutoriel: rendre le formulaire d'options des produits "dynamique"

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [Astuce] Tutoriel: rendre le formulaire d'options des produits "dynamique"

    Voici quel était mon problème:

    Mon site marchand comprend des vêtements de taille standard (S,M,XL) ET de taille personnalisée.
    Lorsque le client est sur la page produit, il choisit sa taille dans une boite déroulante (liste créée via les attributs simples de produit). Il a donc le choix entre S, m, XL et Taille personnalisée. Or, le terme taille personnalisée ne suffit pas, pour servir ma commande, j'ai besoin de connaitre les mensurations exactes.
    Pour y parvenir, je crée les champs de mensurations dans les attributs personnalisés du produit (dans mon cas: Tour de poitrine, tour de ceinture, tour de cou)

    Problème, ces attributs s'affichent en permanence (même pour S, XL...) alors que je ne les veut QUE pour "Taille personnalisée".

    Afin de parvenir à afficher cette partie selon la zone que l'on a choisit, je vais utiliser du Javascript et modifier certains fichiers de Virtuemart.

    ATTENTION, cette manipulation peut entraîner des dysfonctionnements si elle est mal faite. Pensez à sauvegarder votre site!

    Etape 1:
    Création des attributs personnalisés de produit dans la partie admin de Virtuemart

    Etape 2:
    Mettre en place le formulaire qui affichera ou non le formulaire
    • Dans addtocart_advanced_attribute.tpl.php (components/com_virtuemart/themes/montemplate/templates/product_details/includes):
      Ligne 9, remplacer
      Code:
      <select class="inputboxattrib" id="<?php echo $attribute['titlevar'] ?>_field" name="<?php echo $attribute['titlevar'].$attribute['product_id'] ?>">
      par
      Code:
      <select class="inputboxattrib" id="<?php echo $attribute['titlevar'] ?>_field" name="<?php echo $attribute['titlevar'].$attribute['product_id'] ?>" onChange="checkSelection(this)">
    • Dans addtocart_form.tpl.php (components/com_virtuemart/themes/montemplate/templates/product_details/includes):
      Ligne 22, après:
      Code:
          <form action="<?php echo $mm_action_url ?>index.php" method="post" name="addtocart" id="<?php echo uniqid('addtocart_') ?>" class="addtocart_form" <?php if( $this->get_cfg( 'useAjaxCartActions', 1 ) && !$notify ) { echo 'onsubmit="handleAddToCart( this.id );return false;"'; } ?>>
      ajouter
      Code:
          <script type="text/javascript">
      	function checkSelection( this_){
      	  var Data = this_.options[this_.selectedIndex].value;
      	  if( Data =='Taille_personnalisee'){
      		document.getElementById('formulaire_taille_personnalisee').style.display = 'block';
      	  }
      	  else{
      	   document.getElementById('formulaire_taille_personnalisee').style.display = 'none';
      	  }
      	}
      	</script>
    • Dans addtocart_custom_attribute.tpl.php (components/com_virtuemart/themes/montemplate/templates/product_details/includes):
      Ligne 4, ajouter:
      Code:
          <div id="formulaire_taille_personnalisee" style="display:none">
      Puis ajouter tout à la fin de la page
      Code:
      </div>



    Etape 3: Modifier le code php qui envoi les attributs au panier.
    Cette partie va permettre de ne plus avoir besoin de remplir TOUS les attributs pour avoir une commande valide et permettra de n'afficher que les attributs remplis.
    • Dans ps_cart.php (administrator/components/com_virtuemart/classes)
      Remplacer
      Code:
      if ( ($result["attribute_given"] == false && !empty( $result["advanced_attribute_list"] ))
      			|| ($multiple_products == 1 && ($result["custom_attribute_given"] == false && !empty( $result["custom_attribute_list"] ))) ) {
      				$_REQUEST['flypage'] = ps_product::get_flypage($product_id);
      				$GLOBALS['page'] = 'shop.product_details';
      				$vmLogger->tip( $VM_LANG->_('PHPSHOP_CART_SELECT_ITEM',false) );
      				return true;
      			}
      par
      Code:
      /*if ( ($result["attribute_given"] == false && !empty( $result["advanced_attribute_list"] ))
      			|| ($multiple_products == 1 && ($result["custom_attribute_given"] == false && !empty( $result["custom_attribute_list"] ))) ) {
      				$_REQUEST['flypage'] = ps_product::get_flypage($product_id);
      				$GLOBALS['page'] = 'shop.product_details';
      				$vmLogger->tip( $VM_LANG->_('PHPSHOP_CART_SELECT_ITEM',false) );
      				return true;
      			}*/
      Ou l'effacer... au choix. Le remplacer permet de pouvoir faire marche arrière si on le souhiate. Il suffira d'enlever /* et */

      Vous pouvez maintenant commander un produit dont tous les attributs personnalisés ne sont pas remplis.

    • Dans ps_product_attribute.php (administrator/components/com_virtuemart/classes)
      Ligne 1005, après
      Code:
      foreach( $fields as $field ) {
      				$pagevar = str_replace( " ", "_", $field ) ;
      				$pagevar .= $d['prod_id'] ;
      				$pagevar = $encodefunc( $pagevar ) ;
      Remplacer
      Code:
      if( ! empty( $d[$pagevar] )) {
      						$custom_attribute_given = true ;
      					}
      					if( $description != '' ) {
      						$description .= "; " ;
      					}
      					$description .= $field . ":" ;
      					$description .= empty( $d[$pagevar] ) ? '' : $decodefunc( $d[$pagevar] ) ;
      Par
      Code:
      if( ! empty( $d[$pagevar] ) OR $d[$pagevar] != 0 ){
      					if( ! empty( $d[$pagevar] )) {
      						$custom_attribute_given = true ;
      					}
      					if( $description != '' ) {
      						$description .= "; " ;
      					}
      					$description .= $field . ":" ;
      					$description .= empty( $d[$pagevar] ) ? '' : $decodefunc( $d[$pagevar] ) ;
      				}



    Le tour est joué!
    Dernière édition par thom689808 à 29/07/2009, 15h29
    Webmaster du site http://www.les-authentiques.fr
    Vetements accessoires pour loisirs de plein air

  • #2
    Bien vu Thom!

    Pour ceci
    Dans addtocart_form.tpl.php (components/com_virtuemart/themes/montemplate/templates/product_details/includes):
    Ligne 22, ajouter
    etant donne que les lignes peuvent varier, pourrais-tu indiquer, comme tu l'a fait pour d'autres indications, "apres ....."

    merci

    a plus
    sommaire thématique des astuces du forum e-commerce ici http://www.webtimarket.com/fr/telechargements
    http://virtuemart.fr

    Commentaire


    • #3
      Voilà qui est fait
      Webmaster du site http://www.les-authentiques.fr
      Vetements accessoires pour loisirs de plein air

      Commentaire


      • #4
        Re : Tutoriel: rendre le formulaire d'options des produits &quot;dynamique&quot;

        Bonjour,

        Quand tu dis :
        Envoyé par thom689808 Voir le message
        [*]Dans addtocart_custom_attribute.tpl.php (components/com_virtuemart/themes/montemplate/templates/product_details/includes):
        Ligne 4, ajouter:
        Code:
            <div id="formulaire_taille_personnalisee" style="display:none">
        Puis ajouter tout à la fin de la page
        Code:
        </div>
        [/LIST]
        ca donne ceci ?

        Code:
        <?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); 
        
        foreach($attributes as $attribute) { 		
            foreach( $attribute as $attr => $val ) {    <div id="formulaire_taille_personnalisee" style="display:none">
                // Using this we make all the variables available in the template
                // translated example: $this->set( 'product_name', $product_name );
                $this->set( $attr, $val );
            }
            ?>
            <div class="vmAttribChildDetail" style="float: left;width:30%;text-align:right;margin:3px;">
                <label for="<?php echo $attribute['titlevar'] ?>_field"><?php echo $attribute['title'] ?>
                </label>:
            </div>
            <div class="vmAttribChildDetail" style="float:left;width:60%;margin:3px;">
                <input type="text" class="inputboxattrib" id="<?php echo $attribute['titlevar'] ?>_field" size="30" name="<?php echo $attribute['titlevar'].$attribute['product_id'] ?>" />
            </div>
            <br style="clear: both;" />
            <input type="hidden" name="custom_attribute_fields[]" value="<?php echo $attribute['titlevar'].$attribute['product_id'] ?>" />
            <input type="hidden" name="custom_attribute_fields_check[<?php echo $attribute['titlevar'].$attribute['product_id'] ?>]" value="<?php echo md5($mosConfig_secret. $attribute['titlevar'].$attribute['product_id'] ) ?>" />
        <?php } ?>
        </div>
        merci de confirmer ou de repositionner les éléments.

        Commentaire


        • #5
          Re : Tutoriel: rendre le formulaire d'options des produits &quot;dynamique&quot;

          Je n'ai pas :
          Envoyé par thom689808 Voir le message
          [*]Dans ps_product_attribute.php (administrator/components/com_virtuemart/classes)
          Ligne 1005, après
          Code:
          foreach( $fields as $field ) {
          				$pagevar = str_replace( " ", "_", $field ) ;
          				$pagevar .= $d['prod_id'] ;
          				$pagevar = $encodefunc( $pagevar ) ;
          Remplacer
          Code:
          if( ! empty( $d[$pagevar] )) {
          						$custom_attribute_given = true ;
          					}
          					if( $description != '' ) {
          						$description .= "; " ;
          					}
          					$description .= $field . ":" ;
          					$description .= empty( $d[$pagevar] ) ? '' : $decodefunc( $d[$pagevar] ) ;
          J'ai à de la ligne 986 à la ligne 1035
          Code:
          		// Loop through the simple attributes and check if one of the valid values has been provided
          		foreach( $attributes as $a ) {
          			
          			$pagevar = str_replace( " ", "_", $a ) ;
          			$pagevar .= $d['prod_id'] ;
          			
          			$pagevar = $encodefunc( $pagevar ) ;
          			
          			if ( @$d[$pagevar] != '') {
          				$attribute_given = true ;
          			}
          			if( $description != '' ) {
          				$description .= "; " ;
          			}
          			
          			$description .= $a . ":" ;
          			$description .= ( @$d[$pagevar] == '') ? '' : $decodefunc( $d[$pagevar] ) ;
          		
          		}
          		rtrim( $description ) ;
          		$d["description"] = $description ;
          		// end advanced attributes modification addition
          		
          
          		$custom_attribute_list = $db->f( "custom_attribute" ) ;
          		$custom_attribute_given = false ;
          		// Loop through the custom attribute list and check if a value has been provided
          		if( $custom_attribute_list ) {
          			$fields = explode( ";", $custom_attribute_list ) ;
          			
          			$description = $d["description"] ;
          			
          			foreach( $fields as $field ) {
          				$pagevar = str_replace( " ", "_", $field ) ;
          				$pagevar .= $d['prod_id'] ;
          				$pagevar = $encodefunc( $pagevar ) ;
          				
          				if( @$d[$pagevar] != '' ) {
          					$custom_attribute_given = true ;
          				}
          				if( $description != '' ) {
          					$description .= "; " ;
          				}
          				$description .= $field . ":" ;
          				$description .= ( @$d[$pagevar] == '') ? '' : $decodefunc( $d[$pagevar] ) ;
          			
          			}
          			rtrim( $description ) ;
          			$d["description"] = $description ;
          			// END add for custom fields by denie van kleef
          Version Virtuemart installée : 1.1.6

          Merci d'avance

          Commentaire

          Annonce

          Réduire
          1 sur 2 < >

          C'est [Réglé] et on n'en parle plus ?

          A quoi ça sert ?
          La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

          Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

          Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
          Comment ajouter la mention [Réglé] à votre discussion ?
          1 - Aller sur votre discussion et éditer votre premier message :


          2 - Cliquer sur la liste déroulante Préfixe.

          3 - Choisir le préfixe [Réglé].


          4 - Et voilà… votre discussion est désormais identifiée comme réglée.

          2 sur 2 < >

          Assistance au forum - Outil de publication d'infos de votre site

          Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

          Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

          Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

          UTILISER À VOS PROPRES RISQUES :
          L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

          Problèmes connus :
          FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

          Installation :

          1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

          Archive zip : https://github.com/AFUJ/FPA/zipball/master

          2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

          3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

          4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

          5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

          6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
          et remplacer www. votresite .com par votre nom de domaine


          Exemples:
          Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
          Télécharger le script fpa-fr.php dans: /public_html/
          Pour executer le script: http://www..com/fpa-fr.php

          Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
          Télécharger le script fpa-fr.php dans: /public_html/cms/
          Pour executer le script: http://www..com/cms/fpa-fr.php

          En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

          Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
          Voir plus
          Voir moins
          Travaille ...
          X