vente en ligne, ecommerce

Thélia

Pour utiliser les boucles Thélia dans vos squelettes

Une approche basée sur l’utilisation conjointe des deux logiciels SPIP et Thélia pour la réalisation de sites de publication et de vente en ligne

Description

Thélia est un logiciel libre de vente en ligne basé sur un système boucle/balise très proche de celui de SPIP.

Ce plugin permet d’activer le moteur de Thélia [1] après celui de SPIP lors du calcul des pages, ce qui va vous permettre d’utiliser directement les boucles au format Thélia dans vos squelettes :
-  vous gérez votre site SPIP et le catalogue Thélia depuis l’espace privé SPIP

Le plugin est livré avec tous les squelettes spécifiques pour la vente en ligne : panier.html commande.html .... basés sur la dist, et prêts à être personnalisés.

Documentations complémentaires


-  Utilisation avancée du plugin Thélia
-  Insérer des produits Thélia dans les articles
-  Wiki Thélia

Installation

Pour fonctionner, ce plugin requiert une installation préalable du logiciel Thélia en version 1.3.3 ou supérieure et dans le même répertoire que SPIP.

C’est à dire qu’après l’install vous devriez avoir une arborescence du style :

/
   /admin
   /classes
   /client
   /config
   /ecrire
   /fonctions
   /IMG
   /lib
   /local
   /oo
   /plugins
   /template
   /tmp
   index.php
   spip.php
   ...etc...

Je vous invite à consulter le site de Thélia pour obtenir toutes les informations nécessaires sur l’installation de thélia (en gros, copiez les fichiers puis lancez /install) [2].

Vous pouvez installer SPIP et Thélia dans la même base.

Etape 1 : Installation du plugin.

Récupérez le zip du plugin thélia, ainsi que celui du plugin CFG, sur l’espace de téléchargement de la Zone : https://files.spip.net/spip-zone/ [3]. L’installation se déroule ensuite comme pour tous les autres plugins, cf. https://www.spip.net/fr_article3396.html

L’installation se fait dans le répertoire /plugins/plugin-thelia

Etape 2 : Fichiers de redirection.

Vous avez deux possibilités :
-  copier les fichiers contenus dans le répertoire plugin-thelia/pb_htaccess à la racine de votre site (recommandé)
-  ou copier le contenu du fichier htaccess.plugin_thelia.txt fourni avec le plugin dans le fichier .htaccess à la racine de votre site.

Pour spip 2.0 et Thélia < 1.5.1 vous devez également :
-  modifier le fichier /ecrire/inc/utils.php et mettre en commentaire la fonction chemin() (ligne 671),
-  copier le contenu du répertoire plugin-thelia/squelettes_spip2.0 dans votre répertoire /squelettes

Pour Thélia 1.5 (inutile pour Thélia 1.5.1), vous devez :
-  désactiver l’encodage en UTF8 dans le panneau CFG du plugin Thélia
-  remplacer dans le fichier /fonctions/hierarchie.php les fonctions suivantes : (Merci à A. Bourdeau pour cette information)

// Renvoie le chemin pour aller à une hierarchie d'objets, avec protection contre les
// références circulaires dans la hiérarchie d'objets.
function _chemin($id, $nomobj, $lang=1){

	$ids = array();

	$tab = array();

	$tobj = new $nomobj();
	$tobj->parent = $id;

	$objdesc = $nomobj."desc";

	// On doit toujours retourner au moins un element, sinon bouclage dans l'admin...
	$tab[] = new $objdesc();

	$idx = 0;

	while(intval($tobj->parent) != 0) {
		$ids[] = $tobj->parent;

		$tobjdesc = new $objdesc();

		if (intval($tobj->parent) > 0 && $tobj->charger($tobj->parent) && $tobjdesc->charger($tobj->id, $lang))
		{
			if (in_array($tobj->parent, $ids))
			{
				die("Référence circulaire détectée dans la hiérarchie des ${nomobj}s à partir de l'ID=$tobj->id. Chemin: ".implode(" -&gt; ", $ids));
			}

			$tab[$idx++] = $tobjdesc;
		}
		else
		{
			// Chargement impossible -> arrêt
			break;
		}

	}

	return $tab;
}

