Динамический CSS и Javascript - PullRequest
       21

Динамический CSS и Javascript

0 голосов
/ 14 сентября 2009

Как создать динамический CSS и JavaScript на лету (используя PHP). Это необходимо сделать, так как разные страницы иногда имеют разный набор элементов, поэтому перенос и отправка большого CSS / JS каждый раз были бы излишними. И почему на многих сайтах есть такие теги ссылок:

<link rel='stylesheet' type='text/css' href='css/style.css?pg_id=43&post=62'>

Как CSS узнает параметры GET?

Поскольку для этого может потребоваться перезапись URL-адреса или использование функции заголовка, предоставьте короткие примеры

Ответы [ 3 ]

3 голосов
/ 14 сентября 2009

Итак, здесь есть несколько разных подходов. Во-первых, если у вас есть доступ к файлам виртуального хоста apache, вы можете настроить CSS для чтения интерпретатором php. Я никогда не делал этого и точно не рекомендовал бы это, но пример:

<VirtualHost *:80>
  AddType application/x-httpd-php .css
</VirtualHost>

Это также можно сделать в вашем файле .htaccess.

Кроме того, вы можете сделать ссылку, как

<link rel='stylesheet' type='text/css' href='css/style.php?pg_id=43&post=62'>

и поставить

<?php header("Content-type: text/css"); ?>

в качестве первой строки.

Я никогда не рассматривал технику Виниция, но я не сомневаюсь, что у нее есть свой набор преимуществ и недостатков.

PS - иногда переменные GET используются для целей кэширования (или фактически для предотвращения кэширования, добавляя текущую метку времени unix к ссылке css с помощью php, например

<link href="style.css?<?php echo time()" type="text/css" rel="stylesheet" />
2 голосов
/ 14 сентября 2009

Запрос к файлу .css или .js может быть перенаправлен в скрипт PHP с использованием, например, .htaccess (в Apache), поэтому даже если атрибут src равен "style.css", это на самом деле PHP скрипт, который отвечает пользователю.

1 голос
/ 14 сентября 2009

Ваши файлы CSS и Javascript кэшируются, я бы не рекомендовал обслуживать различные файлы таблиц стилей / js, если их размер не превышает 200 КБ.

И да, вы можете ссылаться на любую страницу на стороне сервера с параметрами (.php или любым другим расширением), если она возвращает правильный тип содержимого для этого файла.

Sidenote: Обычно, если у вас есть параметры и вы динамически обслуживаете файлы таким образом, я считаю, что они не будут автоматически кэшироваться, если вы не настроите это для этого.

Простой пример:

<link rel="stylesheet" type="text/css" href="/css.php?color=wide-red">

<?php
header('Content-Type', 'text/css; charset=utf-8');
$colorScheme = (string)$_GET['color'];

switch ( $colorScheme ) {
    case 'wide-red':
       $bgColor = 'c0c0c0';
       $fgColor = 'ffffff';
       $width = '1280px';
    break;

    case 'normal-gray':
       $bgColor = '333333';
       $fgColor = 'ffffff';
       $width = '960px';
    }
    break;

}
?>
body { 
   background:<?php echo $bgColor;?>;
   color:<?php echo $fgColor;?>;
   width:<?php echo $width;?>;
}

Вы можете использовать echo, вы можете использовать систему шаблонов, вы можете извлекать другие css файлы с помощью file_get_contents, главное, вам нужно отправить правильный Content-Type, получить правильные параметры и иметь запасной вариант по умолчанию, если параметров нет даны.

...