捕获并处理未找到的 smarty 提取文件
Catch and handle smarty fetch file not found
我有一些聪明的模板代码如下:
{fetch file="https://example.com/file.php" assign='value'}
但是,如果无法访问 URL,则页面会出现 500 错误。错误日志显示“{fetch} 无法读取资源”。
如果 URL 不可用,我如何捕获上述内容以避免页面崩溃?例如如果它是一个 var,我可以用 isset 检查它是否已设置,但由于它是 url 我不知道怎么说“如果找不到,请执行此操作”。
尝试了以下但没有成功。
{if file_exists('https://example.com/file.php')}
{fetch file="https://example.com/file.php" assign='value'}
{/if}
需要使用smarty功能(将此功能移至smarty功能目录):
function smarty_function_checkurl($params)
{
if (isset($params['url'])) {
$url = $params['url'];
$parsed = parse_url($url);
$domain = str_replace('www.', '', $parsed['host']);
$response = checkdnsrr($domain);
if ($response) {
$file_headers = @get_headers($url);
if ($file_headers && strpos($file_headers[0], ' 200 OK') !== false) {
return true;
}
}
}
return false;
}
然后在 .tpl 文件中:
{if {checkurl url="https://example.com/file.php"}}
YES
{fetch file="https://example.com/file.php" assign='value'}
{else}
NOT
{/if}
老实说吧。视图不是此类事物的最佳位置。来自@r_a_f的建议是可以的,但最好将它放在模块的核心中。
然后,如果您可以获取此外部资源,则可以将其与您需要的其他数据一起传递给视图。
您甚至可以为此使用一个小部件:
https://devdocs.prestashop.com/1.7/modules/concepts/widgets/
在 getWidgetVariables
中,您可以 运行 进行适当的检查。
我有一些聪明的模板代码如下:
{fetch file="https://example.com/file.php" assign='value'}
但是,如果无法访问 URL,则页面会出现 500 错误。错误日志显示“{fetch} 无法读取资源”。
如果 URL 不可用,我如何捕获上述内容以避免页面崩溃?例如如果它是一个 var,我可以用 isset 检查它是否已设置,但由于它是 url 我不知道怎么说“如果找不到,请执行此操作”。
尝试了以下但没有成功。
{if file_exists('https://example.com/file.php')}
{fetch file="https://example.com/file.php" assign='value'}
{/if}
需要使用smarty功能(将此功能移至smarty功能目录):
function smarty_function_checkurl($params)
{
if (isset($params['url'])) {
$url = $params['url'];
$parsed = parse_url($url);
$domain = str_replace('www.', '', $parsed['host']);
$response = checkdnsrr($domain);
if ($response) {
$file_headers = @get_headers($url);
if ($file_headers && strpos($file_headers[0], ' 200 OK') !== false) {
return true;
}
}
}
return false;
}
然后在 .tpl 文件中:
{if {checkurl url="https://example.com/file.php"}}
YES
{fetch file="https://example.com/file.php" assign='value'}
{else}
NOT
{/if}
老实说吧。视图不是此类事物的最佳位置。来自@r_a_f的建议是可以的,但最好将它放在模块的核心中。
然后,如果您可以获取此外部资源,则可以将其与您需要的其他数据一起传递给视图。
您甚至可以为此使用一个小部件: https://devdocs.prestashop.com/1.7/modules/concepts/widgets/
在 getWidgetVariables
中,您可以 运行 进行适当的检查。