// renvoie le chemin pour aller à une rubrique donnée
function chemin($id, $lang=1){
	return _chemin($id, 'Rubrique', $lang);
}

// renvoie le chemin vers un dossier
function chemin_dos($id, $lang=1){
	return _chemin($id, 'Dossier', $lang);
}

par :

// Renvoie le chemin pour aller à une hierarchie d'objets, avec protection contre les
// références circulaires dans la hiérarchie d'objets.
function _chemin_thelia($id, $nomobj, $lang=1){

	$ids = array();

	$tab = array();

	$tobj = new $nomobj();
	$tobj->parent = $id;

	$objdesc = $nomobj."desc";

	// On doit toujours retourner au moins un element, sinon bouclage dans l'admin...
	$tab[] = new $objdesc();

	$idx = 0;

	while(intval($tobj->parent) != 0) {
		$ids[] = $tobj->parent;

		$tobjdesc = new $objdesc();

		if (intval($tobj->parent) > 0 && $tobj->charger($tobj->parent) && $tobjdesc->charger($tobj->id, $lang))
		{
			if (in_array($tobj->parent, $ids))
			{
				die("Référence circulaire détectée dans la hiérarchie des ${nomobj}s à partir de l'ID=$tobj->id. Chemin: ".implode(" -&gt; ", $ids));
			}

			$tab[$idx++] = $tobjdesc;
		}
		else
		{
			// Chargement impossible -> arrêt
			break;
		}

	}

	return $tab;
}

// renvoie le chemin pour aller à une rubrique donnée
function chemin($id, $lang=1){
	return _chemin_thelia($id, 'Rubrique', $lang);
}

// renvoie le chemin vers un dossier
function chemin_dos($id, $lang=1){
	return _chemin_thelia($id, 'Dossier', $lang);
}

Pour zpip, vous devez :
-  copier le contenu du répertoire plugin-thelia/squelettes_zpip dans votre répertoire /squelettes

Un bouton vous permet d’accéder au catalogue Thélia depuis l’espace privé SPIP (Edition->Catalogue Thélia) :

Modification légère de la syntaxe de Thélia

Certaines balises Thélia sont identiques aux balises SPIP, par exemple #TITRE, #CHAPO. Pour éviter une confusion entre les deux moteurs, il sera nécessaire de modifier légèrement la syntaxe des balises Thélia.

La modification à faire est la suivante : préfixer les balises du mot THELIA- et supprimer le caractère #.

Ainsi, la balise #TITRE se rapportant à un titre Thélia doit être renommée THELIA-TITRE

Exemple de boucle Thélia

Pour illustrer la ressemblance entre la syntaxe SPIP et la syntaxe Thélia, voici un exemple de boucle simple (liste des rubriques du site)

Boucle SPIP :

<ul>
<BOUCLE_rubriques(RUBRIQUES)>
	<li><a href="#URL_RUBRIQUE">#TITRE</a></li>
</BOUCLE_rubriques>
</ul>

Boucle Thélia :

<ul>
<THELIA_rubriques type="RUBRIQUE">
	<li><a href="#URL">#TITRE</a></li>
</THELIA_rubriques>
</ul>

Boucle Thélia adaptée pour le plugin :

<ul>
<THELIA_rubriques type="RUBRIQUE">
	 <li><a href="THELIA-URL">THELIA-TITRE</a></li>
</THELIA_rubriques>
</ul>

Pour en savoir plus sur les boucles et balises Thélia, consultez le wiki Thélia

Notes

