[Hack Virtuemart] - Nommé ses remises

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

  • [Hack Virtuemart] - Nommé ses remises

    Bonjour,

    J'ai remarqué que sur virtuemart on ne peux pas donné des noms à ses promotions (fêtes des pères, soldes printemps,... ) pourtant cela est très pratique pour avoir une meilleur vision et un meilleur suivi commercial.

    Donc j'ai fais un hack et je le poste ici. (note j'utilise la version 1.0.12 de virtuemart)

    Premièrement rajouté un champ "name" dans la table jos_vm_product_discount tout ceci via phpMyAdmin bien sûr.

    Ensuite ouvrir le fichier /administrator/components/com_virtuemart/classes/htmlTools.class.php et rajouter la fonction suivante dans la class vmCommonHTML

    Code PHP:
    function getTextDiscount($discount_id){
            
    $db = new ps_DB();
            
    $q ="SELECT * FROM #__{vm}_product_discount WHERE discount_id=".$discount_id;
            
    $db->query($q);
            
            
            if(
    $db->num_rows()>0){
                
    $db->next_record();
                
    $str =$db->f("name")." (".$db->f("amount");
                  
    $str .= $db->f("is_percent")=="1" "%)" $_SESSION['vendor_currency'].")";
                  return 
    $str;
            }
            else
                return 
    "";
        } 
    Ensuite dans : /administrator/components/com_virtuemart/classes/ps_product_discount.php
    dans les fonctions validate_add et validate_update rajouter avant le "return true" :
    Code PHP:
    if( $d["name"]=="" ) {
           
    $this->error "ERREUR:  Vous devez donner un nom à votre remise.";
           return 
    False;    
         } 
    dans la fonction add la requête d'insertion (juste avant la fin) devient alors :
    Code PHP:
    $q "INSERT INTO #__{vm}_product_discount (amount, is_percent, start_date, end_date,name)";
        
    $q .= " VALUES ('";
        
    $q .= $d["amount"] . "','";
        
    $q .= $d["is_percent"] . "','";
        
    $q .= $d["start_date"] . "','";
        
    $q .= $d["end_date"] . "','";
        
    $q .= $d["name"] . "')"
    Et dans update la requête devient, elle :
    Code PHP:
    $q "UPDATE #__{vm}_product_discount SET ";
        
    $q .= "amount='" $d["amount"]."',";
        
    $q .= "is_percent='" $d["is_percent"]."',";
        
    $q .= "start_date='" $d["start_date"]."', ";
        
    $q .= "end_date='" $d["end_date"]."', ";
        
    $q .= "name='" $d["name"]."' ";
        
    $q .= "WHERE discount_id='".$d["discount_id"]."'"
    Et pour finir dans ce fichier il y a aussi la fonction discount_list :
    Code PHP:
    $selected $db->f("discount_id") == $discount_id "selected=\"selected\"" "";
            
    $html .= "<option id=\"$id\" value=\"".$db->f("discount_id")."\" $selected>;
            
    $html .= vmCommonHtml::getTextDiscount($db->f("discount_id"));
            
    $html .= "</option>\n"; 
    --------------------------------------------

    Maintenant on va s'occuper de l'administration des remises en allant dans le fichier :
    /administrator/components/com_virtuemart/html/product.product_discount_form.php
    Et il faut rajouter entre les lignes 43 et 44 :
    Code PHP:
    <tr> 
          <td width="24%"><div align="right">Nom de la remise :</div></td>
          <td width="76%"> 
            <input type="text" class="inputbox" name="name" value="<?php $db->sp("name"?>" />
          </td>
        </tr>
    -------------------------------------------

    Et le dernier fichier a modifier maintenant vous permettra de voir vos noms de remises dans la liste des remises.
    /administrator/components/com_virtuemart/html/product.product_discount_list.php

    à la ligne 57 la variable $columns devient :
    Code PHP:
    $columns = Array(  "#" => "width=\"20\""
                        
    "<input type=\"checkbox\" name=\"toggle\" value=\"\" onclick=\"checkAll(".$num_rows.")\" />" => "width=\"20\"",
                        
    "Nom" => '',
                        
    $VM_LANG->_PHPSHOP_PRODUCT_DISCOUNT_AMOUNT => '',
                        
    $VM_LANG->_PHPSHOP_PRODUCT_DISCOUNT_AMOUNTTYPE => '',
                        
    $VM_LANG->_PHPSHOP_PRODUCT_DISCOUNT_STARTDATE => '',
                        
    $VM_LANG->_PHPSHOP_PRODUCT_DISCOUNT_ENDDATE => '',
                        
    $VM_LANG->_E_REMOVE => "width=\"5%\""
                    
    ); 
    J'ai mis "nom" en dure pour ici mais vous pouvez très bien indiquez une référence des fichiers de langues.

    Puis vers la ligne 80, au moment de l'affichage de "amount" remplacer les 2 lignes par :
    Code PHP:
    $tmp_name $db->f("name")=='' "sans nom" $db->f("name");
        
    $tmp_cell '<a href="'.$sess->url$_SERVER['PHP_SELF'].'?page=product.product_discount_form&discount_id='.$db->f("discount_id") ).'">'.$tmp_name.'</a>';
        
    $listObj->addCell$tmp_cell );
        
        
    $listObj->addCell$db->f("amount") ); 

    Voilà et merci pour vos retour....
    ___________________

    sef...sef...Sef

  • #2
    Et puis un petit plaisir au passage, un hack bonus en prime !!!

    Si vous souhaitez désormais que la page des produits spéciaux prenne aussi en compte l'affichage du nom des remises c'est facile. Dans le fichier /administrator/components/com_virtuemart/html/product.specialprod.php

    entre la ligne 171 qui affiche :
    Code PHP:
    $listObj->addCellvmCommonHTML::getYesNoIcon$db->f("product_special"), "On Special?" )); 
    et la ligne qui affiche :
    Code PHP:
    $listObj->addCellvmCommonHTML::getYesNoIcon$db->f("product_publish"), "Published?" ) ); 

    Il faut remplacer l'affichage de l'identifiant des remises par :
    Code PHP:
    $tmp_discount $db->f("name")." (".$db->f("amount");
        
    $listObj->addCell"<a href=\"".$sess->url$_SERVER['PHP_SELF']."?page=product.product_discount_form&discount_id=".$db->f("product_discount_id"))."\" >".vmCommonHTML::getTextDiscount($db->f("product_discount_id"))."</a>" ); 
    Voili voilou!
    ___________________

    sef...sef...Sef

    Commentaire


    • #3
      Terrible! merci bcp
      PacaConseil.com - WebConsulting

      Commentaire


      • #4
        nouveau hack : encore mieux

        Sympa mais c'est bien aussi quand le nom de la remise s'affiche sur le site, "SPÉCIAL OUVERTURE" par exemple, donc pour ceux que ça interesse :
        1. Dans la boucle "while" de remplissage du tableau des promotion, fichier "mod_virtuemart_featureprod.php", ligne 92 environ, juste en dessous de:
        Code PHP:
        while($db->next_record() ){ 
        Rajouter ceci :
        Code PHP:
        $db2 = new ps_DB;
        $q2  "SELECT discount_id,name,product_discount_id FROM #__{vm}_product_discount, #__{vm}_product WHERE #__{vm}_product.product_sku='".$db->f("product_sku")."'";
        $q2 .= " AND discount_id = jos_vm_product.product_discount_id";
        $db2->query($q2);
        $tmp_discount $db2->f("name"); 
        un peu plus bas, vers la ligne 113, vous trouvez ceci :
        Code PHP:
        elseif( $display_style== "horizontal" ) {
        if( 
        $i == )
        echo 
        "<tr>\n";
        echo 
        "<td width=\"$width%\" align=\"center\">"
        Ajouter juste après :
        Code PHP:
        if( $tmp_discount != "" ) {                
        echo 
        "<div align=\"center\" style=\"font-family:Geneva, Arial, Helvetica, sans-serif; font-size:12px; font-weight:bold; text-transform:uppercase; height:18px; background-color:#CC0000; color:#FFFFFF\">".$tmp_discount.'</div>';} 
        Et voilà.

        Commentaire


        • #5
          PB sur le fichier ps_product_discount

          Bonjour à tous,

          Massero, j'essaye d'appliquer ton hack concernant les nom des remises, mais j 'ai une erreur sur la ligne 266 du fichier cité. ?'ayant que peu de connaissance en codage, j'ai bien essayé mais je ne sais pas ou ça plante.

          Peut etre que la version de virtuemart est en cause (je suis sur la 1.10.13 et pas la 12 comme toi).

          Si tu as une idée? Merci d'avance
          Nouveau sur Joomla et VirtueMart...
          NOOB en webmastering !!!

          Les adhésifs graphiques c'est sur www.oxitanstickers.com (en dev)

          Commentaire


          • #6
            Bonjour zipdadi,
            pourrais tu me montrer le message d'erreur que tu as?
            Dès fois suivant le message d'erreur la ligne fautive est plus haute.
            ___________________

            sef...sef...Sef

            Commentaire


            • #7
              l'erreur

              Bonjour,

              voila le message d'erreur complet:
              Parse error: syntax error, unexpected T_STRING in D:\xampplite\htdocs\sitejoomla\administrator\compo nents\com_virtuemart\classes\ps_product_discount.p hp on line 267

              ce message apparait quand j 'enregistre une remise produit.

              Merci encore pour vos conseils
              Nouveau sur Joomla et VirtueMart...
              NOOB en webmastering !!!

              Les adhésifs graphiques c'est sur www.oxitanstickers.com (en dev)

              Commentaire


              • #8
                erreur

                Bonjour Masseuro,
                Apres avoir fait ton hack discount -> quand je vais sur mon admin pour modifier un article dans Virtuemart J'obtiens cette erreur :
                Parse error: syntax error, unexpected T_STRING in /homepages/28/d235794657/htdocs/balkal/administrator/components/com_virtuemart/classes/ps_product_discount.php on line 254
                Que signifie t-il ?
                Sachant que je n'ai pas encore
                rajouté un champ "name" dans la table jos_vm_product_discount tout ceci via phpMyAdmin
                parce que je ne sais pas comment faire .
                Merci d'avance pour ton aide.
                Joomla! 2.5.19 - Template ja_elastica - Virtuemart 2.6

                Commentaire


                • #9
                  Bonjour,
                  Si jamais MASSEURO lit ce post.
                  J'ai suivi ton hack et quand je veux creer une nouvelle remise avec : Nom de la Remise, montant, date de debut et de fin-->Sauver, j'obtiens cette erreur :
                  Parse error: syntax error, unexpected T_STRING in /homepages/28/d235794657/htdocs/balkal/administrator/components/com_virtuemart/classes/ps_product_discount.php on line 263
                  Pourquoi ?
                  Sachant je suis chez 1and1->joomla 1.0.15->VM 1.0.14
                  Peux tu nous aider ?
                  Merci d'avance.
                  Dernière édition par joombo à 03/12/2008, 13h07
                  Joomla! 2.5.19 - Template ja_elastica - Virtuemart 2.6

                  Commentaire


                  • #10
                    Bonjour,

                    Petite questions :

                    Comment faire pour afficher le nom de la remise dans le détail produit, et dans les page de catégorie de produits ?

                    (Je parle bien évidemment des fichiers flypage.tpl et browse.tpl)

                    Commentaire


                    • #11
                      J'ai avancé un petit peu sur le sujet :

                      Je pense que la modification ne se fait ni dans flypage.tpl et browse.tpl,
                      mais plutôt dans le fichier price.tpl.

                      Chemin du fichier :
                      com_virtuemart/theme/default/common/price.tpl

                      De cette façon ainsi le nom de la remise se sera effectif sur le détail des produits (flypage.tpl) mais aussi sur les produits dans la catégorie (browse.tpl).

                      Pour ce qui est à mettre dans le fichier price.tpl, c'est la que je suis coincé.

                      Si quelqu'un aurais une idée ça m'aiderais grandement.

                      De plus la législation française, oblige à afficher une date limite
                      pour les promotion spécial sur un site de vente en ligne.

                      C'est pourquoi il serais bien de pouvoir régler ce problème.

                      J'ai essayé d'ajouter le code suivant dans le fichier price.tpl:

                      Code PHP:
                      <?php if ($db->next_record() ){  
                          
                          
                      $db2 = new ps_DB;
                          
                      $q2  "SELECT discount_id,name,product_discount_id FROM #__{vm}_product_discount, #__{vm}_product WHERE #__{vm}_product.product_sku='".$db->f("product_sku")."'";
                          
                      $q2 .= " AND discount_id = jos_vm_product.product_discount_id";
                          
                      $db2->query($q2);
                          
                      $tmp_discount $db2->f("name");  
                          
                          if( 
                      $tmp_discount != "" ) {                
                          echo 
                      "<div align=\"center\" style=\"font-family:Geneva, Arial, Helvetica, sans-serif; font-size:12px; font-weight:bold; text-transform:uppercase; height:18px; background-color:#CC0000; color:#FFFFFF;\">".$tmp_discount.'</div>'; } ?>
                      Comme ceci :

                      Code PHP:
                      <?php if( !defined'_VALID_MOS' ) && !defined'_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); ?>

                      <?php
                      // User is not allowed to see a price or there is no price
                      if( !$auth['show_prices'] || !isset($price_info["product_price_id"] )) {
                          
                          
                      $link $sess->url$_SERVER['PHP_SELF'].'?page=shop.ask&amp;product_id='.$product_id.'&amp;subject='urlencode$VM_LANG->_('PHPSHOP_PRODUCT_CALL').": $product_name") );
                          echo 
                      vmCommonHTML::hyperLink$link$VM_LANG->_('PHPSHOP_PRODUCT_CALL') );
                      }
                      ?>

                      <?php
                      // DISCOUNT: Show old price!
                      if(!empty($discount_info["amount"])) {
                          
                      ?>
                          <span class="product-Old-Price">
                              <?php echo $CURRENCY_DISPLAY->getFullValue($undiscounted_price); ?></span>
                          
                          <br/>
                          <?php
                      }
                      ?>
                      <?php
                      if( !empty( $price_info["product_price_id"] )) { ?>
                          <span class="productPrice">
                              <?php echo $CURRENCY_DISPLAY->getFullValue($base_price?>
                              <?php echo $text_including_tax ?>
                          </span>
                      <?php
                      }
                      echo 
                      $price_table;
                      ?>


                      <?php
                      // DISCOUNT: Show the amount the customer saves
                      if(!empty($discount_info["amount"])) { ?>
                          <?php echo "<br />"?>
                          <span class="productPriceDiscount">
                          <?php echo $VM_LANG->_('PHPSHOP_PRODUCT_DISCOUNT_SAVE').": "?>
                          </span>
                          <span class="productDiscount">
                          <?php if($discount_info["is_percent"]==1) { 
                               echo 
                      $discount_info["amount"]."%"; } 
                          else {
                              echo 
                      $CURRENCY_DISPLAY->getFullValue($discount_info["amount"]); }?>
                          </span>
                          <?php ?>
                          
                          <?php if ($db->next_record() ){  
                          
                          
                      $db2 = new ps_DB;
                          
                      $q2  "SELECT discount_id,name,product_discount_id FROM #__{vm}_product_discount, #__{vm}_product WHERE #__{vm}_product.product_sku='".$db->f("product_sku")."'";
                          
                      $q2 .= " AND discount_id = jos_vm_product.product_discount_id";
                          
                      $db2->query($q2);
                          
                      $tmp_discount $db2->f("name");  
                          
                          if( 
                      $tmp_discount != "" ) {                
                          echo 
                      "<div align=\"center\" style=\"font-family:Geneva, Arial, Helvetica, sans-serif; font-size:12px; font-weight:bold; text-transform:uppercase; height:18px; background-color:#CC0000; color:#FFFFFF;\">".$tmp_discount.'</div>'; } ?>
                      Mais cela me renvoi une erreur :
                      Parse error: syntax error, unexpected $end in /home/xxxxx/www/components/com_virtuemart/themes/default/templates/common/price.tpl.php on line 59
                      Dernière édition par titiou10 à 17/11/2009, 14h08

                      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