2015-02-13 5 views
3

Есть ли способ добавить таблицы стилей в заголовок после включения файла заголовка? Скажем, у нас есть этот код:PHP Добавление таблиц стилей в заголовок

class content { 
    public $stylesheets = array(); 

    public function addStylesheets($stylesheets) 
    { 
     if(!empty($stylesheets)) 
     { 
      if(!is_array($stylesheets)) 
       $stylesheets = array($stylesheets); 

      $this->stylesheets = array_merge($this->stylesheets, $stylesheets); 
     } 
    } 

    public function getStylesheets() 
    { 
     $response = ''; 

     foreach($this->stylesheets as $stylesheet) 
      $response .= '<link rel="stylesheet" type="text/css" href="' . $stylesheet . '" />' . Chr(13); 

     return $response; 
    } 
} 

И этот заголовок:

<html> 
<head> 
    <title>Title</title> 
    <link rel="stylesheet" type="text/css" href="default.css" /> 
    <?php 
     print($content->getStylesheets()); 
    ?> 
</head> 

<bod... 

А потом в файле я хочу добавить таблицы стилей, как это:

$content->addStylesheets(array('home.css', 'slider.css')); 

Может кто-то дать мне пример того, как это сделать?

+1

Хорошей практикой является отделить html от php, вы можете использовать шаблоны двигатель, как smarty или веточка. Но если вы не хотите его использовать, тогда сгенерируйте свой html в конце, сначала выполните ваш php-код, а затем визуализируйте html. Итак, сначала 'if (something) {$ content-> addStyleSheet ($ style)} ... ... (некоторый другой код) ... echo $ myTemplate;' где $ myTemplate содержит ваш сайт – szapio

ответ

0

Последний код html всегда создается в конце. Вот пример, как перейти к чистым php/html. Ваш index.php может выглядеть следующим образом:

<?php 

// ... 

// Define the stylesheets to use 
$content = new content(); 
$content->addStylesheets(array('home.css', 'slider.css')); 

// ... 

// Print template at the end 
ob_start(); 
include 'your_html_template.php'; 
print ob_get_clean(); 

your_html_template.php является файл шаблона, как показано в этом вопросе.


Вы можете определить переменные перед выполнением шаблона, чтобы иметь более четкое разделение кода PHP и HTML. Тогда index.php может выглядеть следующим образом:

<?php 

// ... 

// Define the stylesheets to use 
$content = new content(); 
$content->addStylesheets(array('home.css', 'slider.css')); 
$htmlStyleHeaderTags = $content->getStylesheets(); // Define variable with html header tags 

// ... 

// Print template at the end 
ob_start(); 
include 'your_html_template.php'; 
print ob_get_clean(); 

И тогда вы можете использовать переменную $htmlStyleHeaderTags в шаблоне:

<html> 
<head> 
    <title>Title</title> 
    <link rel="stylesheet" type="text/css" href="default.css" /> 
    <?php print $htmlStyleHeaderTags; ?> 
</head> 

<bod... 
0

Как @szapio уже грустно, она имеет больше смысла строить HTML в самом конце.

Во всяком случае, «грязный» решение было бы взломать ваш DOM с JQuery, поставив следующее перед </body> в тег (будучи JQuery включен в <head>):

<script> 
$(document).ready(function() { 
    $('head').append('<link rel="stylesheet" href="test.css" />'); 
}); 
</script> 

Вы действительно не должны подумайте об этом, потому что CSS-файл будет загружен после всего остального, что означает, что вы увидите элементы без элементов, пока файл CSS еще не загружен ...

Смежные вопросы