Webform: вывод загруженного изображения

Как разработать форму обратной связи с прикреплением файла и последующей отправкой файла на почту? Читайте :)

27 December, 12:03
Дмитрий Трацевский
Руководитель разработки
5516
0

Создание формы обратной связи через Webform с возможностью прикрепления файлов.  

Задача:

У пользователя есть возможность загружать графические файлы через формы, созданные модулем webform. Функционал не сложный по реализации - стандартный компонент File. Есть один минус из коробки - все загруженные файлы выводятся просто как ссылка на файл. Наша задача - вывести загруженное изображение как картинку (причем вывести не только в админке сайта, но и в отправляемых письмах)

Решение:

Для тех, кто не любит много букв, ответ простой - нужно переопределить функцию theme_webform_display_file.

А теперь пример реализации данной задачи в своем модуле.

Шаг первый:

/**
 * Реализация hook_theme_registry_alter().
 */
function ИМЯМОДУЛЯ_theme_registry_alter(&$theme_registry) {
  $theme_registry['webform_display_file']['function'] =
 'frz_tweaks_webform_display_file_custom';
}

 

Шаг второй:

/**
 * Новая функция темизации.
 */
function frz_tweaks_webform_display_file_custom($variables) {
  $element = $variables['element'];
  $file = $element['#value'];
  $url = !empty($file) ? webform_file_url($file->uri) : t('no upload');

  if(!empty($file)){
    $url = webform_file_url($file->uri);
    $link = l($file->filename, $url);

    $basename = basename($url);
    if (strrpos($basename, '.')!== false ) {
      $file_extension = substr($basename, strrpos($basename, '.')+1);
    } else {
      $file_extension = '';
    }

    if(in_array($file_extension, array('jpg', 'bmp', 'jpeg', 'gif'))){
      //У нас картинка. Выводим как изображение
      $variables = array(
        'path' => $url,
        'alt' => 'Foto',
        'attributes' => array(),
      );
      $img = theme_image($variables);
      $link = l($img, $url, array('attributes' => array(
        'target'=> '_blank'), 'html' => TRUE));
    }
  }else{
    $url = t('no upload');
  }
  return !empty($file) ? ($element['#format'] == 'text' ? $url : $link) : ' ';
}

 

Причем мы сохраняем стандартный функционал - если файл не является изображением, мы будем выводить просто ссылку на него.

Теперь в админке сайта будет выводится загруженное изображение.
Что бы в теле письма также появилось изображение нужно настроить отправку html писем.

 

Добавление комментария:

Подписаться на новые статьи

Подпишитесь на новые статьи и вы будете получать самые свежие новости прямо к вам на почту