#file #fetch #prestashop #smarty
#файл #извлечение #prestashop #smarty
Вопрос:
У меня есть некоторый код шаблона smarty, подобный приведенному ниже:
{файл выборки =»https://example.com/file.php » присвоить=’значение’}
Однако, если 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}
Ответ №1:
Необходимо использовать функцию 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 amp;amp; 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}
Ответ №2:
Давайте будем честными. Представление — не лучшее место для таких вещей. С предложением от @r_a_f все в порядке, но было бы намного лучше иметь его в ядре вашего модуля.
Затем, если вы можете получить доступ к этому внешнему ресурсу, вы можете передать его в представление вместе с другими необходимыми данными.
Вы даже можете использовать виджет для этого: https://devdocs.prestashop.com/1.7/modules/concepts/widgets /
И внутри getWidgetVariables
вы можете выполнить надлежащие проверки.