Prix Objets

Ce plugin permet d’attacher un prix à un objet SPIP.

Installation

Comme n’importe quel plugin.

il necessite les plugins :
-  Saisies
-  API Prix

Extensions

Les extensions suivants sont disponibles.

Configuration

Objets

Vous devez d’abord choisir les objets auxquels vous voulez pouvoir attacher des prix.

Devises

Puis choisissez la ou les devises à utiliser (par défaut €).

Taxes

Si des taxes sont applicables, spécifiez les également puis indiquez s’ils sont compris dans dans les prix. (Il s’agit des données par défaut qui peuvent ensuite être surchargées pour chaque prix)

Mode de calcul

Si vous utilisez des extensions comme Périodes de prix vous pouvez définir si la fonction

prix_par_objet($objet, $id_objet, $contexte, $type = 'prix_ht', $options = array()) 

doit retourner le prix :

  • global (retourne le premier prix correspondants aux critères)
  • prorata (détermine le prix par date, puis en calcule la moyenne)

Ceci est surchargeable avec la variable $options['mode'].

Attacher un prix à un objet

Pour les objets choisis, il est maintenant possible d’attacher un prix.

Prix

Le champ prix est obligatoire

Taxe

Permet d’adapter les valeurs par défait, définit dans la configuration.

Devise

Si vous avez configuré plusieurs devises un menu de choix de devises sera proposé vous permettant de définir des prix par devise.

Extensions

Si vous avez activé des extension, vous pouvez également choisir les extensions applicables à votre prix.

Il est possible de changer l’ordre des prix via drag & drop.

Ceci est surtout d ’importance quand il faut établir une priorité des prix comme avec l’extension Périodes de prix.

Ça vous permet également d’intervenir sur l’affichage des prix en triant sur rang_lien

Squelettes

Boucle

La boucle PRIX_OBJETS et les critères id_objet et objet permettent d’obtenir les prix total et hors taxe (et les autres infos du prix, évidemment).

<BOUCLE_prix_evenement(PRIX_OBJETS){id_objet=#ID_EVENEMENT}{objet=evenement}{par rang_lien}>
#PRIX
#PRIX_HT
</BOUCLE_prix_evenement>

Filtres

Le filtre filtres_prix_formater (du plugin API Prix) permet d’afficher le prix avec sa devise selon à la langue du contexte.

Donc

[(#PRIX|filtres_prix_formater)]

donnerait en français 200 € et €200 en Anglais par exemple.

le filtre prix_par_objet

/**
 * Donne le prix pour un objet
 *
 * @param string $objet
 *        	Objet dont on cherche le prix
 * @param string $id_objet
 *        	Identifiant de l'objet dont on cherche le prix
 * @param array $contexte
 *        	Les variables de l'environnement utilisées dans le calcul du prix.
 * @param string  $type 
 *          prix (ttc) ou prix_ht
 * @param array $options
 *
 * @return string Le prix applicable.
 */
prix_par_objet($objet, $id_objet, $contexte, $type = 'prix_ht', $options = array())

permet de calculer le prix pour un objet déterminé en tenant compte des extensions choisis qui calculent les prix selon des variabales du contexte, comme Périodes de prix.

Compatibilité avec d’autres plugins

Le plugin est intégré dans Réservation d’événements et utilisable tel quel.

Pour ajouter un prix à un panier (plugin Panier)

<BOUCLE_prix_article(PRIX_OBJETS){id_objet=#ID_ARTICLE}{objet=article}>
  <a href="[(#URL_ACTION_AUTEUR{remplir_panier, prix_objets-#ID_PRIX_OBJET, #SELF})]"><:paniers:action_ajouter:></a>
</BOUCLE_prix_article>

Discussion

5 discussions

  • Bonjour, j’ai une erreur avec ce plugin dont je me sers pour des produits
    (https://plugins.spip.net/produits.html), dans le cadre du jeu de plugins commerce (panier, commande...). Voici l’erreur :

    Erreur SQL 1146
    Table 'admin_test.prixs' doesn't exist
    SELECT * FROM prixs WHERE id_prix = 12

    Répondre à ce message

  • 5

    Hello Rainer,

    Pour info, je viens de faire la mise à jour du plugin Prix (v1.3) et manifestement, cette dernière version n’est plus compatible avec la v3 de ton plugin Prix Objet.

    Fatal error: Uncaught Error: Call to undefined function prix_lister_devises() in /plugins/auto/prix_objets/v3.0.0/prix_objets_fonctions.php:26

    En revenant à la version v1.2.11 de Prix, c’est de nouveau bon.

    Peut être mettre une borne supérieur en attendant de comprendre/corriger ?
    Je m’en occupe si tu veux…

    Take care
    P

    Répondre à ce message

  • 2

    Bonjour,
    et grand merci pour ce plugin bien pratique !
    Cependant, j’ai un souci avec l’implémentation de Livraison (https://github.com/nursit/livraison), qui me remonte systématiquement le prix forfaitaire au lieu des tarifs reposant sur le poids (ou le volume), qui sont renseignés dans la fiche produit (du plugin Produits).
    En allant dans la base commandes_details, l’objet lié est prix_objets. Vu avec tcharlss (sur le forum,

    Le problème vient certainement de là : si dans spip_commandes_details ça ne référence pas les vrais objets éditoriaux commandés, le plugin livraison ne peut pas retrouver leur poids et leur volume.

    il semblerait alors que, dans cet usage, Prix-objets ne soit pas compatible avec Livraison... :’(

    Dans le projet que j’ai mis en place, l’un comme l’autre sont particulièrement pratiques... Verriez-vous une solution ?

    Merci.

    • Bonjour lussye,

      Le problème vient certainement de là : si dans spip_commandes_details ça ne référence pas les vrais objets éditoriaux commandés, le plugin livraison ne peut pas retrouver leur poids et leur volume.

      Le prix de prix objets est stocké dans la table ’spip_prix_objets’ qui stocke les données de l’objet original (’objet’, ’id_objet’).

      Dans la table « spip_commandes_details » tu trouves « id_objet » ce qui correspond à « id_prix_objet » dans la table ’spip_prix_objets’. En prenant « objet » et « id_objet » correspondant à l’’ « id_prix_objet » tu retrouve ton objet original.

      Je sais pas comment fonctionne livraison, mais je suis sûr que tu arrives à surcharger des squelettes de livraison ou d’intervenir via une pipeline

      As tu vérifie comment livraison calcule les tarifs ?

      Rainer

    • Bonjour Rainer, merci !

      tcharlss m’a en effet aidée à y voir plus clair côté forum, et le problème viendrait de ma façon d’avoir adapté le squelette panier je pense...
      En effet, livraison calcule à partir des poids et dimensions contenus dans spip_produits (https://github.com/nursit/livraison/blob/master/mesure/defaut.php#L31).
      Or, pour ajouter une déclinaison au panier, j’ai adapté comme suit ma fiche produit :

      <div class="boite">
      [<div class="#EDIT{texte} texte surlignable" itemprop="description">(#TEXTE)</div>]
      
      <ul class="declinaison_objet">
      <BOUCLE_prix_article(PRIX_OBJETS){id_objet=#ID_PRODUIT}{objet=produit}{!rang_lien=0}>
      <li><span>#TITRE</span> <span>#PRIX</span>
      <a class="" href="[(#URL_ACTION_AUTEUR{remplir_panier,produit-#ID_PRODUIT-1, #URL_PAGE{panier}|parametre_url{retour,#URL_RUBRIQUE{1}|urlencode}})]"><:paniers:action_ajouter:></a>
      </li></BOUCLE_prix_article>
      </ul>
      
      <!--[(#BOUTON_ACTION{<i class="icon-plus icon-white"></i>
      <:paniers:action_ajouter:>,
      #URL_ACTION_AUTEUR{
      remplir_panier,
      produit-#ID_PRODUIT-1,						#URL_PAGE{panier}|parametre_url{retour,#URL_RUBRIQUE|urlencode}},btn-primary btn-large pull-right})]-->
      </div>

      Mes compétences étant assez limitées, j’ai fait ça un peu le nez au vent, avec quelques petits réglages jusqu’à bonne prise en compte dans le panier et dans spip_commandes_details. Et à l’usage, ça fonctionne, jusqu’au calcul des frais de livraison.
      Si j’ai bien compris, il faudrait donc que j’arrive à faire le lien entre spip_prix_objets et spip_produits ? Mais à part ce potentiel constat, je me sens bien démunie.
      Verrais-tu une solution ? Déclinaison Prix colle totalement aux besoins de mon projet, et je serais déçue d’avoir à me passer de Livraison, qui permet de calculer les frais au plus juste pour les clients, et ça aussi c’est important pour moi...

    Répondre à ce message

  • 7

    Pour

    Actuellement, si tu utilises des tags multi dans le titre de la déclinaison, la traduction de l’environnement (langue de l’espace privé) sera pris en compte. Est-ce que j’ai bien compris ta question ?

    Je me doutais que ca fonctionnait comme cela.

    Mon problème est :
    -  un champ multi sur le titre de l’article
    -  un champ multi sur le titre des mes déclinaisons
    -  et tous les objets dans un une seule langue (fr par défaut) et les traductions gérées simplement en

    <multi>[fr]titre[en]title</multi>

    et en fait je voudrais qu’ajouter un prix sur l’article génère un titre de prix_objet qui reprendrait le balisage multi du titre de l’article et du titre de la déclinaison, peu importe le contexte de langue.

    Je me suis débrouillé autrement pour ressortir des chaines de trad dans mes squelettes public et ca fonctionne pas mal.

    Ce qui m’a amené aussi à surcharger la fonction filtres_prix_formater pour tester la variable lang de l’url pour pouvoir formater mon affichage prix correctement (le cookie spip_lang ou la langue du site est toujours « fr »).
    Ce qui induit aussi de passer un filtre floatval à mes prix.

    Et

    Il faudrait probablement d’abord tester si l’objet auquel est attaché le prix contient un champ « lang », si oui il faudrait prendre cette langue, sinon laisser les tags multi ? Qu’est-ce que tu en penses ?

    Cela me parait plutôt être une (la ?) bonne solution :)

    • Merci pour tes retours, je vais regarder comme améliorer l’enregistrement des prix.

      Concernant

      filtres_prix_formater

      Le filtre regarde d’abord s’il y a un cookie de lang spip. Ce cookie est posé par le menu de sélection de langue native de spip. Comment tu changes te langues dans ton site ?

    • En fait il n’y a que 2 langues (fr et en) et un petit menu de 2 liens du type

      [<a href="#SELF|parametre_url{lang,fr})">Français</a>]
      [<a href="#SELF|parametre_url{lang,en})">English</a>]

      C’est pas le mieux mais sur ce site ce n’est pas de mon fait :)

    • Dans multilingue facil je le fais de cette manière :

      [(#SET{langues,[(#CONFIG{langues_utilisees}|explode{','}|serialize)]})]
      		<B_langue_possibles>
      			<div class="traductions formulaire_menu_lang">
      			<BOUCLE_langue_possibles(POUR){tableau #GET{langues}}{'|'}>
      			[(#TOTAL_BOUCLE|>{1}|oui)
      				<span lang="#VALEUR" xml:lang="#VALEUR" dir="#LANG_DIR"[(#ENV{lang}|=={#VALEUR}|oui) class="on"]>
      					[(#ENV{lang}|=={#VALEUR}|non)
      					<a
      						href="[(#URL_ACTION_AUTEUR{
      							'converser',
      							'',
      							[(#SELF|parametre_url{lang,'','&'})]}
      								|parametre_url{arg,''}
      								|parametre_url{var_lang,#VALEUR})]"
      						rel="alternate"
      						hreflang="#VALEUR">
      						[(#VALEUR|traduire_nom_langue)]
      					</a>
      					]
      					[(#ENV{lang}|=={#VALEUR}|oui)
      						[(#VALEUR|traduire_nom_langue)]
      					]
      				</span>
      				]
      				</BOUCLE_langue_possibles>
      			</div>
      		</B_langue_possibles>

      donc

      <a 
        href="[(#URL_ACTION_AUTEUR{
          'converser',
          '',	
          [(#SELF
           |parametre_url{lang,'','&'})]}
           |parametre_url{arg,''}
           |parametre_url{var_lang,#LANG})]" 
        rel="alternate" 
        hreflang="#LANG">
        [(#LANG|traduire_nom_langue)]
      </a>
    • Ah ouai, intéressant, je le note et me le garde dans un coin, merci :)

    • je viens d’adapter le plugin (v2.3.0 112990) pour qu’il sauvegarde le balises multi dans le titre du prix. Contrairement à ce que nous avons discuté, je garde les balises multi n’importe la gestion multilinguisme du site.

      Dis moi si ça résout ton problème

    • Merci pour le retour :)
      A vue d’oeil, en ayant testé vite fait, pas grand chose de différent.
      Je prendrais un peu plus le temps de tester proprement pour pouvoir te faire retours plus sérieux.

    • Les liste des prix dans le formulaire le balises multi sont filtrées, donc c’est normal que tu ne voie pas de différence. Regarde dans la BD

    Répondre à ce message

  • 1

    Bonjour,

    Petite question : y’a t’il moyen que le titre enregistré lors de la génération du prix prenne en compte les informations de langue existantes de l’objet et des extensions (déclinaisons par ex.)

    Merci !

    • Actuellement, si tu utilises des tags multi dans le titre de la déclinaison, la traduction de l’environnement (langue de l’espace privé) sera pris en compte. Est-ce que j’ai bien compris ta question ?

      Ceci dit, ce n’est pas vraiment une solution optimale. Il faudrait probablement d’abord tester si l’objet auquel est attaché le prix contient un champ « lang », si oui il faudrait prendre cette langue, sinon laisser les tags multi ? Qu’est-ce que tu en penses ?

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom