Utilisation avancée du plugin Thélia

Associer des produits aux articles, url-rewriting et multilinguisme

Le plugin Thélia permet l’utilisation conjointe de SPIP et Thélia pour des sites mixtes : de publication et de vente en ligne.

Associer un produit thélia à un article

Il y a désormais [1] une interface dans l’espace privé pour pouvoir associer un/des produits à une rubrique ou un article. Cette interface s’active dans le panneau de configuration cfg du plugin.

Dans les squelettes, on peut utiliser 4 nouvelles boucles :
-  PRODUITS_ARTICLES : produits Thélia associés aux articles SPIP
-  RUBRIQUESTHELIA_ARTICLES : rubriques Thélia associées aux articles SPIP
-  PRODUITS_RUBRIQUES : produits Thélia associés à des rubriques SPIP
-  RUBRIQUESTHELIA_RUBRIQUES : rubriques Thélia associées à des rubriques SPIP

exemple pour afficher les produits associés à une rubrique :

<BOUCLE_rubrique(RUBRIQUES){id_rubrique}>
   #TITRE
   #TEXTE..etc

   <B_produitsassocies>
       produits associés : 
       <ul>
       <BOUCLE_produitsassocies(PRODUITS_RUBRIQUES){id_rubrique}>
              [ <THELIA_produit#ID_PRODUIT type="PRODUIT" id="(#ID_PRODUIT)">
                <li> <a href="#URL_PAGE{produit,ref=THELIA-REF}">THELIA-TITRE</a> </li>
               </THELIA_produit#ID_PRODUIT>]
       </BOUCLE_produitsassocies>
       </ul>
   </B_produitsassocies>
       pas de produit associé
   <//B_produitsassocies>

</BOUCLE_rubrique>

Associer un article et un produit peut-être utile si par exemple vous avez des fiches de produits sur le site sous forme d’articles SPIP (ce qui permet de bénéficier des atouts de SPIP pour l’édition du contenu, les images, les forums...), et que vous souhaitiez insérer un lien automatique vers l’ajout au panier pour certaines d’entre elles.

C’est un système souple qui peut être utilisé pour d’autres fonctions, par exemple associer une rubrique SPIP à une rubrique dans Thélia. Ainsi lorsque la rubrique SPIP est affichée, on peut proposer dans un encart les produits de la rubrique Thélia associée...

Url rewriting

Pour utiliser la réecriture d’adresse coté Thélia, il faut ajouter dans le .htaccess le code suivant (à l’endroit où se trouvent les rewriterules) :

#RUBRIQUE ############## 
RewriteRule ^([a-z0-9-]*)_([0-9]*)_([a-z0-9-]*)_([a-z0-9-]*)_\.html spip.php?page=rubrique_thelia&id_rubrique=$2 [NC,QSA,L] 
RewriteRule ^([a-z0-9-]*)_([0-9]*)_([a-z0-9-]*)_\.html spip.php?page=rubrique_thelia&id_rubrique=$2 [NC,QSA,L] 
RewriteRule ^([a-z0-9-]*)_([0-9]*)_\.html spip.php?page=rubrique_thelia&id_rubrique=$2 [NC,QSA,L] 

#PRODUIT ############# 
RewriteRule ^([a-z0-9-]*)_([0-9]*)_([a-z0-9-]*)_([a-z0-9-]*)__([^.]*)\.html spip.php?page=produit&ref=$5&id_rubrique=$2 [NC,QSA,L] 
RewriteRule ^([a-z0-9-]*)_([0-9]*)_([a-z0-9-]*)__([^.]*)\.html spip.php?page=produit&ref=$4&id_rubrique=$2 [NC,QSA,L] 
RewriteRule ^([a-z0-9-]*)_([0-9]*)__([^.]*)\.html spip.php?page=produit&ref=$3&id_rubrique=$2 [NC,QSA,L] 
#FIN THELIA

Ensuite, dans les squelettes (inc-rubriques.html, rubrique_thelia.html, produit.html..etc..) remplacer les URL spip vers des rubriques ou des produits par la balise THELIA-REWRITEURL.

par exemple, dans rubrique_thelia.html ligne 48 et 54 :
#URL_PAGE{produit,ref=THELIA-REF&id_rubrique=THELIA-RUBRIQUE_ID}

devient :
THELIA-REWRITEURL

Régler les conflits sur la classe smtp

On rencontre parfois un conflit sur la class Smtp, utilisée par Thélia, mais aussi par certains plugins SPIP, dont « envoyer à un ami » et « spip-lettres ».

Vous pouvez mettre en commentaire dans fonctions/moteur.php la ligne 58, qui contient l’appel à Smtp.class.php :

//include_once("classes/Smtp.class.php");

Multilinguisme

SPIP et Thélia utilisent tous les deux la variable lang dans l’url, mais les valeurs attendues ne sont pas les mêmes. Dans SPIP, lang prend pour valeur deux caractères, alors que dans thélia, lang prend pour valeur un nombre.

Par défaut, il n’y a que trois langues dans Thélia, les autres langues se rajoutent manuellement au besoin dans la table lang.
-  le français : 1
-  l’anglais : 2
-  l’espagnol : 3

Il est donc important de faire une correspondance entre le nommage de SPIP et le nommage de Thélia. Le plugin est paramétré correctement pour les 3 langues par défaut de Thélia, mais si vous êtes amenés à en ajouter d’autres, il est alors nécessaire de personnaliser les correspondances.

-  dans ce cas, modifiez le fichier spip_thelia_fonc.php, ligne 94 :

switch($_REQUEST['lang']) {
		case 'fr' : $_REQUEST['lang'] = 1; break;
		case 'en' : $_REQUEST['lang'] = 2; break;
		case 'es' : $_REQUEST['lang'] = 3; break;
		default: $_REQUEST['lang'] = 1; break;
	}

Utiliser le plugin commentaires de Thélia

Il existe un plugin dans Thélia qui permet d’ajouter des commentaires sur les produits http://contrib.thelia.fr/spip.php?a....

Si vous souhaitez l’utiliser sur votre site spip-thélia, il faut modifier le fichier Commentaires.class.php (ligne 102) et remplacer :

if(isset($_POST['action']) && $_POST['action'] == "ajcommentaire"){

par

if(isset($_POST['thelia_action']) && $_POST['thelia_action'] == "ajcommentaire"){

Voici un exemple d’intégration dans le squelette produit.html

<h2>commentaires sur ce produit</h2> 
<T_comment> 
<ul> 
<THELIA_comment type="COMMENTAIRES" ref="THELIA-PRODUIT_REF">   
     <li>Message de THELIA-NOM : THELIA-MESSAGE <br /> 
           THELIA-HEURE THELIA-DATE </li> 
</THELIA_comment> 
</ul> 
</T_comment> 
<//T_comment> 
<br class="nettoyeur" /> 
<form action="#URL_PAGE{produit,ref=THELIA-REF}" method="post"> 
    <input type="hidden" name="thelia_action" value="ajcommentaire" /> 
    <input type="hidden" name="commentaire_ref" value="THELIA-REF" /> 
    Nom : <input type="text" name="commentaire_nom" /><br /> 
    Message : <input type="text" name="commentaire_message" /><br /> 
    <input type="submit" value="OK" />
</form>

Vendre des produits virtuels

Si vous utilisez le plugin produits virtuels de Thélia http://contrib.thelia.fr/spip.php?a..., remplacez dans Prodvirtuel.class.php ligne 244 : action=prodvirtueldl par
thelia_action=prodvirtueldl

Notes

[1à partir de la version 1.2 du plugin

Discussion

39 discussions

  • 4
    Daniel Creton

    Bonjour et bravo pour ce plugin tout à fait fantastique !

    Cependant j’ai un ennui avec le plugin associé produitvirtuel.

    En local à la première installation , tout a très bien fonctionné. Puis le serveur c’est mis à tourner en boucle. J’ai supprimé les cookies et depuis le lien reçu genre .?thelia_action=prodvirtueldl&token=KFJAS4F2622I90R465DUG7A5ADA18F me renvoie sur la page d’accueil et non sur le téléchargement comme autrefois. Je n’ai rien touché d’autres

    Tout me semble bien propre au niveau de la bdd j’ai bien les bons ID pour les bons codes etc..

    Auriez vous une idée sur cette panne ?

    Cordialement

    • bavo pour ce plugin
      tout semble fonctionner correctement pour moi à une exception
      il m’est impossible de selectionner un pays lors de l’inscription de l’utilisateur
      une idée ?

      spip 2.0.10/plug-thelia-dev/thelia 1.4.2.1

    • désolé mais j’ai auusi le meme probleme avec les quantités

    • Bonjour,

      J’utilise le plugin produit virtuel, et j’ai le même problème que Daniel (page 3).
      Pour info j’ai bien modifier Prodvirtuel.class.php (
       ?thelia_action=prodvirtueldl&token=JY0APC5318GWBYBN5W83H0U7G8FKF)
      Mon lien de téléchargement me renvoie toujours sur la page d’accueil du site.
      Avez-vous trouvez une solution à ce problème ?

      Merci

      J.

    • Je rencontre le même problème avec spip 2.0.10.

      Une solution ?

    Répondre à ce message

  • Bonjour à tous,

    J’ai développé un site SPIP / THELIA et depuis peu je rencontre des problèmes pour afficher la balise THELIA-RUBRIQUE_NOM qui récupère le titre de la rubrique THELIA.
    Vous pouvez voir une démo ici : http://www.outils-jardin-bio.com/spip.php?page=rubrique_thelia&id_rubrique_thelia=1
    Le titre de la rubrique doit apparaitre dans le titre de la fenetre, ainsi que dans le contenu (au-dessus des pointillés) : Fourche à bécher
    Merci pour votre aide !

    PS : j’ai aussi un gros souci d’encodage pour afficher les produits Thelia. Pour le moment, je n’ai pas trouvé d’autres solutions que d’écrire sans accent !

    Répondre à ce message

  • Bonjour,
    Le débit d’un compte prépayé lors de l’achat d’un produit virtuel n’envoit pas au client le lien de téléchargement.
    Par contre lorsque l’on modifie dans le Back Office le statut de « prépayé » en « payé » le lien est envoyé.
    Comment faire pour que le statut prépayé entraîne l’envoi du mail avec le lien téléchargement ?

    Répondre à ce message

  • Je me réponds car j’ai enfin trouvé. C’est si simple !
    Pour tous les produits du site :
    À l’endroit désiré dans espace privé mettre :

    <produit|classement=titre>

    si on veut afficher tous les produits d’une rubrique

    <produit|rubrique=X|classement=titre>

    X étant le numéro de la rubrique THÉLIA et non celle de SPIP

    RP

    Répondre à ce message

  • Pouvez-vous me donner un exemple de BOUCLE SPIP-THELIA qui ferait afficher tous les produits Thelia du site classés par ordre alphabétique.

    Merci
    RP

    Répondre à ce message

  • 1
    Aurélien

    Bonjour,

    Je ne vois pas bien comment mettre en place l’URL REWRITING pour les pages autres que rubriques ou produits ? (panier, adresse, ...)

    Le code ici n’en fait pas mention.

    Quid des URLS ? THELIA-PANIER-REWRITE ?

    Aurélien

    • Arnault Pachot

      L’url rewriting des pages panier, commande, etc.. n’est pas géré.

      Je sais qu’il est possible dans spip 2 de définir des url personnalisées pour des pages données, personnellement je n’ai pas creusé la question...

    Répondre à ce message

  • 4
    Aurélien

    J’ai associé les produits aux articles.

    Sous SPIP, sur la page d’un article, j’obtiens à chaque fois le message suivant :

    erreur : la fonction chemin() dans ecrire/inc/utils.php doit être mise en commentaire !

    alors que j’ai pourtant correctement mis en commentaire cette ligne !

    De plus , j’ai DEUX boutons MISE A JOUR, alors que j’ai qu’un seul produit.

    • Aurélien

      Une idée ?

    • pour les deux boutons c’est normal. Quand la liste est longue, c’est plus pratique d’en avoir un en haut et un en bas.

    • l’erreur indiquée en rapport avec la fonction chemin() :

      -  peux tu modifier dans spip_thelia_fonct.php ligne 49

      if (function_exists('chemin')) {

      par :

      if (function_exists('chemin')&&($_REQUEST['exec']!="articles")&&($_REQUEST['exec']!="naviguer")) {

      et me confirmer que l’erreur disparaît ?

    • Aurélien

      Je te confirme que l’erreur a disparu !

      Merci beaucoup,
      Aurélien

    Répondre à ce message

  • 2
    Aurélien

    Lorsque je passe de spip.php ?page=adresse à spip.php ?page=commande, le navigateur (safari) cherche puis termine sa route sur /commande.php avec en erreur :

    Trop de redirections sont survenues

    • Aurélien

      Je me réponds :

      Dans la page adresse, Collissimo (mon unique moyen de transport) n’apparaissait pas alors que je l’avais activé dans Thélia.
      Je les rendu actif directement dans la table Modules et du coup la page commande fonctionne !

      voilà ;)

    • il peut y avoir aussi un pb suite à une maj, liés à une ancienne session thélia qui génèrent des pbs de redirection. Généralement supprimer les cookies de session avec le navigateur résoud aussi le pb.
      ++

    Répondre à ce message

  • 3
    Aurélien

    Y a-t-il moyen d’inverser les boucles ?

    A savoir que PRODUITS_ARTICLES devienne ARTICLES_PRODUITS ! Retrouver un article SPIP dans un produit THELIA ?

    Si oui, quelle serait la syntaxe ?

    Merci,
    Aurélien

    • si tu veux dire dans une boucle thélia, alors c’est pas simple.

      peut-être en faisant un filtre thélia qui accède à la bd spip et renvoie le id_article associé ?

      cf http://wiki.thelia.fr/index.php/Les...

    • Aurélien

      Merci pour la piste !

      Je vais essayer de voir si je peux trouver la syntaxe adéquate.

      Aurélien

    • Aurélien

      A priori ca pourrait fonctionner avec la boucle suivante dans une boucle Thélia :

      <BOUCLE_1(PRODUITS_ARTICLES){id_article LIKE %(#ENV{ID})%}>
      	#ID_ARTICLE
      </BOUCLE_1>

      Je cherche

    Répondre à ce message

  • REWRITE URL ?

    Bon je suis perdu là...
    J’ai dans un menu codé en dur des liens de types :

    <a href="#URL_PAGE{rubrique5_thelia,id_rubrique_thelia=THELIA-ID}" >TOTO</a>

    On fait comment avec REWRITE-THELIA dans ce cas là ?

    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