THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Répertoire des templates: template/
Examen de l'identifiant Rubrique id_rubrique = 1
Examen de l'objet Rubrique ID=1
Test de l'existence du template spécifique (=) rubrique/dossier
Test de l'existence du template '=' pour Rubrique: template/produit=1.html
Test de l'existence du template avec alias template/produit=.html
Test de l'existence du template générique (-) rubrique/dossier
Test de l'existence du template '-' pour Rubrique: template/produit-1.html
Trouvé !
Template final: produit-1

on dirait que je devrais utiliser un alias plutot que produit+102.html  ?

Offline


Quel est l'URL (no-réécrite) de la page demandée ?


OpenStudio Toulouse

Offline


http://www.domaine.tld/?fond=produit&id_produit=102&id_rubrique=1

Last edited by sebimage (21-02-2012 08:21:34)

Offline


Tu utilises bien la dernière version (1.2.2) ?


OpenStudio Toulouse

Offline


Bonjour,

désolé pour la période de standby, un autre projet m'a pris tout mon temps.
Je suis en 1.1.0, je met à jour le plugin tout de suite.

Offline


j'ai mis à jour,
même problème.

Repertoire des template >= 1.5 : template/
Répertoire des templates: template/
Examen de l'identifiant Rubrique id_rubrique = 1
Examen de l'objet Rubrique ID=1
Test de l'existence du template spécifique (=) rubrique/dossier
Test de l'existence du template '=' pour Rubrique: template/produit=1.html
Test de l'existence du template générique (-) rubrique/dossier
Test de l'existence du template '-' pour Rubrique: template/produit-1.html
Trouvé !

Template final: produit-1

j'ai aussi testé en mettant au produit un alias et renommé mon template : produit+alias.html.

Il m'affiche toujours le template produit-1.html ....

Last edited by sebimage (06-03-2012 11:39:06)

Offline


Grace à sebimage, je crois avoir trouvé un bug, spécifique à la 1.5, qui empêche le plugin de trouver les templates produit+<alias>.html ou produit+<ID>.html. Merci sebimage !

Voici le code corrigé du fichier Templatealaspip.class.php, en attendant qu'il soit poussé sur les contribs :

<?php
include_once(realpath(dirname(__FILE__)) . "/../../../classes/PluginsClassiques.class.php");

class Templatesalaspip extends PluginsClassiques
{
	const VERSION   = '1.2.3';
	const MODULE    = 'templatesalaspip';
	const NOMMODULE = 'Templatesalaspip';
	const PREFIXE   = 'tals_';

	const TYPE_CONTENU  = 1;
	const TYPE_DOSSIER  = 2;
	const TYPE_PRODUIT  = 3;
	const TYPE_RUBRIQUE = 4;

	public $id;
	public $type;
	public $idobjet;
	public $alias;

	const TABLE = "templatesalaspip";

	public $table=self::TABLE;

	var $bddvars = array('id', 'type', 'idobjet', 'alias');

	private $reptpl, $post15;

	public function Templatesalaspip()
	{
		parent::PluginsClassiques(self::MODULE);

		$this->debug_on = $this->get_variable(self::PREFIXE.'debug');
	}

	function init()
	{
		$this->ajout_desc(
			self::NOMMODULE,
			"Plugin Templates à la Spip",
			"Ce plugin permet d'utiliser vos templates à la Spip, en utilisant des templates spéfifiques aux rubriques, produits, dossiers et contenus",
			1);

		$query = "
			CREATE TABLE IF NOT EXISTS `".self::TABLE."` (
				`id` INT(11) NOT NULL AUTO_INCREMENT,
				`type` INT(1) NOT NULL,
				`idobjet` INT(11),
				`alias` varchar(128),
				PRIMARY KEY (`id`),
				KEY `idobjet` (`idobjet`)
			)";

		$this->query($query);

		// On doit se placer APRES le plugin multisquelette, s'il est là, car
		// il modifie la variable globale $reptpl, que nous utilisons...
		$res = $this->query("select classement from ".Modules::TABLE." where nom='multisquelettes'");

		if ($res) {
			$num = mysql_result($res, 0, 0);

			if ($num !== false) {
				$num++;
				$this->query("update ".Modules::TABLE." set classement = $num  where nom='".self::MODULE."'");
			}
		}

		$this->create_variable(self::PREFIXE.'activer', true);
		$this->create_variable(self::PREFIXE.'debug', false);
	}

	function destroy()
	{
		$this->query("DROP TABLE `".self::TABLE."`");

		$this->delete_variable(self::PREFIXE.'activer');
		$this->delete_variable(self::PREFIXE.'debug');
	}

	public function charger_idobjet($idobjet, $type)
	{
		 return $this->getVars("select * from $this->table where idobjet=$idobjet and type=$type");
	}

	private function debug($str)
	{
		if ($this->debug_on) echo "<pre>$str</pre>";
	}

