Поймать и обработать файл smarty fetch не найден

#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 вы можете выполнить надлежащие проверки.