Form APIを介してファイルをアップロードする



なぜなら 私はこのプロセスをすぐには得られませんでした。それを説明することにしました。誰かが助けてくれるかもしれません。



さらに面白くするために、ランダムに画像を表示するモジュールの作成について説明します。



挑戦する
タスクはまさに​​、Form APIを介してDrupalにファイルをアップロードする機能の実装です。 また、以下で説明する例は、この実装の例にすぎません。



機能的
画像を追加または削除できる管理領域があります。 管理パネルからランダムに選択された画像を返す関数もあります。 すべてが非常に簡単です:)



実装
まず、管理パネルで設定を使用してページを作成する必要があります。

Copy Source | Copy HTML /** <br/> * Implementation of hook_menu(). <br/> */ function ivt_header_menu() { $items [ 'admin/settings/ivt_header_settings' ] = array ( 'title' => t( 'IVT Header Settings' ), 'page callback' => 'drupal_get_form' , 'page arguments' => array ( '_ivt_header_settings_form' ), 'access arguments' => array ( 'access administration pages' ), 'type' => MENU_NORMAL_ITEM, ); return $items ; }



  1. Copy Source | Copy HTML /** <br/> * Implementation of hook_menu(). <br/> */ function ivt_header_menu() { $items [ 'admin/settings/ivt_header_settings' ] = array ( 'title' => t( 'IVT Header Settings' ), 'page callback' => 'drupal_get_form' , 'page arguments' => array ( '_ivt_header_settings_form' ), 'access arguments' => array ( 'access administration pages' ), 'type' => MENU_NORMAL_ITEM, ); return $items ; }



  2. Copy Source | Copy HTML /** <br/> * Implementation of hook_menu(). <br/> */ function ivt_header_menu() { $items [ 'admin/settings/ivt_header_settings' ] = array ( 'title' => t( 'IVT Header Settings' ), 'page callback' => 'drupal_get_form' , 'page arguments' => array ( '_ivt_header_settings_form' ), 'access arguments' => array ( 'access administration pages' ), 'type' => MENU_NORMAL_ITEM, ); return $items ; }



  3. Copy Source | Copy HTML /** <br/> * Implementation of hook_menu(). <br/> */ function ivt_header_menu() { $items [ 'admin/settings/ivt_header_settings' ] = array ( 'title' => t( 'IVT Header Settings' ), 'page callback' => 'drupal_get_form' , 'page arguments' => array ( '_ivt_header_settings_form' ), 'access arguments' => array ( 'access administration pages' ), 'type' => MENU_NORMAL_ITEM, ); return $items ; }



  4. Copy Source | Copy HTML /** <br/> * Implementation of hook_menu(). <br/> */ function ivt_header_menu() { $items [ 'admin/settings/ivt_header_settings' ] = array ( 'title' => t( 'IVT Header Settings' ), 'page callback' => 'drupal_get_form' , 'page arguments' => array ( '_ivt_header_settings_form' ), 'access arguments' => array ( 'access administration pages' ), 'type' => MENU_NORMAL_ITEM, ); return $items ; }



  5. Copy Source | Copy HTML /** <br/> * Implementation of hook_menu(). <br/> */ function ivt_header_menu() { $items [ 'admin/settings/ivt_header_settings' ] = array ( 'title' => t( 'IVT Header Settings' ), 'page callback' => 'drupal_get_form' , 'page arguments' => array ( '_ivt_header_settings_form' ), 'access arguments' => array ( 'access administration pages' ), 'type' => MENU_NORMAL_ITEM, ); return $items ; }



  6. Copy Source | Copy HTML /** <br/> * Implementation of hook_menu(). <br/> */ function ivt_header_menu() { $items [ 'admin/settings/ivt_header_settings' ] = array ( 'title' => t( 'IVT Header Settings' ), 'page callback' => 'drupal_get_form' , 'page arguments' => array ( '_ivt_header_settings_form' ), 'access arguments' => array ( 'access administration pages' ), 'type' => MENU_NORMAL_ITEM, ); return $items ; }



  7. Copy Source | Copy HTML /** <br/> * Implementation of hook_menu(). <br/> */ function ivt_header_menu() { $items [ 'admin/settings/ivt_header_settings' ] = array ( 'title' => t( 'IVT Header Settings' ), 'page callback' => 'drupal_get_form' , 'page arguments' => array ( '_ivt_header_settings_form' ), 'access arguments' => array ( 'access administration pages' ), 'type' => MENU_NORMAL_ITEM, ); return $items ; }



  8. Copy Source | Copy HTML /** <br/> * Implementation of hook_menu(). <br/> */ function ivt_header_menu() { $items [ 'admin/settings/ivt_header_settings' ] = array ( 'title' => t( 'IVT Header Settings' ), 'page callback' => 'drupal_get_form' , 'page arguments' => array ( '_ivt_header_settings_form' ), 'access arguments' => array ( 'access administration pages' ), 'type' => MENU_NORMAL_ITEM, ); return $items ; }



  9. Copy Source | Copy HTML /** <br/> * Implementation of hook_menu(). <br/> */ function ivt_header_menu() { $items [ 'admin/settings/ivt_header_settings' ] = array ( 'title' => t( 'IVT Header Settings' ), 'page callback' => 'drupal_get_form' , 'page arguments' => array ( '_ivt_header_settings_form' ), 'access arguments' => array ( 'access administration pages' ), 'type' => MENU_NORMAL_ITEM, ); return $items ; }



  10. Copy Source | Copy HTML /** <br/> * Implementation of hook_menu(). <br/> */ function ivt_header_menu() { $items [ 'admin/settings/ivt_header_settings' ] = array ( 'title' => t( 'IVT Header Settings' ), 'page callback' => 'drupal_get_form' , 'page arguments' => array ( '_ivt_header_settings_form' ), 'access arguments' => array ( 'access administration pages' ), 'type' => MENU_NORMAL_ITEM, ); return $items ; }



  11. Copy Source | Copy HTML /** <br/> * Implementation of hook_menu(). <br/> */ function ivt_header_menu() { $items [ 'admin/settings/ivt_header_settings' ] = array ( 'title' => t( 'IVT Header Settings' ), 'page callback' => 'drupal_get_form' , 'page arguments' => array ( '_ivt_header_settings_form' ), 'access arguments' => array ( 'access administration pages' ), 'type' => MENU_NORMAL_ITEM, ); return $items ; }





