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

  • 1

    Bonjour,

    J’essaie de lier les rubriques de ma boutique Thelia à des articles SPIP, mais je n’ai pas trouvé de modèle de boucles comme pour afficher les produits associés à une rubrique.

    J’ai testé cela mais ça ne fonctionne pas.



    THELIA-TITRE

    Quelqu’un aurait il une idée pour afficher ces rubriques de la boutique ?

    merci

    Répondre à ce message

  • 1

    Bonjour,

    Je souhaite internationaliser le site dont je m’occupe et donc utiliser les fonctionnalités multilingues de spip et thelia. J’ai un peu près compris comment activer la gestion multilingue sous spip (création d’un secteur spécifique pour chaque langue, traduction des articles...), de même que sous thelia (traduction des rubriques et articles).

    J’ai commencé à modifier mes squelettes pour tenir compte de la langue à l’aide du filtre {lang} pour les boucles spip et des liens vers les pages thelia en ajoutant aux url le paramètre de langue ?lang=

    Par exemple, pour créer un lien vers une rubrique thelia, j’utilise dans mon squelette :

    <a href="#URL_PAGE{rubrique_thelia,id_rubrique=THELIA-ID&amp;lang=#LANG}">THELIA-TITRE</a>

    Je me demande cependant comment utiliser la fonctionnalité urlrewriting de thelia.

    <a href="THELIA-REWRITEURL">THELIA-TITRE</a>

    fonctionne bien, mais n’ajoute pas d’information de langue à l’url.

    Faut-il modifier le moteur thelia, pour lui faire générer une information de langue supplémentaire, ou alors passer par le moteur spip pour la réécriture des liens thelia ?

    Y a-t’il un autre moyen de récupérer la variable lang de thelia : j’ai lu quelque part que thelia passe ce paramètre langue différemment de spip, par une méthode GET si mes souvenirs sont bon.

    Quelqu’un a-t’il déjà expérimenté l’url rewriting et le multilinguisme avec spipthelia ? Quel est la méthode que vous avez déjà utilisé avec succés ?

    • Après plusieurs tentatives, je commence à mieux comprendre le comportement imbriqué de spip et thelia.

      Spip gère les langues de façon indépendante de thelia. Et le comportement de thelia est changé par l’utilisation de spipthelia.

      Alors que thelia pris comme logiciel autonome mémorise un changement de langue par l’ajout une unique fois dans l’adresse d’une page à consulter d’une chaine de lang (lang=2 par exemple pour passer à l’anglais), il est nécessaire d’ajouter systématiquement une chaine de langue en utilisant spipthelia.

      Je m’explique :

      -  en utilisant thelia, le lien suivant dans un squelette :

      <a href="#REWRITEURL&lang=2">mon lien</a>
      permet d’appeler une page en anglais.

      à partir de ce changement de langue, tous les liens de la forme
      <a href="#REWRITEURL">mon autre lien</a>
      meneront vers des pages en anglais.

      -  en utilisant spipthelia :

      <a href="THELIA-REWRITEURL&lang=en">mon lien</a>
      permet aussi d’appeler une page thelia en anglais.

      Mais si sur le squelette de la page appelée nous avons
      <a href="THELIA-REWRITEURL">mon autre lien</a>
      la page appelée sera de nouveau en français.

      Il faut donc que tous les liens vers les pages THELIA des squelettes soit transformés de la façon suivante :
      <a href="THELIA-REWRITEURL&lang=#LANG">mon lien</a>

      Cela fonctionne, mais a l’inconvénient majeur que tous les liens auront une information lang. On a donc de l’url rewriting, avec les informations supplémentaires en paramêtres. On perd donc un peu l’intérêt de l’url rewriting.

      Tous les liens du site auront donc le format suivant :
      http://monsite.tld/monlienreecrit?lang=fr
      ou http://monsite.tld/monlienreecrit?lang=en

      Je n’ai pas trouvé mieux pour l’instant. D’où ma question aux développeurs de spipthelia : est-il raisonnablement possible d’espérer synchroniser la gestion des langues de spip et de thelia par le plugin spipthelia ?

      Je ne maîtrise pas bien le php, et je n’ai pas encore tout compris dans les mécanismes de gestion des langues des scripts. J’hésite un peu sur les modifications à apporter.

    Répondre à ce message

  • Je n’ai effectivement plus d’erreur en remplacent « action » par « thelia_action », mais par contre, il ne se passe rien (je reviens sur ma page, mais le mail n’arrive jamais).

    Idem, toujours dans le plugin parrainage, lorsque je veux utiliser le solde de parrainage... Je renvoie vers « commande.php ?thelia_action=compteparrainage » mais rien ne se passe (j’imagine que le solde devrait apparaitre dans le champ « remise »...

    Merci

    Répondre à ce message

  • 1

    Hello,

    Est-ce que quelqu’un a réussit à installer le plugin parrainage de Thelia sur un site tournant avec ce plugin SPIP_THELIA ? Y-a-t-il une astuce car j’ai essayé de l’installer et je me retrouve avec une erreur « Fichier action/parrainage_mail introuvable » lorsque j’essaye de parrainer quelqu’un ?? J’ai posé des questions sur le forum de thelia mais ils ne peuvent pas m’aider car il semble que le problème soit lié à l’utilisation avec SPIP...

    Sinon, pour répondre au message précédent, je peux envoyer mon fichier de langue en NL sans problème (Ou dois-je l’envoyer)... Par contre, j’ai également dû, pour ajouter cette langue 4, créer les nouveaux status en NL dans la table status ainsi que traduire tous les noms de pays pour la langue NL dans la table pays de Thelia...

    Merci

    • Je crois qu’il faut que tu modifies un peu la boucle thélia pour l’adapter au plugin spip/thélia et éviter les conflits avec SPIP. Un des conflits qui revient souvent et qui semble être le tien, c’est sur la variable « action » des formulaires qu’il faudrait remplacer par « thelia_action »

      par exemple dans :

      <form action="parrainage.php" method="post" />
      	<input type="hidden" name="action" value="parrainage_mail" />
      	Prénom de votre ami : <input type="text" name="prenom_filleul" />
      	Nom de votre ami : <input type="text" name="nom_filleul" />
      	E-Mail de votre ami : <input type="text" name="mail_filleul" />	
      	<input type="submit" value="OK" />
      </form>

      remplacer :

      <input type="hidden" name="action" value="parrainage_mail" />

      par :

      <input type="hidden" name="thelia_action" value="parrainage_mail" />

      sinon pour le fichier de langue en NL, tu peux :
      -  soit demander un accès sur SVN (la demande se fait sur la liste spip-zone) et ensuite « commiter » la modification directement sur le plugin
      -  soit me l’envoyer par mail (apachot at openstudio.fr) je l’ajouterai

      A+

    Répondre à ce message

  • Bonjour, est-il possible de créer, comme pour spip, un squelette différent pour une rubrique différente ? (exemple : rubrique_thelia-2.html ne fonctionnera que pour la 2e rubrique thelia)

    Merci et a bientôt

    Olivier

    Répondre à ce message

  • 3

    Bonjour,

    Quelqu’un pourrait-il m’expliquer comment ajouter une langue dans Thelia (ou en remplacer une existante) ?

    J’ai bien compris qu’il fallait ajouter la langue dans la table « lang » directement, mais comment Thelia va-t-il faire le lien avec le fichier de langue correct (p.ex : spipthelia_fr.php). J’aimerais ajouter le néerlandais à mon site (donc avoir un spipthelia_nl.php et pouvoir traduire les produits en néerlandais via l’interface d’admin !).

    Merci

    • Je me répond à moi même... J’ai ajouté une langue 4 dans la table lang, ajouté l’association nl/4 au niveau du plugin, et créé un fichier spipthelia_nl.php et visiblement, cela fonctionne...

      Je ne comprends toujours pas comment l’association est faite... J’imagine que les fichiers spipthelia_xx.php sont spécifiques au plugin et ne font pas partie de l’implémentation standard de spip et que c’est donc le plugin qui gère l’association.

    • Salut,

      c’est parce que toutes les chaînes de langue des squelettes sont gérées par SPIP. Ce sont des variables de type <:spipthelia:ma_chaine_de_langue :>

      donc SPIP va tout seul chercher si un fichier de langue spipthelia_nl.php existe pour le hollandais dans /lang

      ++

    • Au fait, si tu veux nous envoyer le fichier générique en hollandais, je l’ajouterai au plugin

      ++

    Répondre à ce message

  • Merci pour ce plugin que je suis en train de découvrir

    Avec des produits associé á l’article j’obtiens le message suivant :
    Warning : Invalid argument supplied for foreach() in /plugins/balise_session/public/cacher.php on line 32

    Une solution ?

    Rainer

    Répondre à ce message

  • Bon alors cette fois-ci j’ai bien la fenêtre pour associer un produit à mon article mais quand je clic dessus pour qu’elle s’ouvre et me présente les produits à mettre dans mon article j’ai ce message d’erreur :
    « Warning : mysql_num_rows() : supplied argument is not a valid MySQL result resource in /mnt/148/sda/2/7/bienvenuealabadie/la-mouniche/fonctions/boucles.php on line 119 »

    ça fonctionne pas avec la dernière version de Thélia (1.3.6) ?

    Répondre à ce message

  • 3

    Je ne comprends pas... J’ai la version 3.6 de Thélia et ça fonctionne bien, mais je ne trouve nullepart une interface pour associer un produit à une rubrique ou à un article.
    La seule chose que cfg me propose dans la configuration est le choix de la version pour le plugin Thélia. Je choisis version 3.4 ou supérieur et il me dit qu’il le prend en compte mais ça s’arrête là.

    • même problème pour moi ! qqn a une solution ?

    • autant pour moi ! il faut prendre la version dev qui correspond à la 1.2

    • Oui, c’est ce que je viens de trouver aussi à l’instant... lol

    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