CCK Filefieldを使用します。 Flashを挿入して表示する

画像 サイト上のファイルを単にリンクとしてではなく、他の方法で表示する必要がある場合があります。 プレーヤーでビデオおよびオーディオファイルを表示し、表示(リスン)、swf-すぐにページに表示できるようにします。 マテリアルにファイルを添付するための優れたFilefieldモジュールがありますが、そのためのフォーマッタの選択はわずかです。 ファイルは参照によって簡単に表示できます。 他のモジュールは、その機能を少し拡張します。たとえば、Imagefieldでは、画像を表示できます。 SWFfieldモジュールの例を使用して、Flashコンテンツを表示する機能を追加する方法をアクセス可能な方法で説明しようとします。



さらに、多くのコード、いくつかの写真があり、一般的にすべてが退屈で退屈です...



開始する



モジュールディレクトリに新しいswffieldディレクトリを作成します。

モジュールについては、.infoファイルが必要です。この場合、 swffield.info

Copy Source | Copy HTML name = SwfField description = Flash CCK. dependencies[] = content dependencies[] = filefield package = CCK core = 6.x version = "6.x-1.1"



  1. Copy Source | Copy HTML name = SwfField description = Flash CCK. dependencies[] = content dependencies[] = filefield package = CCK core = 6.x version = "6.x-1.1"



  2. Copy Source | Copy HTML name = SwfField description = Flash CCK. dependencies[] = content dependencies[] = filefield package = CCK core = 6.x version = "6.x-1.1"



  3. Copy Source | Copy HTML name = SwfField description = Flash CCK. dependencies[] = content dependencies[] = filefield package = CCK core = 6.x version = "6.x-1.1"



  4. Copy Source | Copy HTML name = SwfField description = Flash CCK. dependencies[] = content dependencies[] = filefield package = CCK core = 6.x version = "6.x-1.1"



  5. Copy Source | Copy HTML name = SwfField description = Flash CCK. dependencies[] = content dependencies[] = filefield package = CCK core = 6.x version = "6.x-1.1"



  6. Copy Source | Copy HTML name = SwfField description = Flash CCK. dependencies[] = content dependencies[] = filefield package = CCK core = 6.x version = "6.x-1.1"



  7. Copy Source | Copy HTML name = SwfField description = Flash CCK. dependencies[] = content dependencies[] = filefield package = CCK core = 6.x version = "6.x-1.1"







また、 swffield.installファイルが必要です。

Copy Source | Copy HTML



  1. // hook_install(モジュールをインストール)
  2. 関数 swffield_install(){
  3. //コンテンツモジュールをロードします
  4. drupal_load( 'module' 、 'content' );
  5. //新しいモジュールのインストールについてCCKに通知します
  6. content_notify( 'install' 、 'swffield' );
  7. }
  8. // hook_uninstall(モジュールのアンインストール)
  9. 関数 swffield_uninstall(){
  10. drupal_load( 'module' 、 'content' );
  11. //新しいモジュールの削除についてCCKに通知します
  12. content_notify( 'uninstall' 、 'swffield' );
  13. }
  14. // hook_enable(モジュールを有効化)
  15. 関数 swffield_enable(){
  16. drupal_load( 'module' 、 'content' );
  17. //新しいモジュールが含まれていることをCCKに通知します
  18. content_notify( 'enable' 、 'swffield' );
  19. }
  20. // hook_disable(モジュールのシャットダウン)
  21. function swffield_disable(){
  22. drupal_load( 'module' 、 'content' );
  23. // CCKに新しいモジュールを無効にするよう指示します
  24. content_notify( 'disable' 、 'swffield' );
  25. }


モジュール



ファイルswffield.module 、 swffield.render.inc (ここではユーザーへのコンテンツの表示に関連するすべてのコードを取得します)およびswffield.widget.inc (管理パネルでフィールドを表示)を作成します。 原則として、すべてのコードはswffield.moduleで記述できます-それは動作します。



swffield.module

