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

Vous devez d’abord choisir les objets auxquels vous voulez pouvoir attacher des prix.
Puis choisissez la ou les devises à utiliser (par défaut €).

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)

Si vous utilisez des extensions comme Périodes de prix vous pouvez définir si la fonction prix_par_objet() doit retourner le prix :

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

Attacher un prix à un objet

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


Le champ prix est obligatoire, les autres permettent de modifier les données par défaut au sujet des taxes.

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

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

Il est possible 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

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>

Le filtre filtres_prix_formater (surcharge du même filtre du plugin API Prix) permet d’afficher le prix avec sa devise. Si vous votre serveur dispose de PECL intl (https://pecl.php.net/package/intl - apparement compris d’office à partir de php 5.3) le prix sera formaté 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

2 discussions

  • 4

    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 :)

    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

Qui êtes-vous ?

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

Dernière modification de cette page le 5 décembre 2018