Jump to content

Prix Libre - Laisser le client choisir le prix


Recommended Posts

Bonjour, 

 

Je suis à la recherche d'une technique ou d'un module qui pourrait me permettre de laisser mes clients choisir le montant qu'ils veulent payer mais en bloquant le montant à minimum 10€ et maximum 30€. 

 

Si quelqu'un à une idée je suis preneur !  :rolleyes:

 

Link to comment
Share on other sites

Bonjour, 

 

Merci pour vos réponses.

 

bonjour, 

En créeant un formulaire qui va mettre a jour le prix du produit, dans le contrôleur du formulaire on vérifie si le prix est entre 10 et 30 si oui on fait un update de la table sinon on affiche un message d'erreur

Salut Alex, 

 

Je ne vois pas trop comment un formulaire pourrait me permettre d'obtenir un prix libre, et à vrai dire je ne sais pas non plus comment créer un formulaire. Pourrais-tu donner plus d'explications ? 

 

Merci ! :)

 

Bonjour, 

 

Sinon je pensais à de simples déclinaisons.

 

Un prix de base 10 Eur

 

Une déclinaison avec 0€ d'impact qui s'appelle 10€

Une déclinaison avec 1€ d'impact qui s'appelle 11€

Une déclinaison avec 2€ d'impact qui s'appelle 12€

 

....

 

3pom

 

Hello okom3pom,

 

L'idée est pas mal en effet ! C'est fait un peu système D mais ca peut être efficace, merci pour l'idée. 

Link to comment
Share on other sites

Non justement c'est pas du système D mais la logique de Prestashop.

 

Sinon une personne ce matin m'a soufflé dans l'oreille qu'il existait un module gratuit sur le forum pour ça.

 

 

Désolé j'ai toujours eu du mal avec la logique de Prestashop  ^_^

 

Et est-ce que la personne qui t'as soufflé l'existence d'un module pour ça t'as aussi précisé le nom de ce fameux module ? ;)

 

Thanks, 

 

Ben.

Link to comment
Share on other sites

 

Salut Alex, 

 

Je ne vois pas trop comment un formulaire pourrait me permettre d'obtenir un prix libre, et à vrai dire je ne sais pas non plus comment créer un formulaire. Pourrais-tu donner plus d'explications ? 

 

Merci ! :)

 

Coté product.tpl

<!-- Change Price Form Alex-->
            <h2>Ici on peut changer le prix entre 11 et 29</h2>
			{if isset($confirm)}
				<p class="success">{l s='Changement de prix ok.'}</p>
			{/if}

			<form action="#" method="post">
				<input type="hidden" value="{$product->id}" name="id_product">
				<input type="text" value="" name="prix">
				<button type="submit" id="isChangePrice" name="isChangePrice">Envoyer</button>
			</form>
<!-- Change Price Form Alex-->
Edited by Alex-Kodd (see edit history)
Link to comment
Share on other sites

Override ProductController.php

<?php

class ProductController extends ProductControllerCore
{

	public function postProcess()
    { 
 			if (Tools::isSubmit('isChangePrice'))
            {
                //On récupère les valeurs du formulaire
                    $id_product=Tools::getValue('id_product');
                    $prix=Tools::getValue('prix');
              
                // Verification des champs pour se prémunir des injections SQL
                if (!$prix) {
                    $this->errors[] = Tools::displayError('Le prix est vide');
                } 
                elseif (!Validate::isPrice($prix)) {
                    $this->errors[] = Tools::displayError('Le prix n\'est pas valide');
                }
                // On veut un prix entre 10 et 30
                elseif ($prix <= 10) {
                    $this->errors[] = Tools::displayError('Le prix est inferieur ou egale à 10');
                }
                 elseif ($prix >= 30) {
                    $this->errors[] = Tools::displayError('Le prix est supérieur ou egale à 30');
                }
                // Verification des champs pour se prémunir des injections SQL
                 elseif (!Validate::isInt($id_product) {
                    $this->errors[] = Tools::displayError('ID produit non valide');
                }
                else {  

                //si tout va bienn on utilise la méthode update_prix de notre classe Product
                
                Product::update_prix($id_product,$prix);
                
                $this->context->smarty->assign('confirm', 1);

                }  
            }        
    }

}
Edited by Alex-Kodd (see edit history)
Link to comment
Share on other sites

Override de la classe Product.php

<?php

class Product extends ProductCore
{

    public $prix;

    public static function update_prix($id_product,$prix)
    {

        //On update le prix du produit dans la table ps_product
        $sql='UPDATE ps_product
        SET price = "'.$prix.'" 
        WHERE id_product = "'.$id_product.'"
        ';

        if (!Db::getInstance()->execute($sql))
        die('Erreur');
        
        //On update le prix du produit dans la table ps_product_shop (voir si on peux pas fusionner avec en haut)
        $sql2='UPDATE ps_product_shop
        SET price = "'.$prix.'" 
        WHERE id_product = "'.$id_product.'"
        ';

        if (!Db::getInstance()->execute($sql2))
        die('Erreur');

    // On refresh la page produit

    $lien= "index.php?controller=product&id_product=".$id_product;
    Tools::redirect($lien);


    }
}

exemple:

 

http://demo.alexandrecarette.com/vierge/prestashop/t-shirts/1-t-shirt-delave-manches-courtes.html

 

voila tu as toutes les clefs pour comprendre... il faut le faire a ta sauce maintenant

Edited by Alex-Kodd (see edit history)
Link to comment
Share on other sites

Override de la classe Product.php

<?php

class Product extends ProductCore
{

