2015-05-12 4 views
-1

У меня есть несколько файлов с заголовком и колонтитул, скажем file1.php, file2.php и file3.phpДоверьте включают() для конкретного содержания с PHP

Эти файлы include() в файлы header.php и footer.php.

теперь концерн это ... Каждая страница должна загружать общий контент заголовка с определенными стилями CSS, но также и -специальный стиль для такой страницы. Это также происходит на нижнем колонтитуле: он загружает кучу скриптов для всех страниц, но конкретный скрипт для конкретной страницы.

Как я могу это достичь? Я, конечно, не хочу ставить конкретный скрипт на конкретную страницу, потому что он может быть не только привязан к одному, но и нескольким, скрипт js или стиль css можно прикреплять к пяти или десяти страницам ...

Я думал о switch() для каждого случая на странице заголовка или нижнего колонтитула, тогда любые условные (например, $_SERVER['PHP_SELF']) на других страницах, но как я могу сделать эту вещь? это включать() то, что я ищу?

спасибо.

+0

Похоже, вы слишком задумываетесь об этом и слишком усложнили свой сайт. Включите то, что вам нужно, где оно вам нужно, и подумайте об использовании механизма шаблонов. – Brad

ответ

0

Это в значительной степени выходит за рамки Stackoverflow, но почему бы и нет.


переключатель внутри шаблона

Я вижу, ты добавил, что вы думаете об использовании переключателя. Вот пример чего-то простого, что вы могли бы сделать.

header.php

<html> 
<head> 
    <title>...</title> 
    <?php switch(basename($_SERVER["SCRIPT_FILENAME"], '.php')) { 
    case 'file1': ?> 
     <script src="file1.js"></script> 
    <?php break; 
    case 'file2': ?> 
     <script src="file2.js"></script> 
    <?php break; 
    } 
    ?> 
</head> 
<body> 

Просто пример кода в-между корпусом и ломаться. Этот код инициирует включение имени файла, file1.php будет «file1».


Буферизация вывода

Что еще вы могли бы сделать, это буферизация вывода. Допустим, у вас есть шаблон в файле file1.tpl.php, тогда у вас есть header.php. Внутри file1.php, вы можете сделать это:

ob_start(); 
include "file1.tpl.php"; 
$content = ob_get_clean(); 
include "header.php"; 

Все обработанные с file1.tpl.php будут сохранены в $ содержание. Затем в header.php, вы загружаете $ содержание где вы считаете нужным:

<html><head><?= $content ?></head><body> 
+0

да, thad сделал трюк !, большое спасибо, я сделал это в файле заголовка, а затем просто добавил включение на каждую другую страницу ... Теперь у меня это централизовано .. –

+0

@ DanielFelipe, я добавил еще один пример использования буферизации вывода с отдельными включениями. – Devon

0

Простая реализация может идти вот так:

Определить глобальные стили массива (скажем, в файле config.php который получает включены на каждой странице), который содержит массив CSS файлов, которые могут быть нагрузка:

global $styles = array(
    "foo" => "/styles/foo.css", 
    "bar" => "/styles/bar.css", 
); 

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

В верхней части данной страницы, настройки переменной, чтобы определить, какие файлы CSS, чтобы включать в себя:

$activeStyles = array('foo'); 

Тогда в вашем header.php, проверить наличие переменной, и будет ли не содержит никаких значений:

<?php 
    if(isset($activeStyles) && count($activeStyles) > 0) { 
     # iterate through the array, generating the appropriate <link /> tags 
     foreach($activeStyles as $styleKey) { 
?> 

<link rel="stylesheet" type="text/css" href="<?php echo $styles[$styleKey] ?>" /> 

<?php 

     } 
    } 
?> 

Вы использовали бы ту же концепцию для скриптов.