	private function get_template_dir() {

		global $reptpl;

		if (! isset($this->reptpl)) {
			// Pour la 1.5
			if (isset($reptpl))
			{
				$this->post15 = true;
				$this->reptpl = rtrim($reptpl, '/') . "/";

				$this->debug("Repertoire des template >= 1.5 : $this->reptpl");
			}
			else
			{
				$this->post15 = false;
				$this->reptpl = '';

				$this->debug("Repertoire des template < 1.5 : $this->reptpl");
			}
		}

		return $this->reptpl;
	}

	private function trouver_template($racine, $symbole, $id_objet, $type)
	{
		clearstatcache();

		$nom = $racine . $symbole . $id_objet;

		$this->debug("Test de l'existence du template '$symbole' pour $type: ".$this->get_template_dir()."$nom.html");

		if (file_exists($this->get_template_dir() . $nom . '.html'))
		{
			$this->debug("Trouvé !");
			return $nom;
		}
		else
		{
			// Determiner si un alias existe
			$tals = new Templatesalaspip();

			switch($type)
			{
				case 'Produit':
					$type = self::TYPE_PRODUIT;
				break;

				case 'Rubrique':
					$type = self::TYPE_RUBRIQUE;
				break;

				case 'Contenu':
					$type = self::TYPE_CONTENU;
				break;

				case 'Dossier':
					$type = self::TYPE_DOSSIER;
				break;
			}

			if ($tals->charger_idobjet($id_objet, $type) && $tals->alias != '')
			{
				$nom = $racine . $symbole . $tals->alias;

				$this->debug("Test de l'existence du template avec alias ".$this->get_template_dir()."$nom.html");

				if (file_exists($this->get_template_dir() . $nom . '.html'))
				{
					$this->debug("Trouvé !");
					return $nom;
				}
			}
		}

		return false;
	}

	 // Modifier la variable 'fond' pour y placer le répertoire du squelette
	public function pre()
	{
		global $fond;

		if (! $this->get_variable(self::PREFIXE.'activer')) return;

		$vars = array('id_produit' => 'Produit', 'id_rubrique' => 'Rubrique', 'id_contenu' => 'Contenu', 'id_dossier' => 'Dossier');

		$newfond = false;

		$this->debug("Répertoire des templates: ".$this->get_template_dir());

		foreach($vars as $var => $clazz)
		{
			global $$var;

			if (isset($_REQUEST[$var]) || isset($$var))
			{
				// Le cas particulier du produit
				$idr = isset($_REQUEST[$var]) ? $_REQUEST[$var] : $$var;

				if ($idr == '') continue;

				$this->debug("Examen de l'identifiant $clazz $var = $idr");

				$obj = new $clazz();

				$racine = preg_replace('/\.html$/', '', $fond);

				// Profondeur max: 20 niveaux
				$iteration = 0;

				while ($iteration < 20)
				{
					$this->debug("Examen de l'objet ".get_class($obj)." ID=$idr");

					$methode = is_a($obj, "Produit") ? 'charger_id' : 'charger';

					if ($obj->$methode($idr))
					{
						// A la première itération, on recherche le template spécifique (+ID ou =ID)
						if ($iteration == 0)
						{
							// Si on est au niveau produit / contenu, chercher le template spécifique (+ID)
							if (is_a($obj, 'Contenu') || is_a($obj, 'Produit'))
							{
								$this->debug("Test de l'existence du template spécifique (+) contenu/produit");

								$newfond = $this->trouver_template($racine, '+', $idr, get_class($obj));

								if ($newfond !== false) break;

								// On n'a pas trouvé ? Chercher ai niveau parent
								switch(get_class($obj))
								{
									case 'Contenu':
										$obj = new Dossier();
										$idr = $obj->dossier;
									break;

									case 'Produit':
										$obj = new Rubrique();
										$idr = $obj->parent;
									break;

									default:
										$idr = $obj->parent;
									break;
								}

								if ($idr == 0) break;
							}

							$idr = $obj->id;

							// Le template spécifique rubrique/dossier (=)
							$this->debug("Test de l'existence du template spécifique (=) rubrique/dossier");

							$newfond = $this->trouver_template($racine, '=', $idr, get_class($obj));
							if ($newfond !== false) break;
						}

						$nom = $racine . '=' . $idr;

						// Le template générique rubrique/dossier (-)
						$this->debug("Test de l'existence du template générique (-) rubrique/dossier");
						$newfond = $this->trouver_template($racine, '-', $idr, get_class($obj));
						if ($newfond !== false) break;

						// Examiner les templates génériques du parent
						$idr = $obj->parent;

						$iteration++;
					}
					else
					{
						$this->debug("Objet ".get_class($obj)." ID=$idr non trouvé.");

						break;
					}
				}
			 }

			 if ($newfond !== false)
			 {
				 $fond = $newfond;

				 if (! $this->post15) $fond .= '.html';

				 break;
			 }
		}

		$this->debug("Template final: $fond");
	}

	public function get_variable($nom)
	{
		$var = new Variable();
		if ($var->charger($nom))
		{
			return $var->valeur;
		}

		return false;
	}

