Smarty вставляет функцию PHP в <BODY>вместо <TD> - PullRequest
0 голосов
/ 11 февраля 2011

У меня есть эта простая PHP-функция в admin.php

function accountMenu()
{
    if (isset($_SESSION['user_id']))
        { ?>
      <a href="update_profile.php">Update My Profile</a><br>
      <a href="update_email.php">Update My E-mail Address</a><br>
      <a href="logout.php">Logout </a>
    <?php }
}

Я назначаю переменную этой функции в dashboard.php

//smarty paths here

include 'admin.php';

$accountMenu = accountMenu();

$smarty->assign('accountMenu', $accountMenu);
$smarty->display('dashboard.tpl');

И пытаюсь отобразить это через панель управления.tpl

<body>
    <table width="100%" border="0" cellspacing="0" cellpadding="5" class="main">
        <tr>
            <td width="160" valign="top">
            {$accountMenu}
            </td>
            <td width="732" valign="top">
                <h3>Dashboard</h3>
            </td>
        </tr>

        <tr>
            <td colspan="3">&nbsp;</td>
        </tr>
    </table>
</body>

Что происходит, когда элементы accountMenu отображаются сразу после <BODY> (и даже до <TITLE>!), а не внутри <TD>.

Любая идеяпочему это происходит?

1 Ответ

1 голос
/ 11 февраля 2011

Ваша функция ничего не возвращает - она ​​просто выводит HTML прямо в буфер, поэтому, когда вы вызываете это:

$accountMenu = accountMenu();

Он немедленно печатает его в браузере, и $ accountMenu остается NULL.

Измените его так, чтобы он возвращал желаемую строку, например:

function accountMenu()
{
    if (isset($_SESSION['user_id'])) return '
      <a href="update_profile.php">Update My Profile</a><br>
      <a href="update_email.php">Update My E-mail Address</a><br>
      <a href="logout.php">Logout </a>
    ';
}
...