我尝试运行PHP-Nemid的测试脚本有点失败。我试图通过代码工作,但是当它到达render函数时变得有点迷失,它使用了文件“nemid.tpl.php”。当我运行脚本时,模板文件字面上写入屏幕,在某种意义上,PHP填写相关的模板变量,而不是只写文字PHP代码。换句话说,<?= $some_var_value
与渲染页面的源代码中的一样。
我不明白的另一件事是模板文件中<?=
的含义是什么。这不是我熟悉的PHP构造。起初我以为我应该将<?= $some_var
更改为<? print $some_var
,但在这种情况下,它仍会将文字PHP代码打印到页面。
如果有人能够让我对这里发生的事情有所了解,将不胜感激。
模板文件(nemid.tpl.php)
<html>
<body>
<form id="signedForm" name="signedForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
<div id="applet">
<!-- div ID used for overlay / modal-box -->
<applet name="DANID_DIGITAL_SIGNATUR" tabindex="1" archive="<?= $ServerUrlPrefix ?>/bootapplet/1234567" code="dk.pbs.applet.bootstrap.BootApplet" width="200" height="250" mayscript="mayscript" style="visibility: visible; ">
<param name="ServerUrlPrefix" value="<?= $ServerUrlPrefix ?>">
<param name="ZIP_BASE_URL" value="<?= $ZIP_BASE_URL ?>">
<param name="ZIP_FILE_ALIAS" value="<?= $ZIP_FILE_ALIAS ?>">
<param name="log_level" value="<?= $log_level ?>">
<param name="paramcert" value="<?= $paramcert ?>">
<param name="signproperties" value="<?= $signproperties ?>">
<param name="paramsdigest" value="<?= $paramsdigest ?>">
<param name="signeddigest" value="<?= $signeddigest ?>">
<param name="MAYSCRIPT" value="<?= $MAYSCRIPT ?>">
</applet>
</div>
<input type="hidden" name="signature">
<input type="hidden" name="result">
</form>
<script type="text/javascript">
function onLogonOk(signature) {
document.signedForm.signature.value=signature;
document.signedForm.result.value='ok';
document.signedForm.submit();
}
function onLogonCancel() {
document.signedForm.result.value='cancel';
document.signedForm.submit();
}
function onLogonError(emsg) {
document.signedForm.result.value=emsg;
document.signedForm.submit();
}
</script>
</body>
</html>
渲染功能
我已经在下面的函数中测试了$ vars的内容,并且可以确认模板所需的提取变量是否存在。
function render($template, $vars = array())
{
extract($vars);
ob_start();
include('../templates/' . $template . '.tpl.php');
$content = ob_get_contents();
ob_end_clean();
return $content;
}
答案 0 :(得分:4)
<?=
是echo的短开标签。
<?='Hello world'?>
输出Hello world
为了回答为什么它没有解析,文件名是什么?您是否安装了PHP并配置为与Apache / Nginx /其他服务器配合使用?
需要注意的另一件事是您使用的模板PHP_SELF
PHP_SELF
实际上会打开许多漏洞,不建议使用。您可以使用替代方案:
basename(__FILE__);
答案 1 :(得分:1)
<?=
是php的简写
<?php echo
答案 2 :(得分:0)
<?=
被模板制作者用作速记,因为他们在大多数文件中使用HTML,只是根据需要在PHP中打印变量。
我的服务器已启用,但可以在旧版本中关闭或不使用。