Jump to content

Template par catégorie


Recommended Posts

Bonjour à tous, existe-t-il un moyen de personnalisation de la mise en page par un principe de "surcharge à la SPIP" pour avoir un template spécifique par catégorie ?

Pour rappel et de façon simplifiée, le principe de surcharge de SPIP est le suivant :

* category.html pour toutes les catégories
* category-1.html pour la catégorie ayant l’identifiant 1 et pour toutes ses sous-catégories
* category=1.html uniquement pour la catégorie 1

Merci

Link to comment
Share on other sites

  • 1 month later...

Bonjour

il est possible de créer de nouvelles pages "Template".
Je viens de le faire pour les catégories et sous catégories. J'explique :

La maquette graphique de mon client m'impose une mise en page différente entre la catégorie, la sous catégorie et la sous sous catégorie.

J'ai donc fabriqué deux fichiers supplémentaires en dupliquant le fichier category.tpl et en leur appliquant une mise en page différente :

1 - category-sous.tpl

2 - category-sous-sous.tpl

Il faut aussi dupliquer le fichier : category.php (à la base de ton site), ce qui donne :

1 - category-sous.php

Attention : modifier la ligne :

$smarty->display(_PS_THEME_DIR_.'category.tpl');


par

$smarty->display(_PS_THEME_DIR_.'category-sous.tpl');



2 - category-sous-sous.php

Attention : modifier la ligne :

$smarty->display(_PS_THEME_DIR_.'category.tpl');


par

$smarty->display(_PS_THEME_DIR_.'category-sous-sous.tpl');




Maintenant il faut modifier le fichier category-tree-branch.tpl :

{include file=$tpl_dir./category-tree-branch.tpl node=$child last='true'}
{else}
{include file=$tpl_dir./category-tree-branch.tpl node=$child last='false'}



par

{include file=$tpl_dir./category-sous-tree-branch.tpl node=$child last='true'}
{else}
{include file=$tpl_dir./category-sous-tree-branch.tpl node=$child last='false'}



et dupliquer ce fichier :

1 - category-sous-tree-branch.tpl

Attention : modifier la ligne :




par




et les lignes

{include file=$tpl_dir./category-sous-tree-branch.tpl node=$child last='true'}
{else}
{include file=$tpl_dir./category-sous-tree-branch.tpl node=$child last='false'}



par

{include file=$tpl_dir./category-sous-sous-tree-branch.tpl node=$child last='true'}
{else}
{include file=$tpl_dir./category-sous-sous-tree-branch.tpl node=$child last='false'}



2 - category-sous-sous-tree-branch.tpl




par




et les lignes

{include file=$tpl_dir./category-sous-tree-branch.tpl node=$child last='true'}
{else}
{include file=$tpl_dir./category-sous-tree-branch.tpl node=$child last='false'}



par

{include file=$tpl_dir./category-sous-sous-tree-branch.tpl node=$child last='true'}
{else}
{include file=$tpl_dir./category-sous-sous-tree-branch.tpl node=$child last='false'}




Et voila ça fonctionne !

Mais, car il y a souvent un mais, quand on active l'URL simplifié, l'URL de ces nouveaux fichiers n'est pas réécris :(

Je sais d'où vient le problème (enfin je crois) :

en remplaçant




par




La réécriture URL ne s'applique plus.

Il faudrait trouver un moyen de faire rediriger

$node.link


Vers "category-sous.php" et pour l'autre fichier vers category-sous-sous.php

Si quelqu'un à la solution ça serait avec grand plaisir.

Voila, j'espère que ce petit tuto t'aura permis d'avancer

Cordialement

Link to comment
Share on other sites

Moi, j'ai fait autrement après est ce plus simple ou plus complexe.
Même principe que pour un site vitrine.
J'ai créer différents css et si la catégorie est 1 le css à charger est global1.css
Si la catégorie est 2 le css est global2.css etc...

Si c'est une autre catégorie, je renvoi vers la 1.

Link to comment
Share on other sites

Moi, j'ai fait autrement après est ce plus simple ou plus complexe.
Même principe que po.....


Hum mais pourquoi n'y ais-je pas pensé du tout.... :/

Pouvez-vous me préciser où appliquer cette solution ? svp

Merci bien

Cordialement
Link to comment
Share on other sites

Bonsoir

j'ai contourné le problème en ne gardant qu'un seul fichier category et en jouant avec les CSS pour avoir trois présentations différentes par niveaux de catégories et sous catégories

dans mon fichier category.tpl je récupère l'ID de la catégorie où je me trouve en ajoutant "_{$category->id}" à mes class et/ou id

...
...
...
Link to comment
Share on other sites

L'explication plus précise :

Dans header.php

J'ai rajouté

$category = new Category(intval(Tools::getValue('id_category')), intval($cookie->id_lang));

Pour récuperer la catégorie

/* Hooks are volontary out the initialize array (need those variables already assigned) */
$smarty->assign(array(
'HOOK_HEADER' => Module::hookExec('header'),
'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn'),
'HOOK_TOP' => Module::hookExec('top'),
'static_token' => Tools::getToken(false),
'token' => Tools::getToken(),
'priceDisplayPrecision' => _PS_PRICE_DISPLAY_PRECISION_,
'nav' => $nav,
'id_category' => intval($category->id),
'content_only' => intval(Tools::getValue('content_only'))
));

