Я создал класс для создания виджетов. Вы вызываете функцию stati c, передаете переменные и получаете свой сладкий виджет.
Пока это работает, потому что я использую переменные, созданные в файле виджета. Но теперь я попытался использовать некоторую «глобальную» переменную, и она этого не видит.
Под «глобальными» я подразумеваю мои определенные глобальные переменные (не phps), такие как $ di c, который является объектом класса словаря.
Почему это так? Я действительно не хочу создавать эти переменные в каждом виджете.
Я думаю, это потому, что я создаю временный файл. (Мне нужно заменить {{ title }}
действительным заголовком, поэтому я получаю код виджета, заменяю заголовок, создаю новый файл tmp с замененным заголовком и включаю его, затем удаляю)
Глобальная переменная:
$dic = new Dictionary(isset($_COOKIE["language"]) ? htmlspecialchars($_COOKIE["language"]) : _LANG); // THE GLOBAL VARIABLE
Код виджета:
<span>{{ title }}</span>
<form action="<?php echo Path::GetCurrentURL(); ?>" method="post">
<?php // for some reason it doesn't see any global variables so you have to create then once more in widgets which drives me nuts ugh?>
<input type="submit" name="logoutAdm" value="<?php $dic->Translate("Log out"); ?>">
</form>
Включение функции:
{
$path = Path::Widgets("ShopPanelTitle.php");
if (file_exists($path)) {
$widget = file_get_contents($path);
$widget = str_replace("{{ title }}", $title, $widget);
$pathTmp = Tools::TMPName(".php",Path::TMP(""));
echo $pathTmp;
$file = fopen($pathTmp, "w+");
fwrite($file,$widget);
fclose($file);
// for some reason it doesn't see any global variables so you have to create then once more in widgets
include $pathTmp;
unlink($pathTmp);
}
}
Как я вызываю функцию:
<?php Widgets::ShopPanelTitle($dic->Translate("Main",true)) ?>
Нет более подходящего кода. Если вы хотите увидеть весь код, который используется, вопрос будет очень длинным и будет запрошен за раскрытие секретов компании: /.
Path :: Widgets - возврат пути к папке виджетов
Tools :: TMPName - вернуть случайное имя
Что я получу:
<span>Title</span>
<form action="currentPage.php" method="post">
</form>
Что я хочу получить:
<span>Title</span>
<form action="currentPage.php" method="post">
<input type="submit" name="logoutAdm" value="Log out">
</form>