Copy Source | Copy HTML



  1. //必要なファイルを接続します
  2. module_load_include( 'inc' 、 'swffield' 、 'swffield.render' );
  3. module_load_include( 'inc' 、 'swffield' 、 'swffield.widget' );
  4. //初期化。 ファイルフィールドがあるかどうかを確認し、ない場合はモジュールを無効にします。
  5. 関数 swffield_init(){
  6. if (!module_exists( 'filefield' )){
  7. module_disable( array ( 'swffield' ));
  8. 帰る
  9. }
  10. }
  11. //ウィジェットのデータ入力フォームとその処理方法を設定します。
  12. //私たちのフィールドはFilefieldフィールドと変わりません
  13. 関数 swffield_elements(){
  14. $ filefield_elements = module_invoke( 'filefield' 、 'elements' );
  15. $ elements [ 'swffield_widget' ] = $ filefield_elements [ 'filefield_widget' ];
  16. $要素を 返し ます 。
  17. }
  18. // CCKフォーマッタ情報を報告します
  19. 関数 swffield_field_formatter_info(){
  20. $フォーマッタ = 配列 (
  21. 'swffield_flash' => 配列 (
  22. 'label' => t( 'Flash' )、
  23. 'フィールドタイプ' => 配列 ( 'filefield' )、
  24. 'description' => t( 'Flashコンテンツの表示' )、
  25. )、
  26. );
  27. $フォーマッタを 返します。
  28. }
  29. //デフォルトのフィールド値がFilefieldと同じであることを指定します
  30. function swffield_default_value(& $ form 、& $ form_state 、 $ field 、 $ delta ){
  31. return filefield_default_value( $ form 、 $ form_state 、 $ field 、 $ delta );
  32. }
  33. //フィールドを空と見なすタイミングを指定します
  34. function swffield_content_is_empty( $ item 、 $ field ){
  35. return filefield_content_is_empty( $ item 、 $ field );
  36. }
  37. //別のハンドラーを追加して、フィールド設定を保存します
  38. function swffield_form_content_field_overview_form_alter(& $ form 、& $ form_state ){
  39. $ form [ '#submit' ] [] = 'swffield_form_content_field_overview_submit' ;
  40. }
  41. //フィールド設定を保存するためのハンドラー
  42. function swffield_form_content_field_overview_submit(& $ form 、& $ form_state ){
  43. //マテリアルに新しいフィールドを追加する場合
  44. if ( isset ( $ form_state [ 'fields_added' ] [ '_add_new_field' ])&& isset ( $ form [ '#type_name' ])){
  45. //フィールドタイプ
  46. $ new_field = $ form_state [ 'fields_added' ] [ '_add_new_field' ];
  47. //材料タイプ
  48. $ node_type = $ form [ '#type_name' ];
  49. //フィールドデータを含む配列
  50. $ field = content_fields( $ new_field 、 $ node_type );
  51. //フィールドがモジュールによって追加された場合
  52. if ( $ field [ 'widget' ] [ 'module' ] == 'swffield' ){
  53. foreach ( $ field [ 'display_settings' ] as $ display_type => $ display_settings ){
  54. if ( $ field [ 'display_settings' ] [ $ display_type ] [ 'format' ] == 'default' ){
  55. // swffield_flashフィールドの表示を設定します
  56. $ field [ 'display_settings' ] [ $ display_type ] [ 'format' ] = 'swffield_flash' ;
  57. }
  58. }
  59. //フィールドを更新します
  60. content_field_instance_update( $ field );
  61. }
  62. }
  63. }


swffield.widget.inc

