Использование переменных PHP внутри здесь документов внутри функций внутри класса

Если название еще не напугало вас, читайте дальше. Я работаю над веб-сайтом ExpressionEngine и редактирую файл шаблонов участников. Все шаблоны, относящиеся к взаимодействию с членами, хранятся как функции внутри класса в одном файле.

Каждая из этих функций представляет собой простой здесь документ, но многие из них печатают код с путями и терминами, которые я не хочу использовать. Например, этот веб-сайт будет называть зарегистрированных пользователей «клиентами», а не «участниками».

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

Вот сокращенный пример файла:

<?php
/* I wish to define variables once in this area */
$globaluserterm = "client";

class profile_theme {

//----------------------------------------
//  Member Page Outer
//----------------------------------------
function member_page()
{
$userterm = "client";
return <<<EOF
<div id="{$userterm}-content">
    <h1>{$userterm} Account</h1> (Note: This DOES work)
    <h1>{$globaluserterm} Account</h1> (Note: This doesn't work)
    {include:member_manager}
</div>
EOF;
}
/* END */

//-------------------------------------
//  Full Proile with menu
//-------------------------------------
function full_profile()
{
$userterm = "client";
return <<< EOF
<div id="{$userterm}-full-profile">
    {include:content}
</div>
EOF;
}
/* END */


}
// END CLASS
?>

person Ray Brown    schedule 18.06.2010    source источник
comment
Подсветка синтаксиса на этот раз может сбить с толку;)   -  person Felix Kling    schedule 18.06.2010
comment
@Felix Ага, Prettify, похоже, не знает синтаксиса heredoc. Должен быть зарегистрирован как ошибка ...   -  person Pekka    schedule 18.06.2010


Ответы (2)


Если у вас есть только один класс на файл, может быть, уже достаточно определить значения на уровне класса? Например.

class profile_theme {
    private $globaluserterm = "client";
    //....
}

и в функции:

return <<<EOF
<div id="{$userterm}-content">
    <h1>{$userterm} Account</h1> (Note: This DOES work)
    <h1>{$this->globaluserterm} Account</h1> (Note: This doesn't work)
    {include:member_manager}
</div>
EOF;
person Felix Kling    schedule 18.06.2010
comment
Это сделало это. Я не совсем понимаю, как работают классы, и я пробовал неверные способы ссылки на частную переменную $ globaluserterm перед публикацией здесь. Спасибо, Феликс! - person Ray Brown; 18.06.2010

Я не совсем понимаю, чем вы занимаетесь, но думаю, что вам нужен шаблонизатор, например Smarty . (См. этот вопрос для более компактных альтернатив.)

В Smarty вы должны подготовить файл шаблона:

<div id="{$userterm}-content">
    <h1>{$userterm} Account</h1> (Note: This DOES work)
    <h1>{$globaluserterm} Account</h1> (Note: This doesn't work)
    {include:member_manager} /* Don't know how to do this in smarty */
</div>

и предварительно заполните значения переменных:

$Smarty = new Smarty();
// ... set up caching etc. if needed  ...

$Smarty->assign("userterm", $value1);
$Smarty->assign("globaluserterm", $value2);
..... 

Если это не то, что вы ищете, можете ли вы более подробно объяснить, что вы хотите сделать?

person Pekka    schedule 18.06.2010
comment
В качестве альтернативы он может просто использовать PHP (поскольку это язык шаблонов) через include, исключая накладные расходы Smarty, то есть <h1><?php echo $vars['userterm'] ?> Account</h1> - person webbiedave; 18.06.2010