Динамический CSS и Javascript
-
07-07-2019 - |
Вопрос
Как создать динамический CSS и JavaScript на лету (с использованием PHP). Это необходимо сделать, поскольку разные страницы иногда имеют разный набор элементов, поэтому перенос и отправка большого CSS / JS каждый раз будет излишним. И почему на многих сайтах есть такие теги ссылок:
<link rel='stylesheet' type='text/css' href='css/style.css?pg_id=43&post=62'>
Как CSS узнает параметры GET?
Поскольку для этого может потребоваться перезапись URL-адреса или использование функции заголовка, приведите краткие примеры
Решение
Итак, здесь есть несколько разных подходов. Во-первых, если у вас есть доступ к файлам виртуального хоста 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" />
Другие советы
Запрос к файлу .css или .js может быть перенаправлен в скрипт PHP с использованием, например, .htaccess (в Apache), поэтому даже если атрибут src равен " style.css " ;, это на самом деле PHP-скрипт, который отвечает пользователю.
Ваши файлы CSS и Javascript кэшируются, я бы не рекомендовал обслуживать файлы различных таблиц стилей / js, если их размер не превышает > 200 КБ. Р>
И да, вы можете ссылаться на любую серверную страницу с параметрами (.php или любым другим расширением), если она возвращает правильный Content-Type для этого файла. Р>
Примечание. Обычно, если у вас есть параметры и вы динамически обслуживаете файлы таким образом, я считаю, что они не будут автоматически кэшироваться, если вы не настроите это для этого.
Простой пример:
<link rel="stylesheet" type="text/css" href="/css.php?color=wide-red">
<?php
header('Content-Type', 'text/css; charset=utf-8');
$colorScheme = (string) Ваши файлы CSS и Javascript кэшируются, я бы не рекомендовал обслуживать файлы различных таблиц стилей / js, если их размер не превышает > 200 КБ. Р>
И да, вы можете ссылаться на любую серверную страницу с параметрами (.php или любым другим расширением), если она возвращает правильный Content-Type для этого файла. Р>
Примечание. Обычно, если у вас есть параметры и вы динамически обслуживаете файлы таким образом, я считаю, что они не будут автоматически кэшироваться, если вы не настроите это для этого.
Простой пример:
<*>
Вы можете использовать echo, вы можете использовать систему шаблонов, вы можете извлекать другие css-файлы с помощью file_get_contents, главное, вам нужно отправить правильный Content-Type, получить правильные параметры и иметь запасной вариант по умолчанию, если параметров нет даны.
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, получить правильные параметры и иметь запасной вариант по умолчанию, если параметров нет даны.