et ajouter aussi ici pour assigner.

et dans header.tpl

{if isset($css_files)}
{foreach from=$css_files key=css_uri item=media}
{if $id_category == '0'} <link href="{$css_uri}" rel="stylesheet" type="text/css" media="{$media}" />
{elseif $id_category=='2'}<link href="{$base_dir}themes/prestashop/css/global2.css" rel="stylesheet" type="text/css" media="{$media}" />
{elseif $id_category=='3'}<link href="{$base_dir}themes/prestashop/css/global3.css" rel="stylesheet" type="text/css" media="{$media}" />
{elseif $id_category=='4'}<link href="{$base_dir}themes/prestashop/css/global4.css" rel="stylesheet" type="text/css" media="{$media}" />
{elseif $id_category=='5'}<link href="{$base_dir}themes/prestashop/css/global5.css" rel="stylesheet" type="text/css" media="{$media}" />
{elseif $id_category=='6'}<link href="{$base_dir}themes/prestashop/css/global6.css" rel="stylesheet" type="text/css" media="{$media}" />
{else}<link href="{$css_uri}" rel="stylesheet" type="text/css" media="{$media}" />{/if}

{/foreach}
{/if}


a la place de

{if isset($css_files)}
{foreach from=$css_files key=css_uri item=media}
<link href="{$css_uri}" rel="stylesheet" type="text/css" media="{$media}" />
{/foreach}
{/if}

Ensuite il faut créer les différents global1.css, 2, 3 etc..

Voila pour l'explication ;-)

Link to comment
Share on other sites

  • 3 weeks later...

bonjour à tous.
ma demande est plus basique, pour autant je ne sais pas le faire......
j'aimerais simplement changer le header (dans mon cas un swf) pour chaque catégorie, et garder le header principal pour la page d'accueil.
qui saurait me dire comment faire?
A+

Link to comment
Share on other sites

  • 1 month later...
  • 3 months later...

Bonjour,

Si ca peut vous intéresser j'ai fait sa pour afficher une template en fonction d'une catégorie :

define('__PS_BASE_URI__', '/');
switch ($_GET['id_category']) {
// CONDITIONS POUR AFFICHER UNE TEMPLATE SPECIFIQUE EN FONCTION D'UNE CATEGORIE :
// BOUTIQUE SECURITE INCENDIE :
// CATEGORIE MERE :
case '10000050':
// SOUS CATEGORIES :
case '10000057':
case '10000139':
case '10000095':
case '10000089':
case '10000081':
case '10000094':
case '10000055':
case '10000058':
case '100000144':
case '10000054':
case '10000088':
define('_THEME_NAME_', 'securite_incendie');
break;
// FIN BOUTIQUE SECURITE INCENDIE :
// FIN CONDITIONS POUR AFFICHER UNE TEMPLATE SPECIFIQUE EN FONCTION D'UNE CATEGORIE :
// SI AUCUNE CONDITION AFFICHER LA TEMPLATE PAR DEFAULT
default:
define('_THEME_NAME_', 'prestashop');
}

Link to comment
Share on other sites

  • 4 weeks later...

Bonjour,
Je recherche aussi cette fonction, et ta solution prestamodules.net me parait très bien. Malheureusement lorsque j'insère ton code dans le fichier header.tpl je n'ai plus rien à l'écran !
Voici mon code :

{if isset($css_files)} {foreach from=$css_files key=css_uri item=media}
   {if $id_category '0'}
   <link href="{$css_uri}" rel="stylesheet" type="text/css" media="{$media}" />
   {elseif $id_category'2'}<link href="{$base_dir}themes/prestashop/css/global.css" rel="stylesheet" type="text/css" media="{$media}" />
{else}<link href="{$css_uri}" rel="stylesheet" type="text/css" media="{$media}" />{/if}
{/foreach} {/if} 



Je suis en local, c'est peut-etre cela ?

Merci

Link to comment
Share on other sites

Bonjour,
Je recherche aussi cette fonction, et ta solution prestamodules.net me parait très bien. Malheureusement lorsque j'insère ton code dans le fichier header.tpl je n'ai plus rien à l'écran !
Voici mon code :
{if isset($css_files)} {foreach from=$css_files key=css_uri item=media}
   {if $id_category '0'}
   <link href="{$css_uri}" rel="stylesheet" type="text/css" media="{$media}" />
   {elseif $id_category'2'}<link href="{$base_dir}themes/prestashop/css/global.css" rel="stylesheet" type="text/css" media="{$media}" />
{else}<link href="{$css_uri}" rel="stylesheet" type="text/css" media="{$media}" />{/if}
{/foreach} {/if} 



Je suis en local, c'est peut-etre cela ?

Merci



Au final j'ai pris la solution de success3 ! ça marche nikel ! merci beaucoup !
Link to comment
Share on other sites

  • 2 years later...

Bonjour,

 

Je cherche aussi à avoir un thème différents par catégories, ne trouvant pas de solutions adéquates je me suis penché sur le multi-boutique de prestashop ... mais ça impose pas mal de contraintes ...

 

En cherchant un peu je suis donc arrivé sur votre fil de discution mais il date de 2011 et je me demande si aujourd'hui il n'y à pas de solutions plus simples pour faire cela, sans toucher au code de prestashop ...

 

Je vous remercie par avance pour vos réponses

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...