我正在尝试使用新的vBulletin 4制作自定义页面。
我的PHP文件使用以下代码:
$templater = vB_Template::create('TEST');
$templater->register_page_templates();
$templater->register('navbar', $navbar);
$templater->register('pagetitle', $pagetitle);
print_output($templater->render());
我的模板如下所示:
{vb:stylevar htmldoctype}
<html xmlns="http://www.w3.org/1999/xhtml" dir="{vb:stylevar textdirection}" lang="{vb:stylevar languagecode}" id="vbulletin_html">
<head>
<title>{vb:raw vboptions.bbtitle} - {vb:raw pagetitle}</title>
{vb:raw headinclude}
{vb:raw headinclude_bottom}
</head>
<body>
{vb:raw header}
{vb:raw navbar}
<div id="pagetitle">
<h1>{vb:raw pagetitle}</h1>
</div>
<h2 class="blockhead">Title</h2>
<div class="blockbody">
<div class="blockrow">
Text
</div>
</div>
{vb:raw footer}
</body>
</html>
我的问题涉及使用一个单独的模板大约50页,它们一起使用HTML和PHP,并且在vBulletin 3中工作。
我是否需要为现有页面中的每个自定义页面使用单独的模板?
编辑1 :我为这个问题打开了一个价值100点的 BOUNTY 。如果您需要有关我的问题的更多详细信息,请发表评论。
编辑2 :最初,我使用的是eval('$mytemplate = "' . fetch_template('mytemplate') . '";');
vB3。这打破了vB4中的页面。如果我关注ARandomOWI的帖子,我会遵循最佳方法吗?
答案 0 :(得分:3)
如果您只想更改它们之间的某些内容,则可以对所有自定义页面使用相同的模板。
在PHP文件中,您可以使用以下命令将变量传递给模板:
$templater->register('var_name_used_in_template', $your_php_var);
这需要包含在“print_output”行之前。然后在您的模板中添加:
{vb:var var_name_used_in_template}
显示PHP中存在的变量“$ your_php_var”的内容。
这样您就可以使用“$ your_php_var”来存储要在模板中显示的HTML。您可以在多个PHP文件之间拆分内容,或者对所有内容使用单个文件,并使用PHP条件来更改“$ your_php_var”。
注意:使用“vb:var”传递的变量首先通过函数“htmlspecialchars_uni()”。如果这会导致问题,您可以使用“vb:raw”代替传递原始变量。尽管如此,请确保该变量已在PHP文件中进行了清理。
希望足够清楚。
答案 1 :(得分:2)
@Jon:如果您已经从VB3版本设置了所有模板和PHP文件,则可以替换
eval('$mytemplate = "' . fetch_template('mytemplate') . '";');
带
$templater = vB_Template::create('mytemplate');
$templater->register_page_templates();
$templater->register('navbar', $navbar);
$templater->register('pagetitle', $pagetitle);
print_output($templater->render());
如果我理解正确的话。您可能希望更改“pagetitle”和“navbar”变量。你如何去做它取决于你正在使用什么。 (无论您是尝试使现有代码工作,还是从头开始。)