Camille Frisch Posted September 4, 2010 Share Posted September 4, 2010 BonjourN'ayant rien trouvé pour appliquer différents templates en fonction des pages du site, je vous propose un petit mod qui vous permettera d'afficher un template en fonction de l'url de la page.Avant de commencer, sauvegardez votre fichier settings.inc.php !Dans le fichier [admin]/functions.phpremplacer la fonction rewriteSettingsFile par : /** * Generate a new settings file, only transmitted parameters are updated * * @param string $baseUri Base URI * @param string $theme Theme name (eg. default) * @param array $arrayDB Parameters in order to connect to database */ function rewriteSettingsFile($baseUri = NULL, $theme = NULL, $arrayDB = NULL) { $defines = array(); $defines['__PS_BASE_URI__'] = !is_null($baseUri) ? $baseUri : __PS_BASE_URI__; //$defines['_THEME_NAME_'] = $theme ? $theme : _THEME_NAME_; $defines['_THEME_DEFAULT_NAME_'] = $theme ? $theme : _THEME_DEFAULT_NAME_; $defines['_DB_NAME_'] = (($arrayDB AND isset($arrayDB['_DB_NAME_'])) ? $arrayDB['_DB_NAME_'] : _DB_NAME_); $defines['_DB_SERVER_'] = (($arrayDB AND isset($arrayDB['_DB_SERVER_'])) ? $arrayDB['_DB_SERVER_'] : _DB_SERVER_); $defines['_DB_USER_'] = (($arrayDB AND isset($arrayDB['_DB_USER_'])) ? $arrayDB['_DB_USER_'] : _DB_USER_); $defines['_DB_PREFIX_'] = (($arrayDB AND isset($arrayDB['_DB_PREFIX_'])) ? $arrayDB['_DB_PREFIX_'] : _DB_PREFIX_); $defines['_DB_PASSWD_'] = (($arrayDB AND isset($arrayDB['_DB_PASSWD_'])) ? $arrayDB['_DB_PASSWD_'] : _DB_PASSWD_); $defines['_DB_TYPE_'] = (($arrayDB AND isset($arrayDB['_DB_TYPE_'])) ? $arrayDB['_DB_TYPE_'] : _DB_TYPE_); $defines['_COOKIE_KEY_'] = addslashes(_COOKIE_KEY_); $defines['_COOKIE_IV_'] = addslashes(_COOKIE_IV_); $defines['_PS_VERSION_'] = addslashes(_PS_VERSION_); $content = "<?php\n\n"; foreach ($defines as $k => $value) $content .= 'define(\''.$k.'\', \''.addslashes($value).'\');'."\n"; $content .= "include_once('settings_dynamic_theme.inc.php');"; $content .= "\n?>"; if ($fd = @fopen(PS_ADMIN_DIR.'/../config/settings.inc.php', 'w')) { fwrite($fd, $content); fclose($fd); return true; } return false; } Cela a pour but d'empecher presta de reecrire la constante _THEME_NAME_ (dans settings.inc.php)Nous allons donc pouvoir utiliser nos propres règles pour définir le template :Créer un fichier "settings_dynamic_theme.inc.php" dans le dossier config/ : <?php /* Prestashop Dynamic template v1.0.0 Camille Frisch aka _mika_ www.mikarama.fr */ // read url function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } // search string in url function searchString($string, $container) { if(strstr($container,$string)) { return $string; } else { return false; } } /* define template/page couples search for template in url, return result */ function setTemplate() { // set templates list $templatesArr = array("prestashop-cv" => "prestashop-cv", "order-custom-flash" => "prestashop-cv", "isant-v2" => "isant-v2"); // search for template name in url // return template name if true, else defaut template foreach ($templatesArr as $key => $value) { $result = searchString($key, curPageURL() ); if( $result )return $value; } // else return _THEME_DEFAULT_NAME_; } // define template define('_THEME_NAME_', setTemplate()); ?> Le code est assez simple ... définissez votre tableau $templatesArr comme suit :$templatesArr = array("prestashop-cv" => "prestashop-cv", "order-custom-flash" => "prestashop-cv", "isant-v2" => "isant-v2");ou les valeurs sont des nom de templates.Quand aux clés, c'est la qu'est ma petite astuce : avec l'url rewriting activé, insérer vos 'clés' dans l'url de la page.Si la fonction 'match' une clé dans le tableau, sont template associé sera affiché.J'epsere avoir été clair ... N'hesitez pas à me posez des questions si ce n'est pas le cas.Cela fonctionne pour des themes avec le meme nombre de colonnes. Je n'ai pas encore exploré les possibiltés d'agir sur les block ...voici une petite démo : http://www.configurateurvisuel.fr/ > template par défauthttp://www.configurateurvisuel.fr/52-casquettes-et-couvre-chefs-prestashop-cv > template prestashopfaites moi part de vos avis !mika settings_dynamic_theme.inc.php functions.php Link to comment Share on other sites More sharing options...
jolvil Posted September 4, 2010 Share Posted September 4, 2010 On peut avoir des urls differentes avec un contenu similaire (seul le template change), pas tres bon d'un point de vu referencement (duplicate).Le module Croll Custom Css ne convenait pas ? http://www.prestashop.com/forums/viewthread/66978 Link to comment Share on other sites More sharing options...
Camille Frisch Posted September 4, 2010 Author Share Posted September 4, 2010 Le module de Beve Croll SEO Fixer devrait justement s'exprimer pleinement dans ce cas, et eviter les duplicate content.Pour ce qui est des modules agissants sur le css, non ce n'est pas ce que je cherchais a faire. La finalité n'est pas d'adapter un template suivant les différentes pages, mais de la changer (pour un autre).css, tpl, img, etc inclusMerci pour ton commentaire !mika Link to comment Share on other sites More sharing options...
jbjb Posted September 6, 2010 Share Posted September 6, 2010 J'ai moi même "bidouillé" pour avoir une solution similaire.J'ai modifié le settings.inc.php et mit des conditions (analyse d'url) au niveau du define('_THEME_NAME_', 'prestashop');. C'est moins beau mais bon ... ^^Par contre je ne sais pas si tu as remarqué, mais l'url rewriting avec le module "Ventes croisées v0.1" ne marche pas bien.Normalement il y a un 'dossier' représentant la catégorie, par exemple : "/musique-ipods/" dans le cas des ipods.Mais les liens générés par la vente croisée n'affiche pas la catégorie !On se retrouve donc avec :http://maboutique.com/7-ipod-touch.htmlAu lieu de :http://maboutique.com/musique-ipods/7-ipod-touch.htmlHors je me base principalement sur ce fameux dossier pour appliquer les thèmes.As tu une solution à ce problème ?Est ce que tu sais si le module SEO règle ce problème ?http://www.prestastore.fr/referencement-seo/175-outils-dadministration-seo---referencement.html Link to comment Share on other sites More sharing options...
Camille Frisch Posted September 6, 2010 Author Share Posted September 6, 2010 Je t'avoue n'avoir jamais utilisé "ventes croisées", donc je serai bien incapable de t'aider Link to comment Share on other sites More sharing options...
jbjb Posted September 6, 2010 Share Posted September 6, 2010 Je t'avoue n'avoir jamais utilisé "ventes croisées", donc je serai bien incapable de t'aider Arf. Je vais continuer à chercher (j'ai contacter la team prestashop concernant ce problème et leur module SEO).Peut être qu'un autre module peut faire l'affaire, par exemple :http://www.prestastore.fr/fonctionnalites-front-office/212-fonctionnalites-front-office-vente-croisee.htmlSi je trouve une solution je la posterais ici Link to comment Share on other sites More sharing options...
Camille Frisch Posted September 6, 2010 Author Share Posted September 6, 2010 Si tu veux vraiment resoudre ce probleme tu ferais sans doute mieux de creer un sujet dédié.@+ Link to comment Share on other sites More sharing options...
jbjb Posted September 8, 2010 Share Posted September 8, 2010 Je cherche toujours a améliorer les choses.Le problème avec les scripts d'analyse url c'est que comme dans le tient, il peut y avoir des erreurs et ça ne s'applique pas aux sous caté :Les pageshttp://www.configurateurvisuel.fr/52-casquettes-et-couvre-chefs-prestashop-cvhttp://www.configurateurvisuel.fr/330-t-shirt-blanc-personnalise-135-g-m.htmln'ont pas le même thème alors qu'elles devraient.Penses tu qu'il y aurait moyen de récupérer la categorie courante directement via la variable globale $smarty à la manière du module blockcategory par exemple ? Et d'en suite modifier les variables définies par le fichier settings.inc.php à la volée?Ca serait suremetn plus "propre". Link to comment Share on other sites More sharing options...
Camille Frisch Posted September 8, 2010 Author Share Posted September 8, 2010 SalutLes 2 pages que tu cites n'ont pas le meme thème et c'est voulu : La detection se fait par le nom de la page, pas par la position ou l'arborescence dans la catalogue.si tu veux utiliser le meme theme sur les produits de la catégorie, renomme les en :http://www.configurateurvisuel.fr/330-t-shirt-blanc-personnalise-135-g-m-prestashop-cv.htmlIt's not a bug, it's a feature ! Link to comment Share on other sites More sharing options...
jbjb Posted September 8, 2010 Share Posted September 8, 2010 Ah j'avais mal compris Je pensais que le template s'appliquait aux sous catégories !Je sens que je vais travailler carrément sur un module qui permet d'appliquer des templates en fonction de la "catégorie mère" (niveau juste en dessous de "Accueil") et qui s'appliquera à toutes les sous catégories et tous le sous produits. Le tout sans passer par de l'analyse d'url. Link to comment Share on other sites More sharing options...
Camille Frisch Posted September 8, 2010 Author Share Posted September 8, 2010 Ce serait en effet une bonne implementation. A voir comment gerer les pages qui ne decoulent pas des catégories, comme le CMS, le panier ... Link to comment Share on other sites More sharing options...
negpsy Posted June 7, 2012 Share Posted June 7, 2012 (edited) Bonjour, Ma version : Prestashop 1.4.8.2 (en local) Url-rewriting activé. J'ai essayé mais ça ne fonctionne pas après avoir installé et activé le template "prestashop-christmas-2011" avec le theme installer. URL de test: http://127.0.0.1:8888/prestashop/?prestashop . rewriteSettingsFile dans fonction.php function rewriteSettingsFile($baseUrls = NULL, $theme = NULL, $arrayDB = NULL) { $defines = array(); $defines['__PS_BASE_URI__'] = ($baseUrls AND $baseUrls['__PS_BASE_URI__']) ? $baseUrls['__PS_BASE_URI__'] : __PS_BASE_URI__; $defines['_MEDIA_SERVER_1_'] = ($baseUrls AND isset($baseUrls['_MEDIA_SERVER_1_'])) ? $baseUrls['_MEDIA_SERVER_1_'] : _MEDIA_SERVER_1_; $defines['_MEDIA_SERVER_2_'] = ($baseUrls AND isset($baseUrls['_MEDIA_SERVER_2_'])) ? $baseUrls['_MEDIA_SERVER_2_'] : _MEDIA_SERVER_2_; $defines['_MEDIA_SERVER_3_'] = ($baseUrls AND isset($baseUrls['_MEDIA_SERVER_3_'])) ? $baseUrls['_MEDIA_SERVER_3_'] : _MEDIA_SERVER_3_; $defines['_PS_CACHING_SYSTEM_'] = _PS_CACHING_SYSTEM_; $defines['_PS_CACHE_ENABLED_'] = _PS_CACHE_ENABLED_; //$defines['_THEME_NAME_'] = $theme ? $theme : _THEME_NAME_; $defines['_THEME_DEFAULT_NAME_'] = $theme ? $theme : _THEME_DEFAULT_NAME_; $defines['_DB_NAME_'] = (($arrayDB AND isset($arrayDB['_DB_NAME_'])) ? $arrayDB['_DB_NAME_'] : _DB_NAME_); $defines['_MYSQL_ENGINE_'] = (($arrayDB AND isset($arrayDB['_MYSQL_ENGINE_'])) ? $arrayDB['_MYSQL_ENGINE_'] : _MYSQL_ENGINE_); $defines['_DB_SERVER_'] = (($arrayDB AND isset($arrayDB['_DB_SERVER_'])) ? $arrayDB['_DB_SERVER_'] : _DB_SERVER_); $defines['_DB_USER_'] = (($arrayDB AND isset($arrayDB['_DB_USER_'])) ? $arrayDB['_DB_USER_'] : _DB_USER_); $defines['_DB_PREFIX_'] = (($arrayDB AND isset($arrayDB['_DB_PREFIX_'])) ? $arrayDB['_DB_PREFIX_'] : _DB_PREFIX_); $defines['_DB_PASSWD_'] = (($arrayDB AND isset($arrayDB['_DB_PASSWD_'])) ? $arrayDB['_DB_PASSWD_'] : _DB_PASSWD_); $defines['_DB_TYPE_'] = (($arrayDB AND isset($arrayDB['_DB_TYPE_'])) ? $arrayDB['_DB_TYPE_'] : _DB_TYPE_); $defines['_COOKIE_KEY_'] = addslashes(_COOKIE_KEY_); $defines['_COOKIE_IV_'] = addslashes(_COOKIE_IV_); $defines['_PS_CREATION_DATE_'] = defined(_PS_CREATION_DATE_) ? _PS_CREATION_DATE_ : date('Y-m-d'); if (defined('_RIJNDAEL_KEY_')) $defines['_RIJNDAEL_KEY_'] = addslashes(_RIJNDAEL_KEY_); if (defined('_RIJNDAEL_IV_')) $defines['_RIJNDAEL_IV_'] = addslashes(_RIJNDAEL_IV_); $defines['_PS_VERSION_'] = addslashes(_PS_VERSION_); $content = "<?php\n\n"; foreach ($defines as $k => $value) $content .= 'define(\''.$k.'\', \''.addslashes($value).'\');'."\n"; $content .= "include_once('settings_dynamic_theme.inc.php');"; $content .= "\n?>"; if ($fd = @fopen(PS_ADMIN_DIR.'/../config/settings.inc.php', 'w')) { fwrite($fd, $content); fclose($fd); return true; } return false; } settings_dynamic_theme.inc.php <?php /* Prestashop Dynamic template v1.0.0 Camille Frisch aka _mika_ www.mikarama.fr */ // read url function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } // search string in url function searchString($string, $container) { if(strstr($container,$string)) { return $string; } else { return false; } } /* define template/page couples search for template in url, return result */ function setTemplate() { // set templates list $templatesArr = array("prestashop" => "prestashop", "prestashop-christmas-theme-2011" => "prestashop-christmas-theme-2011"); // search for template name in url // return template name if true, else defaut template foreach ($templatesArr as $key => $value) { $result = searchString($key, curPageURL() ); if( $result )return $value; } // else return _THEME_DEFAULT_NAME_; } // define template define('_THEME_NAME_', setTemplate()); ?> Edited June 7, 2012 by negpsy (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now