7

我使用 PHP 已经有一段时间了,但对 Smarty 来说还是很陌生。

我正在与 Prestashop 合作,我注意到 Smarty 似乎吞噬了所有 PHP 错误 - 当 PHP 代码中出现错误时,.tpl 文件只会输出一个空白页。我一直在尝试,但即使有错误,我也无法让 Smarty 显示 PHP 代码输出的任何内容。

PHP 错误报告设置为显示错误。

因此,例如,假设这是 example.php 文件:

<?php
//included classes etc go here, irrelevant for this issue

error_reporting(E_ALL ^ E_NOTICE);

echo obvious wrong syntax"
?>

该文件连接到 example.tpl,该文件适合模板块中的输出。

显然,它应该抛出一个错误。如何让 Smarty 实际显示该错误?

4

3 回答 3

14

要激活调试模式,请转到config/config.inc.php

找到以下行并将第一行off更改为 true 并将第二行设置为 trueon

/* Debug only */
@ini_set('display_errors', 'on');
define('_PS_DEBUG_SQL_', true);

这将显示 PHP 和 SQL 错误(这可能足以让您解决“空白页”)。

prestashop 网站上还有一篇关于 p() 和 d() 方法以及如何跟踪异常的博客文章

要在 Prestashop 1.5 之前的版本中激活模板调试,请转到 config/smarty.config.inc.php

找到以下行并将其设置为 true

$smarty->debugging = true;

当你刷新你的页面时,themes/debug.tpl应该会被渲染。

要在 Prestashop 1.5+ 中激活模板调试,您可以通过管理面板启用 Smarty 调试

首选项 > 性能 > Smarty

并设置Always open console,但控制台将为所有人打开(不适合现场直播:)

或设置Open console with URL parameter (SMARTY_DEBUG)并添加?SMARTY_DEBUG到 URL 的末尾以查看控制台

希望这可以帮助。

于 2012-11-28T22:20:38.073 回答
2

我已经看过@Sergei Guk 的回答,而且偏题,这是一个很好的回答。然而,prestashop 已经发布了 1.6 版。

所以如果你想显示 prestashop v 1.6.0.6 中的所有错误,你只需要去 config/defines.inc.php

替换define('_PS_MODE_DEV_', false);define('_PS_MODE_DEV_', true);

它实际上做的是设置一个常量,并在下一行检查“_PS_MODE_DEV_”是否为真,然后它将在 prestashop 中显示各种错误

if (_PS_MODE_DEV_)
{
  @ini_set('display_errors', 'on');
  @error_reporting(E_ALL | E_STRICT);
  define('_PS_DEBUG_SQL_', true);
}
else
{
  @ini_set('display_errors', 'off');
  define('_PS_DEBUG_SQL_', false);
}

我已经对其进行了测试,并且效果很好。

于 2014-06-21T13:04:32.667 回答
0

设置$error_reporting变量。

http://www.smarty.net/docsv2/en/variable.error.reporting.tpl

于 2012-11-28T13:42:01.500 回答