Copy Source | Copy HTML



  1. // CCKウィジェット情報を報告します
  2. 関数 swffield_widget_info(){
  3. 配列を返す (
  4. 'swffield_widget' => 配列 (
  5. 'label' => t( 'Flash' )、
  6. 'フィールドタイプ' => 配列 ( 'filefield' )、
  7. 「複数の値」 => CONTENT_HANDLE_CORE、
  8. 'callbacks' => 配列 ( 'default value' => CONTENT_CALLBACK_CUSTOM)、
  9. '説明' => 'Flashコンテンツ' 、
  10. )、
  11. );
  12. }
  13. //このフックは、フィールドがフォームに追加されるたびに呼び出されます
  14. function swffield_widget(& $ form 、& $ form_state 、 $ field 、 $ items 、 $ delta = 0 ){
  15. $ element = filefield_widget( $ form 、 $ form_state 、 $ field 、 $ items 、 $ delta );
  16. $要素を 返し ます 。
  17. }
  18. //ウィジェット設定(フィールド)
  19. function swffield_widget_settings( $ op 、 $ widget ){
  20. スイッチ ( $ op ){
  21. ケース 「フォーム」 :
  22. return swffield_widget_settings_form( $ widget );
  23. ケース 「検証」 :
  24. return swffield_widget_settings_validate( $ widget );
  25. ケース 「保存」 :
  26. return swffield_widget_settings_save( $ widget );
  27. }
  28. }
  29. //フィールド設定フォーム
  30. function swffield_widget_settings_form( $ widget ){
  31. $ form = module_invoke( 'filefield' 、 'widget_settings' 、 'form' 、 $ widget );
  32. //デフォルトでは、CCKはtxtファイルタイプを置き換えます
  33. // Swfに置き換えます
  34. if ( $ form [ 'file_extensions' ] [ '#default_value' ] == 'txt' ){
  35. $ form [ 'file_extensions' ] [ '#default_value' ] = 'swf' ;
  36. }
  37. //表示されるコンテンツの幅を示すフィールド「幅」
  38. $ form [ 'width' ] = 配列 (
  39. '#type' => 'textfield' 、
  40. '#title' => '幅' 、
  41. '#default_value' => $ widget [ 'width' ]? $ウィジェット [ 'width' ]: 470 、
  42. '#size' => 15 、
  43. '#maxlength' => 5 、
  44. '#description' => 'Flashコンテンツの幅' 、
  45. '#weight' => 2 。 1
  46. );
  47. //「高さ」に類似
  48. $ form [ 'height' ] = array (
  49. '#type' => 'textfield' 、
  50. '#title' => '高さ' 、
  51. '#default_value' => $ widget [ 'height' ]? $ウィジェット [ '高さ' ]: 350 、
  52. '#size' => 15 、
  53. '#maxlength' => 5 、
  54. '#description' => 'Flashコンテンツの高さ' 、
  55. '#weight' => 2 。 2
  56. );
  57. //ユーザーがJavascriptを無効にしている場合またはFlash Playerを使用していない場合の代替テキスト設定
  58. $ form [ 'alt_text' ] = array (
  59. '#type' => 'textarea' 、
  60. '#title' => '代替テキスト' 、
  61. '#default_value' => $ widget [ 'alt_text' ]? $ widget [ 'alt_text' ]: 'Dear friends!<br />このサイトの技術にはAdobe Flash Playerがプリインストールされている必要があるため、ブラウザのプラグインの最新バージョンを<a href = "からインストールすることを強くお勧めします。 http://www.adobe.com/go/getflashplayer">Adobe.com </a> ' 、
  62. '#description' => 'ユーザーにFlash Playerがインストールされていない場合、このテキストが表示されます' 、
  63. '#weight' => 2 。 3
  64. );
  65. $フォームを 返す ;
  66. }
  67. //設定フォーム検証ツール
  68. function swffield_widget_settings_validate( $ widget ){
  69. $ extensions = array_filter(explode( '' 、 $ widget [ 'file_extensions' ]));
  70. $ flash_extensions = array ( 'swf' );
  71. //ファイル拡張子を確認します
  72. if (count(array_diff( $ extensions 、 $ flash_extensions )))){
  73. form_set_error( 'file_extensions' 、 'SWF形式のみがサポートされています' );
  74. }
  75. //幅と高さを確認します
  76. foreach ( array ( 'width' 、 'height' ) as $ resolution ){
  77. if ( empty ( $ widget [ $ resolution ])||!preg_match( '/ ^ [0-9] + $ /' 、 $ widget [ $ resolution ])){
  78. form_set_error( $ resolution 、 '無効なコンテンツサイズが指定されました。' );
  79. }
  80. }
  81. return module_invoke( 'filefield' 、 'widget_settings' 、 'validate' 、 $ widget );
  82. }
  83. //フィールド設定を保存します
  84. function swffield_widget_settings_save( $ widget ){
  85. $ filefield_settings = module_invoke( 'filefield' 、 'widget_settings' 、 'save' 、 $ widget );
  86. return array_merge( $ filefield_settings 、 array ( 'width' 、 'height' 、 'alt_text' ));
  87. }


