Как передать встроенный css из функции в одном файле в функцию в тегах head в другом файле

#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 выдает ошибку «слишком мало аргументов». Сейчас класс не используется. Вы хотите сказать, что процесс будет работать только с классом?