#php
#php
Вопрос:
Я хочу динамически передавать встроенный CSS в тег head файла php, и я пытался достичь этого с помощью 2 функций.
В файле head.php
<?php include 'process.php'; ?>
<head>
<?php cssInline(); ?>
</head>
В файле process.php. Это всего лишь моя концептуальная логика того, что ожидается.
function cssInline() {
echo '<style>'.getInlineCss().'</style>';
}
function getInlineCss($css) {
return $css;
}
Запуск процесса в файлеfoot.php. Это условный вызов для изменения поля при установке определенного объекта.
<?php
if( isset($player) )
getInlineCss('body {margin-bottom: 60px;}');
?>
Ожидаемый результат
<head>
<style>body {margin-bottom: 60px;}</style>
</head>
Все эти методы наряду с многочисленными другими попытками не привели к результату. Я даже пробовал DOMDocument, но возникла проблема со временем загрузки страницы.
Класс не используется.
Комментарии:
1.
echo '<style>'.getInlineCss().'</style>';
— для возвратаgetInlineCss()
требуется параметр$css
, вы вызываете его без параметра.2. @kerbholz Я в курсе этого, но что бы я поместил в качестве параметра, чтобы получить значение из foot.php ? Если используется переменная, PHP жалуется, что ожидается хотя бы один параметр. Я это сделал.
Ответ №1:
Я определил следующий метод, который успешно обрабатывает встроенный CSS по желанию
class DocumentHead
{
public $cssrules = [];
public function add($cssrule)
{
$this->cssrules[] = htmlentities($cssrule);
}
public function getInline()
{
$n = "n";
return '<style>'.$n.implode($n, $this->cssrules).$n.'</style>';
}
}
Установите класс в качестве переменной
$css = new DocumentHead;
Выводите записи CSS в тегах head как отправленные из других файлов
<head>
<?php echo $css->getInline(); ?>
</head>
Установите встроенные правила CSS из других файлов
$css->add('.footer {color: #111111;}');
$css->add('body {background: #ffcc00; font-family: verdana;}');
Результат
<head>
<style>
.footer {color: #111111;}
body {background: #ffcc00; font-family: verdana;}
</style>
</head>
Обновить:
Только что понял, что средство установки правил css должно быть объявлено перед экземпляром средства получения, иначе результат равен null, и я еще не определил решение.
Ответ №2:
Вы должны передать параметр в cssInline.
function cssInline($cssString) {
echo '<style>'.getInlineCss($cssString).'</style>';
}
function getInlineCss($css) {
return $css;
}
Комментарии:
1. Откуда берется значение для $cssString?
Ответ №3:
Потому что ваш вызов функции:
echo '<style>'.getInlineCss().'</style>';
Передает пустой аргумент.
Переданный аргумент (CSS) нигде не сохраняется.
Вы можете определить класс и сохранить его в переменной класса.
Вы пишете две функции.
Но ваша желаемая функциональность будет работать только тогда, когда они являются классовыми методами одного класса.
Вы можете использовать одну функцию, например:
function cssInline($css) {
return '<style>'. $css .'</style>';
}
И вызвать его с помощью:
<head>
<?php echo cssInline(); ?>
</head>
Опять же, вы должны return
вместо echo
, как в случае echo
, у вас нет никакого контроля над выводом функции.
Вы просто вызываете функцию, и вывод печатается.
Комментарии:
1. Single function был первым методом, который я попробовал, и он не сработал, потому что PHP выдает ошибку «слишком мало аргументов». Сейчас класс не используется. Вы хотите сказать, что процесс будет работать только с классом?