    public $prix;

    public static function update_prix($id_product,$prix)
    {

        //On update le prix du produit dans la table ps_product
        $sql='UPDATE ps_product
        SET price = "'.$prix.'" 
        WHERE id_product = "'.$id_product.'"
        ';

        if (!Db::getInstance()->execute($sql))
        die('Erreur');
        
        //On update le prix du produit dans la table ps_product_shop (voir si on peux pas fusionner avec en haut)
        $sql2='UPDATE ps_product_shop
        SET price = "'.$prix.'" 
        WHERE id_product = "'.$id_product.'"
        ';

        if (!Db::getInstance()->execute($sql2))
        die('Erreur');

    // On refresh la page produit

    $lien= "index.php?controller=product&id_product=".$id_product;
    Tools::redirect($lien);


    }
}

exemple:

 

http://demo.alexandrecarette.com/vierge/prestashop/t-shirts/1-t-shirt-delave-manches-courtes.html

 

voila tu as toutes les clefs pour comprendre... il faut le faire a ta sauce maintenant

 

Merci beaucoup Alex !! C'est exactement ce que je recherchais ! :o

 

J'ai plus qu'à l'adapter et ca devrait le faire ; 

 

Thanks  ;)

Link to comment
Share on other sites

  • 2 months later...

Salut à tous, 

 

J'ai plusieurs questions sur votre solution de prix libre (qui me semble pas mal dans l'ensemble)

 

Est-il possible de n'appliquer ce mode de choix du prix qu'à une seule catégorie du site ? En choisissant un prix minimum directement dans le back-office de Prestashop (différent pour chaque produit concerné, dans l'idéal)

 

Ben1278 :

 

 

 

//On update le prix du produit dans la table ps_product_shop (voir si on peux pas fusionner avec en haut)
$sql2='UPDATE ps_product_shop
SET price = "'
.$prix.'"
WHERE id_product = "'
.$id_product.'"
'
;

 

Editer la base ne va pas modifier le prix de façon permanente ?

 

Merci, en tout cas !

Link to comment
Share on other sites

Est-il possible de n'appliquer ce mode de choix du prix qu'à une seule catégorie du site ?

 

--> Oui bien sur, le plus simple c'est à l'affichage du tpl on applique une condition smarty (on configure la catégorie par défaut du produit pour qu'elle corresponde à l'id catégorie souhaitée)

 

{if $product->id_category_default == 'id_de_ta_categorie'}

<!-- Change Price Form Alex-->

            <h2>Ici on peut changer le prix entre 11 et 29</h2>
			{if isset($confirm)}
				<p class="success">{l s='Changement de prix ok.'}</p>
			{/if}

			<form action="#" method="post">
				<input type="hidden" value="{$product->id}" name="id_product">
				<input type="text" value="" name="prix">
				<button type="submit" id="isChangePrice" name="isChangePrice">Envoyer</button>
			</form>
<!-- Change Price Form Alex-->

{/if}
En choisissant un prix minimum directement dans le back-office de Prestashop (différent pour chaque produit concerné, dans l'idéal)

--> la encore c'est possible en ajoutant un champ perso (prix_min) dans la fiche produit

 

http://www.paulineghiazza.fr/ajouter-un-champ-dans-le-backoffice-prestashop-1-5/

 

on passe la valeur du prix minimum dans le formulaire...

<form action="#" method="post">
				<input type="hidden" value="{$product->id}" name="id_product">
				<input type="text" value="" name="prix">
                                <input type="hidden" value="{$product->prix_min}" name="prix_min">
<button type="submit" id="isChangePrice" name="isChangePrice">Envoyer</button>
</form>
Dans le controller on récupere et on traite le prix minimum:

<?php

class ProductController extends ProductControllerCore
{

	public function postProcess()
    { 
 			if (Tools::isSubmit('isChangePrice'))
            {
                //On récupère les valeurs du formulaire
                    $id_product=Tools::getValue('id_product');
                    $prix=Tools::getValue('prix');
                    $prix_min=Tools::getValue('prix_min');
              
                // Verification des champs pour se prémunir des injections SQL
                if (!$prix) {
                    $this->errors[] = Tools::displayError('Le prix est vide');
                } 
                elseif (!Validate::isPrice($prix)) {
                    $this->errors[] = Tools::displayError('Le prix n\'est pas valide');
                }
                // On veut un prix entre $prix_min et 30
                elseif ($prix <= $prix_min) {
                    $this->errors[] = Tools::displayError('Le prix est inferieur ou egale à 10');
                }
                 elseif ($prix >= 30) {
                    $this->errors[] = Tools::displayError('Le prix est supérieur ou egale à 30');
                }
                // Verification des champs pour se prémunir des injections SQL
                 elseif (!Validate::isInt($id_product) {
                    $this->errors[] = Tools::displayError('ID produit non valide');
                }
                else {  

                //si tout va bienn on utilise la méthode update_prix de notre classe Product
                
                Product::update_prix($id_product,$prix);
                
                $this->context->smarty->assign('confirm', 1);

                }  
            }        
    }

}
Edited by Alex-Kodd (see edit history)
  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...