Changer le css en fonction de la catégorie

Messagepar j4k » Lun 28 Nov 2005, 17:24

Voila comment intégrer différents css en fonction de la catégorie.

A mettre dans la page template.php à la place de l'appel du css
Code: Tout sélectionner
<link rel="stylesheet" type="text/css" href="templates/chrome/stylesheet.css" media="screen" />

remplacer par :
Code: Tout sélectionner
$current_template_query = tep_db_query("SELECT template_name from ".TABLE_TEMPLATE );
$current_template = tep_db_fetch_array($current_template_query);

$dossier_css = DIR_WS_TEMPLATES . $current_template['template_name'];
if (isset($current_category_id)) {
$css_files = '/stylesheet_cat'. $current_category_id . '.css';
 if (file_exists($dossier_css . $css_files) == True) {
 echo '<link rel="stylesheet" type="text/css" href="'. $dossier_css . $css_files .' ">';
 } else {
  echo '<link rel="stylesheet" type="text/css" href="'. $dossier_css .'/stylesheet.css">';
  }
}

Explications : il vérifie si dans le dossier du template courant il existe des fichier stylesheet_cat1.css (par ex pour la catégorie 1) et si oui, il utilise ce template.

il suffit donc pour skinner une catégorie différement du reste du site de créer un stylesheet_catxxx.css pour qu'il soit pris en compte.

on pourra également voir une version qui conserve le stylesheet.css et qui en ajoute un autre.

Cette version prend en compte la catégorie en cours et pas la catégorie parente. (peut-être il serait bien de faire une version avec catégorie parente) ex: pour cat 2_5 il prend la 5 et pas la 2

si vous souhaitez faire des tests ou apporter des améliorations, normalement il n'y a rien à configurer, il prends les variables dans la base et dans la configure si tout est bien fait ;) .

On ajoutera p-e cette fonction dans les templates par défaut.
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar sidarus » Ven 16 Déc 2005, 16:50

[ToDo] à wikiser :D
sidarus
Membre très actif
 
Messages: 396
Inscription: Mar 03 Mai 2005, 23:34
Localisation: Geneva (CH)

Messagepar manmachine » Sam 17 Déc 2005, 13:36

Attention ! c'est pas du tout optimisé tout ca :o.

On peut faire beaucoup plus simple.

Code: Tout sélectionner
$current_template_query = tep_db_query("SELECT template_name from ".TABLE_TEMPLATE );
$current_template = tep_db_fetch_array($current_template_query);

on à déjà cette info dans application_top :

Code: Tout sélectionner
// set the template
  $template = oscss_get_template() ;

de plus si on est sur un template pas besoin de cherche son dossier puisqu'on sait déjà ou on ce trouve !

un template = un dossier.


de plus categories_id est toujours initialisé , il faut juste verifier que sa valeur n'est pas à 0
toujours dans application_top
Code: Tout sélectionner
  if (tep_not_null($cPath)) {
    $cPath_array = tep_parse_category_path($cPath);
    $cPath = implode('_', $cPath_array);
    $current_category_id = $cPath_array[(sizeof($cPath_array)-1)];
  } else {
    $current_category_id = 0;
  }

ce qui nous donne pour chrome par exemple :

Code: Tout sélectionner
$default_css_files = 'templates/chrome/stylesheet.css';
$categorie_css_files = 'templates/chrome/stylesheet_cat'. $current_category_id . '.css';

if ( $current_category_id != 0 &&  file_exists($categorie_css_files) ) {
   
  echo '<link rel="stylesheet" type="text/css" href="' . $categorie_css_files .' ">';

} else {
     
  echo '<link rel="stylesheet" type="text/css" href="'. $default_css_files . ">';

}

voila un script optimisé, pas de requete SQL inutile et un minimum de tests de variable.


Je vais en faire une fonction sur la version finale pour rendre le truc encore plus claire dans le template.
manmachine
Membre actif
 
Messages: 76
Inscription: Mer 13 Fév 2008, 21:51

Messagepar j4k » Lun 19 Déc 2005, 13:02

l'idée c'était d'avoir un code générique sans avoir à l'éditer selon le template et ou il se trouve.

ça devient donc pour n'importe quel template :
Code: Tout sélectionner
$default_css_files = 'templates/'.$template.'/stylesheet.css';
$categorie_css_files = 'templates/'.$template.'/stylesheet_cat'. $current_category_id . '.css';

if ( $current_category_id != 0 &&  file_exists($categorie_css_files) ) { 
 
  echo '<link rel="stylesheet" type="text/css" href="' . $categorie_css_files .' ">';

} else {     

  echo '<link rel="stylesheet" type="text/css" href="'. $default_css_files .' ">';
}
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar j4k » Lun 19 Déc 2005, 13:06

par contre, il prend par défaut la variable de la sous-rubrique fille

par exemple dans la catégorie 5_25, il va utiliser le template stylesheet_25.css

il faudrait aussi faire une version ou il utilise la variable de la catégorie mère stylesheet_5.css

mais au risque de me lancer dans une requête inutile alors que cette variable doit déjà exister quelque part, je laisse en stand-by cycling mode ;)
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar sidarus » Lun 31 Juil 2006, 14:05

C'est à jour dans le wiki / repository ?
sidarus
Membre très actif
 
Messages: 396
Inscription: Mar 03 Mai 2005, 23:34
Localisation: Geneva (CH)


Retourner vers Design

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron