【问题标题】:vBulletin 4.0 custom pagesvBulletin 4.0 自定义页面
【发布时间】:2011-03-07 17:33:32
【问题描述】:

我正在尝试使用新的 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 中工作。

我是否需要为从现有页面创建的每个自定义页面使用单独的模板?

EDIT 1:我已经为这个问题开了一个 价值 100 分的 BOUNTY。如果您需要有关我的问题的更多详细信息,请发表评论。

编辑 2:最初,我使用 vB3 使用 eval('$mytemplate = "' . fetch_template('mytemplate') . '";');。这破坏了 vB4 中的页面。如果我关注 ARandomOWI 的帖子,我会遵循最好的方法吗?

【问题讨论】:

    标签: php html templates vbulletin


    【解决方案1】:

    如果您只想更改自定义页面之间的部分内容,则可以对所有自定义页面使用相同的模板。

    在您的 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 文件中进行了清理。

    希望这已经足够清楚了。

    【讨论】:

    • @ARandomOWl:感谢您的回答。我有很多对每个文件都是唯一的 HTML 代码。如何避免转义字符以将它们放入 PHP 字符串中的麻烦?
    • @Jon 您可以为您的 HTML 创建单独的模板,也可以在 PHP 文件中使用以下内容:&lt;? ob_start(); ?&gt; HTML here &lt;? $your_php_var = ob_get_flush(); ?&gt; 只需像往常一样将您的 HTML 粘贴到那里。输出将被缓冲,然后存储在变量中。更多信息:link
    • @ARandomOWl: 使用 ob_get_flush();有帮助。我还必须使用 ob_end_clean();之后。
    • @ARandomOWI:我在原始帖子中添加了一个小问题。感谢您的帮助!
    • @ARandomOWI:当我使用这个方法时,我的表单中的 action 属性的值会被覆盖。可能是什么原因?
    【解决方案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”变量。你如何去做取决于你正在使用什么。 (无论您是尝试使现有代码工作,还是从头开始。)

    【讨论】:

    • @ARandomOWI:我认为第一个答案会有所帮助,因为我没有每个页面的模板。主文件有eval('$navbar = "' . fetch_template('navbar') . '";');,我尝试使用新代码,但没有成功。
    • @Jon:好的。我需要查看 PHP 源代码才能进一步提供帮助。
    猜你喜欢
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 2018-11-16
    相关资源
    最近更新 更多