削除用にダウンロードしたファイルのリスト、ファイルをダウンロードするためのフィールド、およびボタンでフォーム自体を記述します。

Copy Source | Copy HTML



  1. function _ivt_header_settings_form(){
  2. $ form [ '#attributes' ] [ 'enctype' ] = 'multipart / form-data' ;
  3. $ form [ 'header_images_del' ] = array
  4. '#type' => 'チェックボックス'
  5. '#title' => t( '画像の削除' )、
  6. '#o​​ptions' => variable_get( 'ivt_header_images'配列 ())、
  7. );
  8. $ form [ 'header_images_upload' ] = array
  9. '#type' => 'file'
  10. '#title' => t( '新しい画像を添付' )、
  11. );
  12. $ form [ 'submit' ] = array
  13. '#type' => 'submit'
  14. '#value' => t( 'Go!'
  15. );
  16. $フォームを 返す ;
  17. }


次のようになります。





このフォームの検証ツールを作成し、そこで画像をサイトにアップロードします。

Copy Source | Copy HTML



  1. function _ivt_header_settings_form_validate( $ form 、& $ form_state ){
  2. ifisset$ form [ 'header_images_upload' ])){
  3. //ファイル拡張子の検証
  4. $ validators = array'file_validate_extensions' => array'png' ));
  5. //ファイルがダウンロードされるフォルダー
  6. $ dir = file_directory_path()。 '/ヘッダー' ;
  7. //ディレクトリが存在するかどうかを確認します。 彼女がいない場合、彼女は作成されます
  8. if (file_check_directory( $ dir1 )){
  9. //ファイルをロードします
  10. $ file = file_save_upload( 'header_images_upload'$ validators$ dir );
  11. //新しいファイルフィールドを$ form_stateに追加します
  12. if$ file$ form_state [ 'values' ] [ 'header_image_file' ] = $ file ;
  13. }
  14. }
  15. }


提出では、選択したファイルを削除し、新しいファイルを追加します。

Copy Source | Copy HTML



  1. function _ivt_header_settings_form_submit( $ form 、& $ form_state ){
  2. $ image_file = $ form_state [ 'values' ] [ 'header_image_file' ];
  3. $ images_del = $ form_state [ 'values' ] [ 'header_images_del' ];
  4. $ images_del = array_filter( $ images_del );
  5. //ダウンロード済みのファイルのリストを取得します
  6. $ header_images = variable_get( 'ivt_header_images'array ());
  7. //アップロードするファイルを選択した場合
  8. if$ image_file ){
  9. //リストに追加します
  10. $ header_images [ $ image_file- > fid] = l( $ image_file- > filename、 $ image_file- > filepath);
  11. drupal_set_message(t( 'Image%filenameがアップロードされました!'配列'%filename' => $ image_file- > filename)));
  12. }
  13. //ファイルが送信中に削除された場合
  14. if$ images_del ){
  15. //すべてのファイルを調べます
  16. foreach$ images_del as $ fid ){
  17. //データベースからファイルをロードします
  18. $ sql_file = db_fetch_object(db_query( "SELECTファイルパス、ファイルFROMファイルWHERE fid = '%s'"$ fid ));
  19. //データベースからファイルを削除します
  20. db_query( 'DELETE FROM {files} WHERE fid =%d'$ fid );
  21. //ファイルを削除します
  22. file_delete( $ sql_file- > filepath);
  23. //リストからファイルを削除します
  24. 設定解除$ header_images [ $ fid ]);
  25. drupal_set_message(t( 'Image%filenameが削除されました!'配列'%filename' => $ sql_file- > filename)));
  26. }
  27. }
  28. //リストを保存します
  29. variable_set( 'ivt_header_images'$ header_images );
  30. }


リストから任意の画像を取得して返す関数を記述するだけです。

Copy Source | Copy HTML



  1. 関数 ivt_header_get_image( $ fid = null ){
  2. グローバル $ base_url ;
  3. //引数がない場合、任意に取得します
  4. if (! $ fid ){
  5. //リストをロードします
  6. $ header_images = variable_get( 'ivt_header_images'array ());
  7. //ランダムを取る
  8. $ fid = array_rand( $ header_images );
  9. }
  10. //画像へのパスを取得します
  11. $ sql_file = db_fetch_object(db_query( "SELECTファイルパスFROMファイルWHERE fid = '%s'"$ fid ));
  12. $ filepath = $ sql_file- > filepath;
  13. $ image_html = "<img src = '"$ base_url'/' $ filepath「 '/>」 ;
  14. //画像を返します
  15. return $ header_images$ image_html'' ;
  16. }


以上です。



All Articles