[1Depuis 2014, Thelia propose une nouvelle version v2 qui n’est plus compatible : vous devez toujours utiliser la version 1.5.4.2 de Thélia, que vous trouverez sur SourceForge..

[2Après l’installation vous n’avez plus besoin de copier le contenu du répertoire template à la racine de votre site

[3En cas de problême sur ce lien de téléchargement voir les sites miroirs

Pour aller plus loin avec le plugin : url-rewriting, association produits Thélia / articles SPIP, multilinguisme... reportez vous à l’article : utilisation avancée du Plugin Thélia.

Discussion

304 discussions

  • 1

    J’ai une rubrique spip en anglais la numéro 2.
    J’ai une rubrique Thélia numéro 2

    Quand je vais sur la rubrique 2 de Thélia, j’ai le tout en anglais ???

    Merci d’avance

    • J’ai eu la même chose. j’ai résolu le problème en passant le parametre de langue dans les urls.
      C’est pas top mais ça fonctionne.

      Exemple :

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

    Répondre à ce message

  • 1
    Aurélien

    Salut,

    j’ai un petit souci avec la mise en évidence des rubriques visitées dans les menus.

    Sur mon site, j’ai une partie dédiée à la rédaction (uniquement SPIP) et une partie boutique (gérée avec Thélia). Et 2 menus distincts.

    Le problème vient des rubriques Thélia et Spip portant le même id.
    Lorsque je suis dans la rubrique 1 de ma boutique, j’ai bien ma rubrique boutique 1 « exposé » dans le menu idoine mais également la rubrique SPIP 1 exposée dans l’autre menu, ce qui ne m’arrange pas :).

    Voici les inclusions :
    Pour le menu Boutique :
    <INCLURE{fond=inc-rubriques}{id_rubrique_thelia=THELIA-RUBRIQUE_ID}>

    Pour le menu Spip :
    <INCLURE{fond=inc-menu-horizontal} {id_rubrique}>

    Je me demandais si quelqu’un avait déjà eu ce problème et s’il existe une solution.

    Merci

    • J’ai exactement le même problème et je n’ai malheureusement pas trouvé de solution.
      Je crois que ça se mélange les crayons entre les rubriques Thelia et SPIP quelque part.
      Mais ou ?

    Répondre à ce message

  • 1

    Question bête...
    Y’a t-il un moyen pour avoir des squelettes de rubriques thélia personnalisés comme avec spip ? Ex : rubrique=1.html

    • Peut-être :

      <a href="#URL_PAGE{rubrique1_thelia,id_rubrique=THELIA-ID}" alt="THELIA-TITRE"></a>

    Répondre à ce message

  • 2

    Bonjour,
    J’ai du louper quelque chose... tout se passe très bien jusqu’à ce que je clic sur le bouton « Ajouter au panier »...
    Là j’ai cette erreur qui apparait :
    « 
    Fatal error : Unknown() : The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition navigation of the object you are trying to operate on was loaded _before_ the session was started in /mnt/148/sda/2/7/bienvenuealabadie/la-mouniche/fonctions/action.php on line 50
     »

    Mon site de test est là bas : http://bienvenuealabadie.free.fr
    et la page de la boutique là bas :
    http://bienvenuealabadie.free.fr/la-mouniche/spip.php?article15

    Merci d’avance pour votre aide

    • Est-ce que quelqu’un pourrait m’aider pour ce problème svp ? Le plugin ne fonctionne pas avec la dernière version de Thélia (1.3.6) ou quoi ?

    • Bonjour,
      J’ai le même type de soucis, lorsque je clic sur le bouton « Ajouter au panier »... j’ai ce message : Fatal error : Call to a member function on a non-object in f :\spip\spip1\fonctions\action.php on line 50
      As-tu trouvé une solution depuis ?
      Merci d’avance

    Répondre à ce message

  • 4

    sur un spip mutualisé (un moyau plusieurs site) dont un que je voudrais utiliser avec spip, commenter la fonction chemin() dans utils.php me renvois sur le site et dans l’admin sur une page blanche...

    • @Al > Malheureusement tu n’as pas le choix avec Thelia.

      Je pense que tu dois avoir des plugins qui utilisent chemin() au lieu de find_in_path().
      Peux-tu dire quels plugins est-ce que tu utilises ?

    • bien sur ;)
      voici la liste :

      *plugin Lecteur Multimédia en Flash (MP3,flv)
      * pluginAgenda 2.0
      * pluginAuteurs Last (AuLa)
      * le pluginBarre Typo V2 pour 1.9.2 et suivantes
      * plugincfg : moteur de configuration
      * pluginChamps Extras
      * pluginPlugin de compatibilité avec SPIP 1.9.3 SVN
      * pluginFCKeditor 2.6.3b
      * plugin Image Ragged
      * plugin Mutualisation facile
      * pluginNo-SPAM, Halte aux Spams
      * pluginInterface Thélia
      * pluginSélection d’articles
      * plugin Social tags
      * pluginSPIP Bonux 2.0
      * pluginSPIP-Listes
      * pluginLiens spip_out ouvrants
      * swfupload

      Pour info :
      en les désactivant tous a l’exeption de cfg/thelia/compat
      le problème reste le même
      y aurait il une incompatibilité avec la mutualisation ?
      ou quelque chose que j’aurais raté ?

    • @Al > pour tout désactiver, il suffit de renommer le répertoire plugins/ en qq chose d’autre.

      Est-ce que tu as du changement (j’imagine que déjà tu n’as plus de mutualisation) ?

      Si tu n’as plus de page blanche, le plus simple est de recréer un répertoire plugins/ vierge et d’y ajouter les plugins un à un, en les activant successivement. Ca te permet de trouver le plugin qui foire.

      Sinon tu peux chercher si un des plugins utilise la fonction « chemin() » (en faisant une recherche dans le répertoire plugins/). C’est ce que j’allais faire, mais je manque de temps..

    • en fait j’ai sortie la mutualisation du rep plugin (comme conseiller qqu part dans les docs sur ce site d’ailleurs
      j’avais laisser le plugin mutu dedans, mais je l’ai effacé depuis

      je penche pour un problème de mutualisation en fait...
      mais la je seche un peu
      parce qu’en gardant simplement cfg/thelia/compat
      le probleme reste le meme

      et en enlevant le plug thelia
      ca revient...
      donc...

      Enfin si tu as une idée ou que quelqu’un en a une
      il est le bienvenu :d

    Répondre à ce message

  • Merci Gilles

    Pour cette réponse on ne peut plus rapide, je venais de lire ce qui concerne la mutualisation sur Spip et l’article : Base de données sur la gestion de différents appels à des bases de données externe, c’est ce vers quoi je vais me tourner sûrement.

    Merci encore de cette réactivité

    Bien à tous

    eric

    Répondre à ce message

  • 1

    Bonjour,

    Je lis « Vous pouvez installer SPIP et Thélia dans la même base. »
    Ok pas de soucis.

    FAce à la demande suivante :
    -  Spip « portail »
    -  2 boutiques « thelia »
    -  Un seul compte bancaire pour les reglement des 2 boutiques.

    Puis je :

    Mettre Spip et 2 thelia sur la meme base (facilité de sauvegarde 1 seule base)
    Si oui : comment proceder pour différencier les différentes tables des 2 thelia pour eviter les melanges lors de l’affichage de l’une des deux boutiques, je sais que je dois placer QQchoses avant le nom de chaque table, cela doit il etre fait manuellement via phpmyadmin et surement qq chose à modifier dans mon fichier « connect.php ».

    Merci à vous si vous avez qq éléments de reponses

    Cordialement

    Eric

    • je parle sous le contrôle d’Arnaud, mais il me semble que ce n’est pas possible de mettre 2 Thélia sur une même base.
      Et vu le mécanisme de balise Thélia, je ne crois pas qu’on puisse, comme dans SPIP, faire référence à des éléments dans une base externe : donc un squelette SPIP/Thelia ne peut pas faire appel à 2 Thelia sur 2 tables différentes.

      Par contre, tu peux utiliser la mutualisation de SPIP pour avoir 2 sites SPIP(+Thelia) basés sur un seul noyau SPIP (donc plus facile à maintenir si c’est l’élément recherché. Mais ça ne change rien au fait de devoir avoir 2 bases distinctes

      .Gilles

    Répondre à ce message

  • J’ai entièrement testé et j’avoue que les 2 combinés (SPIP et Thélia) fonctionnent à merveille.
    Bravo.

    Répondre à ce message

  • 8

    Bonjour,

    j’ai un problème lors d’une nouvelle installation de spip 1.9.2.e et de thelia 1.3.8.

    En effet, lorsque j’affiche les pages rubrique_thelia ou produit, il me met ce message :

    Warning : mysql_num_rows() : supplied argument is not a valid MySQL result resource in /…/fonctions/boucles.php on line 965.

    Mon autre pb est que lorsque je valide mon panier, je m’enregistre et il ne veut pas me livrer en « france métropolitaine » alors que tout est OK dans la partie Admin gestion des zones de transport.

    Merci

    Olivier

    • Anne-Laure

      Bonjour, je rencontre exactement le même problème qu’Olivier, décrit ci-dessous, avec les les mêmes versions de Thelia et de SPIP. Je suis en phase de test pour m’autoformer à ce très intéressant plugin,

      merci pour la création de ce plugin !
      et si quelqu’un a une réponse, merci d’avance !

    • Salut,

      il est question de cette erreur sur le forum de Thélia, liée peut-être à la version 1.3.8. de Thélia

      de mon côté je vais installer cette version sur http://plugin-thelia.openstudio.fr pour voir si je reproduis le warning.

      a+

    • J’ai exactement le même problème.
      Pas de solutions ?

      Cordialement,
      Z.

    • la solution indiquée sur le forum de Thélia :

      Remplacer dans /fonctions/boucle.php, ligne 964 :

      $resul = mysql_query($query, $produit->link);
      $nbres = mysql_num_rows($resul);
      $saveReq = "select * from $produit->table where 1 $search $order ";

      Par :

      $resul = mysql_query($query, $produit->link);
      $nbres = @mysql_num_rows($resul);
      $saveReq = "select * from $produit->table where 1 $search $order ";
    • Bonjour Olivier,
      J’ai exactement le même soucis concernant la livraison. Il refuse de livrer en France métropolitaine (et dans n’importe quel autre pays d’ailleurs). Je ne souhaite pas faire livrer, mais fournir le produit sur place et là encore...impossible. As-tu trouvé, depuis, la solution ?
      Merci
      Paname

    • Bonsoir,

      J’ai eu le problème, il disparaît si on enlève les boucles conditionnelles pour le transport. Si c’est ton cas :

      enlève dans adresse.html :

      <T_transport>

      et

      </T_transport>
      <:spipthelia:probleme_adresse_livraison:>
      <//T_transport>

      Cette condition n’est pas nécessaire (gérer les zones de livraison au niveau de l’espace d’admin thélia) et semble poser problème avec la version 1.3.8 de thélia et le plugin spip/thélia

      En espérant que celà te soit utile,

      a+

    • C’était effectivment ce code qui me bloquait !!! Il fallait le trouver. Merci beaucoup en tout cas et « comme on dit », l’épine (non, le sabre) n’est plus dans mon petit peton. Mes respects ;) en espérant que le monsieur tout rouge soit généreux à nöel !

    • Bonjour à tous,
      J’ai parlé trop vite.
      Après avoir été bloqué par la boucle conditionnelle “T_transport” qui m’empêchait de passer l’étape de la livraison, je pensais être sorti d’affaire. La solution d’Arnault m’a permis de déverouiller l’étape “livraison” mais n’a fonctionné que quelques heures...

      A ma grande surprise, le bouton « continuer » présent à l’étape 3 de la livraison me fait dorénavant buguer le navigateur. Firefox me dit :

      « Boucle de redirection
      Firefox a détecté que le serveur redirige la demande pour cette adresse d’une manière qui n’aboutira pas.
      Le navigateur a arrêté d’attendre une réponse du site. Le site crée une redirection de telle sorte que la requête ne peut jamais aboutir. »


      Quelqu’un a déjà eu ce soucis ?
      Merci à tous.

    Répondre à ce message

  • 1

    Bonjour,

    J’ai une jolie erreur.
    Quand je valide le panier, le lien part vers spip ?page=adresse mais ça redirige automatiquement vers connexion.php. Et bien entendu y’ a pas de connexion.php.

    Une idée ?

    Cordialement
    T.

    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