【问题标题】:How to include php code in .tpl file如何在 .tpl 文件中包含 php 代码
【发布时间】:2018-10-09 11:57:45
【问题描述】:

我有一个几乎完成的小型学校项目。但现在我必须更改我的工作代码并改用模板。我选择了Smarty。 表格显示来自表单的数据。数据存储在文本文件中,每个元素都在新行上。以前一切正常,但现在我不知道如何显示我的表格。使用我当前的代码,我的页面变成白色。 我调试它并得到一个错误“已弃用,使用 SmartyBC 类启用”。我尝试设置新的 smarty,我也尝试使用模板功能(插件)但我仍然得到白页。任何建议,将不胜感激! 我的 table.php 代码:($items 函数从文件中读取)

<?php
$count = 0;
if (isset($Items)){
    foreach ($Items as $item) {
        if($count == 0){
            print "<tr><td>$item</td>";
            $count += 1;
        } else if($count == 1) {
            print "<td>$item</td>";
            $count +=1;
        } else if($count == 2) {
            print"<td>$item</td></tr>";
            $count = 0;
        }

    }
}

tpl 文件

    <table>
    <tr>
        <th>Name</th>
        <th>Lastname</th>
        <th>Phone</th>
    </tr>
    {include_php file='table.php'}
</table>

编辑: 我用 $smarty = new SmartyBC();并更改为 {php} 标签。它不再显示白屏,但 table.php 代码不起作用 - 表格不显示。

有没有更聪明的方法来做到这一点?除了包括 php 文件? 编辑:我通过在 tpl 中使用 foreach 循环让它工作,但我想知道这是否是正确的方法?

【问题讨论】:

  • 白页通常意味着您有内部服务器错误。你检查过你的错误日志吗?一个好主意是在本地 PHP 环境中打开display_errors。在此处阅读更多信息:How do I get PHP errors to display?。您根本无法在 smarty 模板中执行 PHP 代码(即使您包含它)。
  • @MagnusEriksson 我使用 display_errors 修复了一些其他问题,谢谢。你对我应该如何处理这个问题有任何其他想法吗?感谢您的意见

标签: php html smarty


【解决方案1】:

使用 {php} 标签,然后在其中包含 php 文件路径

{php}
  include('table.php');
{/php}

【讨论】:

  • 请避免在模板中包含原始 php 代码。它不属于那里。如果您的模板中确实需要一些复杂的逻辑,请使用block functionssmarty.net/docsv2/en/plugins.block.functions.tpl
  • 同意,但没有什么是完美的,有时您确实需要在视图中包含 php - 假设您在 php 文件中有大量计算/渲染并将其移植到控制器 + smarty tpl 将花费比您的项目更多的时间经理可以分配。我们都知道最佳实践,但我们一定会在那些“绝望”的时代偏离它们。
  • 这是遗留代码或错误决策的问题。如果你的 php 代码中有一个很大的计算渲染的东西,那么使用它已经很痛苦了,所以将它转换为基于模板的渲染将在以后节省大量时间。在这种特殊情况下,不需要将原始 php 代码注入到模板中,因为这是一个小型学校项目。我并不是说经理会分配足够的时间来重写它,这真的取决于(遗憾的是我知道它通常是如何进行的)。
  • 是的,没错。
【解决方案2】:

您不应该在任何类型的模板中注入 php 代码(不仅是 Smarty)。加载您的数据并在 php 中执行您的逻辑并在模板中呈现。引擎。不需要模板函数或在您的情况下包含 php。

PHP 文件

// Initiate smarty
$smarty = new Smarty ...;
...

// Somehow load your data from file
$itemsFromFile = somehow_load_data_from_file( ... );
...

// PAss your data to Smarty
$smarty->assign('items', $itemsFromFile);
...

// Render your template
$smarty->display( ... );

TPL 文件

<table>
    <tr>
        <th>Name</th>
        <th>Lastname</th>
        <th>Phone</th>
    </tr>

    {foreach $items as $key => $item}
        {if $key % 3 == 0}
            <tr>
        {/if}
                <td>$item</td>
        {if $key % 3 == 2}
            </tr>
        {/if}
    {/foreach}
</table>

利用模板引擎的优势。您可以使用三的模数,而不是数到二然后重置为零。

来源:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-20
    • 2012-07-27
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多