	protected function create_variable($nom, $valeur)
	{
		$variable = new Variable();

		$variable->nom = $nom;
		$variable->valeur = $valeur;
		$variable->protege = 1;
		$variable->cache = 1;

		$variable->add();
	}

	protected function delete_variable($nom)
	{
		$variable = new Variable();

		if ($variable->charger($nom)) $variable->delete();
	}

}
?>

sebimage, peux-tu valider que tout est OK pour toi ?

Last edited by roadster31 (06-03-2012 15:14:42)


OpenStudio Toulouse

Offline


bien vu, avec ce correctif ça fonctionne parfaitement.
merci beaucoup, je vais pouvoir me débarrasser de ma suite de boucles test dans mon  template produit-1.html  smile

Offline


bonsoir
pour moi le plugins ne fonctionne pas, j'ai regardé un peu de partout sur les fichier mais ne vois pas trop
j'utilise le plugin spip thelia
y a t il des modification à faire?
merci de votre aide

Offline


le plugins ne fonctionne pas

C'est à dire ? Que se passe-t-il exactement ?

j'utilise le plugin spip thelia

Ce plugin n'a jamais été testé dans le contexte Spip-Thelia


OpenStudio Toulouse

Offline


roadster31 wrote:

le plugins ne fonctionne pas

C'est à dire ? Que se passe-t-il exactement ?

j'utilise le plugin spip thelia

Ce plugin n'a jamais été testé dans le contexte Spip-Thelia

et bien rien justement
pour ma rubrique en question j'ai essayer avec rubrique_thelia=18.html et rubrique=18.html et rien ne fonctionne enfin rien ne change par rapport à la rubrique d'origine même si j'ai vider le cache de spip

Offline


nounours2 wrote:
roadster31 wrote:

le plugins ne fonctionne pas

C'est à dire ? Que se passe-t-il exactement ?

j'utilise le plugin spip thelia

Ce plugin n'a jamais été testé dans le contexte Spip-Thelia

et bien rien justement
pour ma rubrique en question j'ai essayer avec rubrique_thelia=18.html et rubrique=18.html et rien ne fonctionne enfin rien ne change par rapport à la rubrique d'origine même si j'ai vider le cache de spip

y a surement des modif à faire mais lesquel? c'est une très bonne question!!!!!

Offline


roadster31 wrote:

le plugins ne fonctionne pas

C'est à dire ? Que se passe-t-il exactement ?

j'utilise le plugin spip thelia

Ce plugin n'a jamais été testé dans le contexte Spip-Thelia

en fait a la base je chercher juste un moyens d'afficher mes sous rubriques s'il y en a sinon la liste des produits
mais ny arrive pas non plus

Offline


y a surement des modif à faire mais lesquel?

Comme je n'ai jamais validé ce plugin avec spip-thelia (et que je ne compte pas le faire), je ne peux pas t'aider plus.


OpenStudio Toulouse

Offline


roadster31 wrote:

y a surement des modif à faire mais lesquel?

Comme je n'ai jamais validé ce plugin avec spip-thelia (et que je ne compte pas le faire), je ne peux pas t'aider plus.

ok tant pis pour moi, bon vais me débrouiller seul alors

Offline


Dans un contexte SPIP Thelia c'est SPIP qui gère l'affichage des squelettes et non Thelia.


Plugins : Modèles Thelia | Boucle libre | Rubriques déclinables en produits | Colissimo Access/Expert

Offline


Bonjour, dans un site en V 1.5.4.3, je dois rajouter ce plugin. Malheureusement même en appliquant les modifs citées plus haut, j'ai toujours un souci. pas d'enregistrement possible avec + ou = seul le - fonctionne.
voici le message du navigateur : L'alias ne peut contenir que les caractères A-Z, a-z, 0-9, - et _


MAC OS LION MAMP
Quand on veut vraiment, on peut toujours.

Offline


Le plugin fonctionne parfaitement en 1.5.

Par contre, tu n'utilises pas l'alias correctement. L'alias remplace l'ID dans le nom du fichier template à associer, ni plus, ni moins. Tu n'a donc pas à y mettre un +, ou - ou un =.

Exemple: pour un produit ID 12 sans alias défini, le template spécifique de ce produit est produit+12.html. Si tu définis un alias (disons 'pouet') pour ce produit via le bloc adequat de la fiche produit, tu écrira produit+pouet.html (mais produit+12.html marche aussi). C'est donc plus simple avec les alias de se repérer dans les templates.

C'est donc dans les noms de fichiers template que tu vas utiliser +, - ou =, et pas dans l'alias.

Tout ceci est expliqué plus en détail dans la doc du plugin.


OpenStudio Toulouse

Offline


oups.... j'avais du garder en tête l'ancienne version.... e sont les bulles de Noël qui m'ont fait de l'espace dans le cerveau. Merci roadster31 d'y avoir remis un peu d'ordre.... smile


MAC OS LION MAMP
Quand on veut vraiment, on peut toujours.