Flux d’activité

Flux d’activité de Messages


  1. Bonjour,

    j'ai mis un accent à la variable $requete dans mon message, il y en a pas.
    La bonne ligne est

    echo $requete; die();
    vous parlez de l'executer dans phpmyadmin ? comment je fais cela ?


    Si vous êtes en local, vous pouvez lire la documentation de votre serveur. Si vous travaillez sur un site hébergé, vous pouvez voir directement avec votre hébergeur.
    Si vous le souhaitez, nous pouvons finir intégralement cette modification. Il faut dans ce cas prendre contact avec un conseiller commercial au 01 75 43 67 97.


  2. Bonjour,

     

    Il y a deux type de modifications à faire. D'abord supprimer les champs textes permettant de renseigner une quantité, ensuite modifier le caddie pour empêcher un deuxième ajout d'un même produit.

     

    La première est de modifier le formulaire pour que les utilisateurs ne puissent pas ajouter plusieurs produits en 1 fois. Il faut modifier  le formulaire où s'affiche le champ text dans lequel l'utilisateur renseigne la quantité. C'est la fonction affiche_critere_stock qui gère cette partie, et elle fait appel au fichier modeles\peel7\smarty\critere_stock.tpl.

    Dans ce fichier, vous pouvez remplacer la ligne 

    <span>{$STR_QUANTITY}{$STR_BEFORE_TWO_POINTS}: </span><input type="text" size="3" name="qte" value="{$qte_value|str_form_value}" />

    par 

    <input type="hidden" name="qte" value="1" />

    Ensuite, il faut empêcher les utilisateurs de modifier la quantité dans le champ quantité du panier. Pour ce cas, il faut modifier le fichier modeles\peel7\smarty\caddie_products_summary_table.tpl, ligne

    				<input type="text" size="3" style="width:23px" name="quantite[{$p.numero_ligne}]" value="{$p.quantite.value|str_form_value}" {if isset($p.quantite.message)} onchange="if(this.value>{$p.quantite.stock_commandable}) {ldelim}this.value='{$p.quantite.stock_commandable}'; alert('{$p.quantite.message|filtre_javascript:true:true:true:false}');{rdelim}"{/if} />
    				<input type="submit" value="" name="" class="bouton_ok" />

     

    Pour le second point, l'ajout au panier est géré par la méthode add_product de la class Caddie du fichier lib\class\Caddie.php. Il y a un test dans cette fonction pour savoir si il est nécessaire de créer une nouvelle ligne dans le panier, ou de mettre à jour une ligne existante.

    Il faut faire une modification pour le premier cas de figure, pour faire en sorte qu'il ne soit pas possible de mettre à jour une ligne qui existe, sans pour autant créer une nouvelle ligne. Sous le test 

            if (isset($numero_ligne)) {
                // Le produit est déjà dans le panier avec la bonne configuration de couleur et de taille
                $quantite_start = $this->quantite[$numero_ligne];

    remplacer le calcul de la variable $quantity_wished par quantity_wished = 0;

     

    => La ligne ne sera à priori pas modifiée.

  3. heffel


    Bonjour,

     

    je ne parviens pas à limiter le nombre d'article par produit.

     

    Mon souhait serait de brider à 1 seul article maximal dans le panier par produit.

     

    Je ne parviens pas à modifier le code caddie ajout, pourriez-vous m'aider svp ou m'indiquer si il existe ce bridage par la console.

     

    Je suis en peel 7.03

     

    Merci.

  4. J1P


    Rebonjour Simon

     

    donc j'ai modifie vos petits codes, en effet j'etais loin du compte

     

    lorsque je fais une recherche sur un objet ici un vase dans la marque 2 en realite j'obtiens le resultat dans la marque 1 et 2 comme si seul le premier champ fonctionnait mais pas le critere de la marque

     

    dans le lien j'ai /search.php?match=2&search=vase&brand=2&action=


  5. Bonjour,

     

    Ok pour la première étape. Il reste deux modifications à faire :

    - Il faut donc récupérer l'id de la marque envoyée en GET

    - Ajouter un critère à la requête de recherche.

     

    Pour le premier point, vous pouvez ajouter $brand = vn($_GET['brand']); sous le bloc

    $output = '';
    $output_result = '';
    $match = vb($_GET['match']);
    $search = vb($_GET['search']);

    au début du fichier search.php.

     

    Pour l'étape deux, 2 sous-étapes :

     

    - il faut ajouter le paramètre $brand aux fonctions build_sql_produits et build_terms_clause:

    build_sql_produits($terms, $fields, $match, $brand);

    build_terms_clause($terms, $fields, $match, $brand);

    => Il faut modifier les appels de fonction, ainsi que la définition de la fonction.

     

    - Dans la fonction qui créer le SQL, il faut ajouter la contrainte sur l'id de la marque :

    pour build_sql_produits, la requete ressemblera à ceci :

     

        $requete .= 'FROM peel_categories c
            INNER JOIN peel_produits_categories pc ON pc.categorie_id = c.id
            INNER JOIN peel_produits p ON p.id = pc.produit_id

            LEFT JOIN peel_marques m ON p.id_marque = m.id
            WHERE p.etat = "1" AND ' . build_terms_clause($terms, $fields, $match) . '
            ORDER BY p.id DESC
            LIMIT 100';

     

    pour faire fonctionner build_terms_clause, vous pouvez ajouter

    if (!empty($brands)) {

            $this_term_conditions_array[] = "m.id = ". $brands;

    }

    sous la boucle 

            foreach ($fields as $val) {
                $this_term_conditions_array[] = word_real_escape_string($val) . ' ' . word_real_escape_string($notmod) . ' LIKE "%' . nohtml_real_escape_string($term) . '%"';
            }

    (ligne 268 sur votre version).

     

    Voila dans l'esprit des modifications à faire pour obtenir ce que vous souhaitez. Ce code n'a pas été testé, je vous laisse le soin de l’adapter à votre site.

  6. J1P


    Bonjour Simon,

     

    Par rapport a vos pistes j'ai commence a modifier cela

     

    Page display

     

    if (!function_exists('affiche_menu_recherche')) {
        /**
         * affiche_menu_recherche()
         *
         * @param mixed $return_mode
         * @param string $display_mode
         * @return
         */
        function affiche_menu_recherche($return_mode = false, $display_mode = 'header')
        {
            $output = '
    <form method="get" action="' . $GLOBALS['wwwroot'] . '/search.php" id="recherche">
        <fieldset>
            <tr><input type="hidden" name="match" value="2" />
            <td><input type="text" name="search" id="search" value="" /></td><td>
                    ' .  affiche_select_marque(true) . '
                </td>

            <td><input type="submit" class="bouton_go" value="" name="action" /></td></tr>
            <div id="placement_produit" class="autocomplete"></div>
        </fieldset>
    </form>
    ';
            if ($GLOBALS['site_parameters']['enable_prototype'] == 1) {
                // AUtocompleter, avec patch pour repositionner le div à cause d'un bug connu sur IE : le positionnement se fait mal quand on a des div relative ou absolute
                $output .= '<script type="text/javascript"><!--//--><![CDATA[//><!--
    function positionAuto(element, entry) {
        setTimeout( function() {
          Element.clonePosition("placement_produit", "search", {
          "setWidth": false,
          "setHeight": false,
          "offsetTop": $("search").offsetHeight
        } );
      }, 600);
      return entry;
    }
    new Ajax.Autocompleter(\'search\',\'placement_produit\',\'' . $GLOBALS['wwwroot'] . '/modules/search/produit.php\', {
      minChars: 2,
      callback: positionAuto });
    //--><!]]></script>
    ';
            }
            
            if ($return_mode) {
                return $output;
            } else {
                echo $output;
            }
        }
    }

     

    Ce qui a pour effet de me mettre le champ recherche suivi du select des marques et le ok (submit)

     

    Apres la modification sur la page search je bloque car je ne la comprends pas bien

     

    function build_sql_produits($terms, $fields, $match)
    {
        $requete = 'SELECT DISTINCT(p.id)
            ,c.id AS categorie_id
            ,c.nom_' . $_SESSION['session_langue'] . ' AS categorie';
        // ajout des champs $fields où $term sera recherché
        foreach($fields as $value) {
            $requete .= ', ' . $value . ' ';
        }

        $requete .= 'FROM peel_categories c
            INNER JOIN peel_produits_categories pc ON pc.categorie_id = c.id
            INNER JOIN peel_produits p ON p.id = pc.produit_id
            WHERE p.etat = "1" AND ' . build_terms_clause($terms, $fields, $match) . '
            ORDER BY p.id DESC
            LIMIT 100';
            
            $requete .= '
            FROM peel_marques m
            WHERE m.etat = "1" AND ' . build_terms_clause($terms, $fields, $match) . '
            ORDER BY m.id DESC
            LIMIT 100';
        return $requete;
    }

     

    J'ai donc rajoute la requete vers peel_marques ce qui a pour effet de me creer

    /search.php?match=2&search=vase&brand=2&action=

     

    donc vase est bien pris en compte mais pas la marque

     

    J'ai lu sur les forums pour utiliser les multi criteres mais leurs codes semblent bien differents de peel

     

    Une petite aide SVP

     

    Merci beaucoup

     

    Anh

  7. Calou


    Bonjour,

     

    Il doit y avoir une erreur car sur mon fichier administrer/produits.php à la ligne 125 et 151 il n'y a pas de paramètre à modifier (j'ouvre le fichier avec dreamweaver cs3) !!

    Voir ci-dessous

     

    125: case "stock" :

            if (is_stock_advanced_module_active ()) {

                $output .= affiche_formulaire_stock(intval($_GET['id']));

            } else {

                $output .= affiche_liste_produits($_GET);

            }

            break;



        case "commande" :

            $output .= affiche_liste_produits_acommander();

            break;



        case "stocknul" :

    151: if (is_stock_advanced_module_active ()) {
     

     

    Merci de votre aide :)


  8. Bonjour,

     

    Vous dites il faudra modifier ce script pour avoir les 2 champs avant le submit c'est bien ca :

    => Oui, c'est l'idée. De cette façon l'id de la marque est la valeur du champ de recherche seront envoyé en même temps vers le moteur de recherche.

     

    Voulez-vous dire de rajouter une requete vers les marques a ce niveau la ?

    => Oui aussi. Il faut ajouter un paramètre à la fonction build_sql_produits qui contiendra l'id de la marque recherchée, et modifier également build_terms_clause pour prendre en compte ce nouveau paramètre.

    De manière général, ce genre de développement nécessite d'avoir un peu d'expérience en PHP. Il vaux mieux ne pas toucher au code du moteur de recherche pour une personne qui découvre le PHP.

Twitter Advisto ecommerce

Facebook PEEL Shopping