swffield.render.inc

Copy Source | Copy HTML



  1. //テーマフック
  2. //ウィジェットのテーマ関数を設定し、フォーマッターとサイトでの表示
  3. 関数 swffield_theme(){
  4. $テーマ = 配列 (
  5. 'swffield_widget' => 配列 (
  6. '引数' => 配列 ( '要素' => NULL)、
  7. )、
  8. 'swffield_formatter_swffield_flash' => 配列 (
  9. '引数' => 配列 ( '要素' => NULL)、
  10. )、
  11. 'swffield_flash' => 配列 (
  12. 'arguments' => 配列 ( 'item' => NULL、 'attributes' => NULL)、
  13. )、
  14. );
  15. $テーマを 返します。
  16. }
  17. //ウィジェットのテーマはフォーム要素と同じです
  18. function theme_swffield_widget( $ element ){
  19. テーマを返す ( 'form_element' 、 $ element 、 $ element [ '#children' ]);
  20. }
  21. //フォーマッタのテーマ
  22. function theme_swffield_formatter_swffield_flash( $ element ){
  23. //ファイルがアップロードされているかどうかを確認します
  24. if ( empty ( $ element [ '#item' ] [ 'fid' ])){
  25. return '' ;
  26. }
  27. $ field = content_fields( $ element [ '#field_name' ]、 $ element [ '#node' ]-> type);
  28. $ item = $ element [ '#item' ];
  29. //フィールドを表示するクラス
  30. $ class = 'swffield swffield-' 。 $ field [ 'field_name' ];
  31. // swffield_flash関数を使用して出力を返します
  32. テーマを返す ( 'swffield_flash' 、 $ item 、 array ( 'class' => $ class 、 'width' => $ field [ 'widget' ] [ 'width' ]、 'height' => $ field [ 'widget' ] [ 'height' ]、 'alt' => $フィールド [ 'widget' ] [ 'alt_text' ]));
  33. }
  34. //ヘルパーテーマ関数
  35. function theme_swffield_flash( $ item 、 $ attributes ){
  36. //ライブラリ「swfobject.js」をダウンロードします
  37. drupal_add_js(drupal_get_path( 'module' 、 'swffield' )。 "/" 。 "swfobject.js" );
  38. //表示されたアイテムのIDを生成します
  39. $ id = "swffield-" 。 rand(1、10000);
  40. //ファイルパス
  41. $ file = "/" 。 $アイテム [ 'filepath' ];
  42. //準備完了要素
  43. return "<div id = '" 。 $ id 。 "'class ='" 。 $属性 [ 'クラス' ]。 「 '>」
  44. 。 $属性 [ 'alt' ]
  45. 。 「<script type = 'text / javascript'>」
  46. 。 「var flashvars = {};」
  47. 。 "var params = {bgcolor: '#ffffff'、allowFullScreen: 'false'、allowScriptAccess: 'always'、wmode: 'opaque'};"
  48. 。 "new swfobject.embedSWF( '" 。 $ file 。 "'、 '" 。 $ id 。 "'、 '" 。 $ attributes [ ' width ' ]。 "'、 '" 。 $ attributes [ ' height ' ]。 " '、' 9.0.0 '、false、flashvars、params); "
  49. 。 「</ script>」
  50. 。 "</ div>" ;
  51. }


優れたjsライブラリSWFobjectを使用します。 swfobject.jsファイルは 、モジュールとともにディレクトリに配置する必要があります。

もう一つの微妙な点。 ページ上の要素の表示ごとに、固有のIDを生成する必要があります。これにより、コンテンツは後でJavaScriptによって挿入されます。 rand(1、10000)を使用しています。 もっと適切な方法があれば、コメントでそれを聞いてうれしいです。



おわりに



サイトのページにSWFコンテンツの表示を追加するために必要なのはそれだけです。 同様に、たとえば、FLVの場合は「ビデオプレーヤー」、MP3の場合は「オーディオプレーヤー」という表示を追加できます。



頑張って



All Articles