亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

Drupal7通過form API 建立無刷新的圖片上傳功能的四個方法

2024-08-30 19:06:46
字體:
來源:轉載
供稿:網友

本文我們講講在Drupal 7通過form API 實現無刷新圖片上傳的幾個方法,比較實用,喜歡drupal建站的朋友可以參考一下.

表單是網站常用的,不可缺少的,而通過表單建立圖片上傳也是剛需,基本每個網站都需要圖片上傳功能,現在比較流行的是直接無刷新上傳圖片,無刷新上傳圖片在drupal7 如何做呢?下面代碼就是實現此功能。

方法1:用file原件配合ajax參數實現:

  1. function testmodule_forma($form, &$form_state){ 
  2. $form['im-container'] = array( 
  3.     '#prefix'=>'<div id="im-area">'
  4.     '#suffix'=>'</div>'
  5. ); 
  6.  
  7. $form['image_file'] = array( 
  8.     '#type' => 'file'
  9. ); 
  10.  
  11. $form['upload'] = array( 
  12.    '#type' => 'submit'
  13.    '#value' => 'upload'
  14.    '#submit' => array('upload_image'), 
  15.    '#ajax'=> array( 
  16.       'callback'=>'upload_image'
  17.       'wrapper'=> 'im-area'
  18.       'method'=> 'replace'
  19.       'effect'=> 'fade'
  20.    ), 
  21. ); 
  22. return $form; 
  23.  
  24. function upload_image($form, $form_state){ 
  25.  
  26. $file = file_save_upload('image_file', array('file_validate_extensions' => array('png gif jpg jpeg')), "public://",$replace = FILE_EXISTS_REPLACE); 
  27. if ($file) 
  28.     $file->status=FILE_STATUS_PERMANENT; 
  29.     file_save($file); 
  30.     $form['im-container']=array( 
  31.         '#title'=>t('Preview:'), 
  32.         '#prefix'=>'<div id="im-area">'
  33.         '#markup'=>'<img src="sites/default/files/'.$file->filename.'" height="250" width="250" />'
  34.         '#suffix'=>'</div>'
  35.     ); //Vevb.com 
  36. else { 
  37.     drupal_set_message('No file uploaded.'); 
  38.  
  39. return $form['im-container']; 

方法2:直接使用 manage_file 原件實現:

上面的方式是需要配一個上傳按鈕,然而在drupal 7 有一個更好的表單原件 manage_file,可以通過manage_file實現無刷新上傳.

  1. $form['image_example_image_fid'] = array( 
  2.   '#title' => t('<a href="/project/image" class="alinks-link" title="模塊介紹:讓有特定權限的用戶可以上傳圖片到網站里,并且會自動產生縮圖。圖片可以使用在文章里(例如透過tinymce編輯工具進行選取),或是作成簡單的網絡相簿。">Image</a>'), 
  3.   '#type' => 'managed_file'
  4.   '#description' => t('The uploaded image will be displayed on this page using the image style choosen below.'), 
  5.   '#default_value' => variable_get('image_example_image_fid'''), 
  6.   '#upload_location' => 'public://image_example_images/'
  7. ); 

方法3:使用manage_file 原件 配合js 實現不需要點擊上傳按鈕直接上傳:

上面兩種方式都可以實現無刷新上傳,但界面并不友好,兩種方式都是需要點擊上傳按鈕才觸發上傳,我們更多時候是不想有上傳按鈕,下面這個方式就可以做到:

  1. File: auto_upload.info 
  2.  
  3. name = Auto Upload 
  4. description = Removes the need for users to press the 'Upload' button for AJAX file uploads. 
  5. core = 7.x 
  6. dependencies[] = file 
  7.  
  8.  
  9. File: auto_upload.js: 
  10.  
  11.  
  12. (function ($) { 
  13.   Drupal.behaviors.autoUpload = { 
  14.     attach: function (<a href="/project/context" class="alinks-link" title="模塊介紹:就是“根據某些條件”顯示“某些區塊”">context</a>, settings) { 
  15.       $('form', context).delegate('input.form-file''change'function() {   
  16.         $(this).next('input[type="submit"]').mousedown(); 
  17.       });  
  18.     } 
  19.   }; 
  20. })(jQuery); 
  21.  
  22.  
  23. File: auto_upload.module 
  24.  
  25.  
  26. function auto_upload_init() { 
  27.   drupal_add_js(drupal_get_path('module''auto_upload') . '/auto_upload.js'); 

我們還可以再優化下,讓上傳圖片時候,顯示縮略圖:

  1. <?php 
  2. /** 
  3.  * Implements hook_field_widget_form(). 
  4.  */ 
  5. function multifield_field_widget_form(&$form, &$form_state$field$instance$langcode$items$delta$element) { 
  6.  
  7.   //Get the default format for user 
  8.   $default_format  = array_shift(filter_formats($GLOBALS['user']))->format; 
  9.  
  10.   $field_name = $instance['field_name']; 
  11.  
  12.   $item =& $items[$delta]; 
  13.  
  14.   switch($instance['widget']['type']) { 
  15.  
  16.     case 'multifield_base_widget'
  17.       $element['img1_upload'] = array
  18.         '#title' => t('Image'), 
  19.         '#type' => 'managed_file'
  20.         '#upload_location' => 'public://multifield_images/'
  21.         '#default_value' => isset($item['img1_upload']) ? $item['img1_upload'] : 0, 
  22.         // assign #theme directly to the managed_file in other case it won't be 
  23.         // rebuilt after file upload 
  24.         '#theme' => 'image_multifield_multitype'
  25.       ); 
  26.   } 
  27.   return $element
  28.  
  29. /** 
  30.  * Implements hook_theme(). 
  31.  */ 
  32. function multifield_theme() { 
  33.   return array
  34.     'image_multifield_multitype' => array
  35.       'render element' => 'element'
  36.     ), 
  37.   ); 
  38.  
  39. /** 
  40.  * Returns HTML for a managed file element with thumbnail. 
  41.  */ 
  42. function theme_image_multifield_multitype($variables) { 
  43.   $element = $variables['element']; 
  44.  
  45.   $output = ''
  46.  
  47.  
  48.   if($element['fid']['#value'] != 0) { 
  49.     // if image is uploaded show its thumbnail to the output HTML 
  50.     $output .= '<div class="multifield-thumbnail">'
  51.     //$output .= theme('image_style', array('style_name' => 'thumbnail', 'path' => file_load($element['fid']['#value'])->uri, 'getsize' => FALSE)); 
  52.     $output .= '<img src="' . image_style_url('medium', file_load($element['fid']['#value'])->uri). '" class="thumbnail"/>'
  53.     $output .= drupal_render_children($element); // renders rest of the element as usual 
  54.     $output .= '</div>'
  55.   } 
  56. return $output// of course, has to be returned back 
  57.   } 
  58. ?> 

方法4:用第三方模塊

還有一種方式比較簡單直接,就是直接用第三方模塊,例如Drag & Drop Upload 模塊,就能實現無刷新上傳,并且還支持拖拽,挺好的.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91高清免费在线观看| 欧美日韩免费观看中文| 欧美日韩国产成人在线观看| 精品精品国产国产自在线| 欧美精品激情视频| 亚洲国产精品99久久| 91在线视频导航| 亚洲成人久久久久| 亚洲精品二三区| 久久精品青青大伊人av| 亚洲女人天堂成人av在线| 日韩精品久久久久| 中文字幕亚洲激情| 伊人男人综合视频网| 国产精品日韩久久久久| 久久综合国产精品台湾中文娱乐网| 欧美在线视频a| 国内精品400部情侣激情| 2021国产精品视频| 国内精品久久久久影院优| 亚洲国产91精品在线观看| 国产精品video| 美女少妇精品视频| 国产午夜精品久久久| 亚洲国产精品电影在线观看| 一区二区欧美激情| 欧美日韩国产综合视频在线观看中文| 91久久久久久久久久久| 亚洲欧美日韩中文在线制服| 国产精品入口日韩视频大尺度| 国产精品久久久久久久久久久新郎| 欧美在线观看一区二区三区| 日韩视频在线观看免费| 亚洲bt欧美bt日本bt| www.亚洲成人| 精品久久久久久亚洲精品| 久久99国产综合精品女同| 亚洲在线视频福利| 精品成人69xx.xyz| 欧美午夜精品久久久久久久| 欧美综合国产精品久久丁香| 亚洲国产精品国自产拍av秋霞| 亚洲男人第一av网站| 精品爽片免费看久久| 在线视频欧美性高潮| 中文字幕日本欧美| 欧美激情免费视频| 亚洲视频在线免费看| 日韩av在线一区二区| 日韩网站免费观看| 亚洲一区二区日本| 欧美疯狂性受xxxxx另类| 国产精品日韩电影| 国产精品1区2区在线观看| 性色av一区二区三区在线观看| 亚洲国内精品视频| 欧美美最猛性xxxxxx| 亚洲视频777| 成人精品久久一区二区三区| 2019亚洲男人天堂| 一本色道久久综合狠狠躁篇的优点| 亚洲精品欧美一区二区三区| 亚洲国产高清福利视频| 亚洲国产精品资源| 亚洲精品www久久久久久广东| 国产精品久久久久久久久| 日韩在线观看成人| 精品中文字幕在线| 亚洲性线免费观看视频成熟| 九九综合九九综合| 久久av资源网站| 国产精品∨欧美精品v日韩精品| 伊人久久免费视频| 国产精品视频导航| 日韩欧美极品在线观看| 日韩欧美综合在线视频| 亚洲一区中文字幕| 午夜精品久久久久久久久久久久| 国产精品极品美女粉嫩高清在线| 成人网在线观看| 欧美性极品xxxx娇小| 韩国三级日本三级少妇99| 亚洲综合国产精品| 日日骚av一区| 亚洲电影成人av99爱色| 国产一区二区三区丝袜| 精品性高朝久久久久久久| 国产精品美乳在线观看| 美女av一区二区三区| 亚洲国产精品视频在线观看| 久久人人爽亚洲精品天堂| 欧美日韩国产中文字幕| 曰本色欧美视频在线| 欧美—级高清免费播放| 色综合亚洲精品激情狠狠| 久久国产精品偷| 亚洲视频在线免费观看| 深夜精品寂寞黄网站在线观看| 中文字幕av一区中文字幕天堂| 国产精品欧美亚洲777777| 国产91在线高潮白浆在线观看| 日韩av理论片| 日韩精品中文字幕视频在线| 欧美激情极品视频| 九九热在线精品视频| 欧美华人在线视频| 欧美精品激情blacked18| 国产精品久久中文| 久久久精品影院| 亚洲第五色综合网| 国产91色在线免费| 亚洲视频在线免费观看| 国产人妖伪娘一区91| 亚洲精品日韩在线| 91高清在线免费观看| 亚洲成人久久久| 久久久久久久久国产| 日韩中文字幕在线看| 亚洲福利在线视频| 国产a∨精品一区二区三区不卡| 亚洲国产小视频在线观看| 亚洲第一精品电影| 亚洲天堂精品在线| 国产精品久久久久久久久粉嫩av| 国产精品丝袜久久久久久不卡| 欧美国产高跟鞋裸体秀xxxhd| 午夜精品国产精品大乳美女| 亚洲少妇激情视频| 国产91精品久久久久| 亚洲欧美国产高清va在线播| 欧美精品videosex牲欧美| 国产精品视频自拍| 日本精品免费一区二区三区| 国产精品欧美一区二区| 日韩精品丝袜在线| 午夜美女久久久久爽久久| 欧美日韩一区二区精品| 美女999久久久精品视频| 欧美日韩激情美女| 日韩中文字幕网址| 亚洲精品动漫久久久久| 亚洲伦理中文字幕| 中文字幕无线精品亚洲乱码一区| 精品亚洲男同gayvideo网站| 91在线观看免费高清| 日韩女优在线播放| 97精品久久久中文字幕免费| 国产成人精品久久| 精品国产1区2区| 国产精品成人国产乱一区| 成人a视频在线观看| 91av在线看| 亚洲精品自拍偷拍| 亚洲欧美日韩久久久久久| 久久久久久九九九| 国产日韩中文字幕| 欧美另类暴力丝袜| 成人xxxxx| 欧美一级大片在线观看| 福利视频导航一区| 午夜精品久久久久久久99黑人| 亚洲国产精品小视频| 日韩美女激情视频| 亚洲欧美精品一区二区|