PHP: Как я могу ссылаться на переменные из включенного файла до его включения? - PullRequest
1 голос
/ 16 сентября 2010

Как я могу ссылаться на переменные из включенного файла до его включения? Или я могу как-то включить файл (чтобы я мог привести его переменные позже) до того, как его HTML буквально будет вставлен в тег body? Или я могу вместить все содержимое тела дома в одну большую переменную, которую я могу также отразить в индексе?

Вот что я пытаюсь сделать:

index.php

<html>
<head>
<title><?php echo $title; ?></title>
<meta name="description" content="<?php echo $description; ?>" />
<meta name="keywords" content="<?php echo $keywords; ?>" />
</head>
<body>

<?php include 'home.php'; ?>

</body>
</html>


home.php

<?php
$title="home page";
$description="this is the home page"; 
$keywords="home, awesome, yes";
?> 

this is the home page content that gets inserted into the body!

Ответы [ 3 ]

0 голосов
/ 16 сентября 2010

Краткий вариант ответа: Вы не можете.Если вы это сделаете, вы получите уведомление «Неопределенная переменная».

Я считаю, что обычно гораздо удобнее иметь header.phpfooter.php в этом отношении), который включается вИндекс, дом, контакт или любой другой файл.Преимущество в том, что у вас нет избыточного кода, и если вам нужно внести изменения в верхний или нижний колонтитул, вам нужно изменить только один файл.

Так, например, about_us.phpвыглядит так:

<?php
include('path/to/header.php');
#body goes here
include('path/to/footer.php');
?>

И ваш заголовок будет выглядеть примерно так:

<?php
$title = ucfirst(str_replace('_', ' ', substr(basename($_SERVER['PHP_SELF']), 0, -4));
?>
<html>
    <head>
        <title><?php echo $title; ?> page</title>
        <meta name="description" content="this is the home page" />
        <meta name="keywords" content="home, awesome, yes" />
    </head>
    <body>

Переменная $title будет именем файла, за исключением расширения, со всеми подчеркиваниями, замененными пробеламии первая буква первого слова с большой буквы.Так что в основном about_us.php будет преобразовано в «О нас».Это , а не , обязательно общее решение, но я привел его в качестве примера, имея в виду, что вы хотели использовать динамический заголовок в своем исходном примере.Для динамического описания и ключевых слов на основе имени файла вы также можете назначить различные значения с помощью оператора switch().


UPDATE:

Другое решение, хотя и противоположное тому, что вы просите, но в то же время гораздо ближе к тому, что вы ищете, было бы написать header.php как

<html>
    <head>
        <title><?php echo $title; ?> page</title>
        <meta name="description" content="<?php echo $desc; ?>" />
        <meta name="keywords" content="<?php echo $keywords; ?>" />
    </head>
    <body>

... нижний колонтитул, как ...

    </body>
</html>

... и затем включите их в другие файлы:

<?php
$title = 'Your title';
$desc = 'Your description';
$keywords = 'The, big, brown, fox, jumps, over, the, lazy, dog';
include('path/to/header.php');
?>

<!-- body goes here -->

<?php
include('path/to/footer.php');
?>

Таким образом, вы назначаете всепеременные ДО того, как вы включите файлы, на которые они ссылаются, у вас есть отдельные файлы для всех ссылок, и вам не нужны причудливые переключатели.Также как примечание, оборачивать HTML тела в PHP - просто плохая практика.Старайтесь как можно больше отделять HTML от PHP.Это поможет и вам, и тем, кто собирается работать над кодом в будущем.

Надеюсь, это поможет!

0 голосов
/ 16 сентября 2010

Я бы взглянул на использование системы шаблонов.Отделение кода от контента избавит вас от многих проблем в будущем.это также позволит вам легко изменить шаблон HTML в будущем.Кроме того, вы можете видеть свой шаблон без необходимости запуска php-кода.

посмотрите шаблоны smarty http://www.smarty.net/

, после чего вы создадите файл шаблона: "template.tpl"

<html>
  <head>
    <title>{$title}</title>
    <meta name="description" content="{$description}" />
    <meta name="keywords" content="{$keywords}"/>
  </head>
  <body>
    {$home_content}
  </body>
</html>

и некоторый php-код для запуска:

<?php
require_once('Smarty.class.php');
$smarty = new Smarty();
$smarty->assign('title'        , 'Your title');
$smarty->assign('description'  , 'Your description');
$smarty->assign('keywords'     , 'The, big, brown, fox, jumps, over, the, lazy, dog');
$smarty->assign('home_content' , 'this is the home page content that gets inserted into');
$smarty->display('template.tpl');
?> 

И это лишь царапина на поверхности того, что может сделать шаблонная система.Вы можете повторять или необязательные блоки, включать другие шаблоны и т. д. и т. д.

0 голосов
/ 16 сентября 2010

Просто переместите оператор включения в начало файла.Это откроет все значения, функции и переменные для всех последующих строк.

<?php include 'home.php'; ?>
<html>
<head>
<title><?php echo $title; ?></title>
<meta name="description" content="<?php echo $description; ?>" />
<meta name="keywords" content="<?php echo $keywords; ?>" />
</head>
<body>



</body>
</html>
...