Проблема.Альтернативный файл стилей

Проблема.Альтернативный файл стилей

#16 7 декабря 2014 в 21:56


solitario84, странно, а какая разница, как подключать? Тут проблем не должно быть. Может, что-то не так со скриптом, отвечающим за смену подключаемой каскадной таблицы? Можете код скрипта привести?

Вячеслав Леонов

  1. function setActiveStyleSheet(title) {
  2. var i, a, main;
  3. for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
  4. if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
  5. a.disabled = true;
  6. if(a.getAttribute("title") == title) a.disabled = false;
  7. }
  8. }
  9. }
  10.  
  11. function getActiveStyleSheet() {
  12. var i, a;
  13. for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
  14. if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  15. }
  16. return null;
  17. }
  18.  
  19. function getPreferredStyleSheet() {
  20. var i, a;
  21. for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
  22. if(a.getAttribute("rel").indexOf("style") != -1
  23. && a.getAttribute("rel").indexOf("alt") == -1
  24. && a.getAttribute("title")
  25. ) return a.getAttribute("title");
  26. }
  27. return null;
  28. }
  29.  
  30. function createCookie(name,value,days) {
  31. if (days) {
  32. var date = new Date();
  33. date.setTime(date.getTime()+(days*24*60*60*1000));
  34. var expires = "; expires="+date.toGMTString();
  35. }
  36. else expires = "";
  37. document.cookie = name+"="+value+expires+"; path=/";
  38. }
  39.  
  40. function readCookie(name) {
  41. var nameEQ = name + "=";
  42. var ca = document.cookie.split(';');
  43. for(var i=0;i < ca.length;i++) {
  44. var c = ca[i];
  45. while (c.charAt(0)==' ') c = c.substring(1,c.length);
  46. if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  47. }
  48. return null;
  49. }
  50.  
  51. window.onload = function(e) {
  52. var cookie = readCookie("style");
  53. var title = cookie ? cookie : getPreferredStyleSheet();
  54. setActiveStyleSheet(title);
  55. }
  56.  
  57. window.onunload = function(e) {
  58. var title = getActiveStyleSheet();
  59. createCookie("style", title, 365);
  60. }
  61.  
  62. var cookie = readCookie("style");
  63. var title = cookie ? cookie : getPreferredStyleSheet();
  64. setActiveStyleSheet(title);
вроде все с ним в порядке, уже мозг кипит.не пойму в чем проблема.На главной он то отрабатывает
#17 7 декабря 2014 в 23:14
Любой код добавленный в маин.тпл должен отображаться на всех страницах ( исключая страницы ошибок)
#18 7 декабря 2014 в 23:23


Любой код добавленный в маин.тпл должен отображаться на всех страницах ( исключая страницы ошибок)

Atid — Gorec

теоретически… а на практике, я вижу совсем другое… кстати, работает не только на главной, но и во всех типах контента на коневой категории, при заходе в подкатегорию, стили слетают… например: статьи-стили есть, астрономия-стилей нет…
#19 7 декабря 2014 в 23:59
Дайте ссылку на ваш сайт
#20 8 декабря 2014 в 00:02

при заходе в подкатегорию, стили слетают

если так подключаете:
  1. <link rel="alternate stylesheet" href="templates/default/css/black_style.css" media="screen" title="black" />
то слеш перед templates добавьте
#21 8 декабря 2014 в 00:26


при заходе в подкатегорию, стили слетают

если так подключаете:
то слеш перед templates добавьте

Олег Васильевич я
хм… все так просто… спасибо, работает… а почему
  1. <?php $this->addMainCSS("templates/{$this->name}/css/black.css"); ?>
такое подключение работает без слеша?
#22 8 декабря 2014 в 00:44

а почему такое подключение работает без слеша?

А таким знатокам как мы с вами надо знать почему? laugh
Нам надо знать как лечить...
если правильно понимаю, то система формирует в этом случае абсолютный путь к файлу
#23 8 декабря 2014 в 00:51


а почему такое подключение работает без слеша?

А таким знатокам как мы с вами надо знать почему? laugh
Нам надо знать как лечить...
если правильно понимаю, то система формирует в этом случае абсолютный путь к файлу

Олег Васильевич я

вот… и я думаю что правильней было бы докапаться до этого "->addMainCSS", но без разработчиков здесь не обойтись по ходу… может отзовутся, немного подожду… а так в принципе, работает, вам спасибо!..
#24 8 декабря 2014 в 20:55
Работает потому что в конструкторе конфига
  1.  
  2. public function __construct($cfg_file='config.php'){
  3. $this->data = $this->load($cfg_file);
  4. $this->set('cfg_time_zone', $this->data['time_zone']);
  5. if (isset($_SESSION['user']['time_zone'])){
  6. $this->data['time_zone'] = $_SESSION['user']['time_zone'];
  7. }
  8.  
  9. $this->set('root_path', ROOT . $this->root);
  10. $this->set('system_path', $this->root_path . 'system/');
  11. $this->set('upload_path', ROOT . $this->upload_root);
  12. $this->set('cache_path', ROOT . $this->cache_root);
  13.  
  14. }
Эта строка
  1. $this->set('root_path', ROOT . $this->root);
Будет устанавливать root_path из константы ROOT=$_SERVER['DOCUMENT_ROOT'], и ключа массива 'root' (файла config.php ) содержащего этот искомый слеш
  1. 'root' => '/',
В итоге при использовании
  1. <?php $this->addMainCSS("templates/{$this->name}/css/***.css"); ?>
перед template слеш ненужен, так как он уже определен в
  1. $this->path = $config->root_path
Тоесть root_path содержит путь к корневой директории сервера + слеш который определен в файле конфигурации.
#25 8 декабря 2014 в 22:20


Работает потому что в конструкторе конфига

  1.  
  2. public function __construct($cfg_file='config.php'){
  3. $this->data = $this->load($cfg_file);
  4. $this->set('cfg_time_zone', $this->data['time_zone']);
  5. if (isset($_SESSION['user']['time_zone'])){
  6. $this->data['time_zone'] = $_SESSION['user']['time_zone'];
  7. }
  8.  
  9. $this->set('root_path', ROOT . $this->root);
  10. $this->set('system_path', $this->root_path . 'system/');
  11. $this->set('upload_path', ROOT . $this->upload_root);
  12. $this->set('cache_path', ROOT . $this->cache_root);
  13.  
  14. }
Эта строка
  1. $this->set('root_path', ROOT . $this->root);
Будет устанавливать root_path из константы ROOT=$_SERVER['DOCUMENT_ROOT'], и ключа массива 'root' (файла config.php ) содержащего этот искомый слеш
  1. 'root' => '/',
В итоге при использовании перед template слеш ненужен, так как он уже определен в
  1. $this->path = $config->root_path
Тоесть root_path содержит путь к корневой директории сервера + слеш который определен в файле конфигурации.

Геннадий Иванович

о да!.. большое спасибо за доходчивое объяснение, я на секунды даже забыл что ни фига не понимаю в php и показалось что я что то понял… rofl
может вы подскажите правильным ли будет такое подключение
  1. <link rel="alternate stylesheet" href="/templates/default/css/black_style.css" media="screen" title="black" />
применимо к instantcms 2/// или нужно как то иначе...?
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.