さらに、多くのコード、いくつかの写真があり、一般的にすべてが退屈で退屈です...
開始する
モジュールディレクトリに新しい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"
Copy Source | Copy HTML name = SwfField description = Flash CCK. dependencies[] = content dependencies[] = filefield package = CCK core = 6.x version = "6.x-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"
Copy Source | Copy HTML name = SwfField description = Flash CCK. dependencies[] = content dependencies[] = filefield package = CCK core = 6.x version = "6.x-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"
Copy Source | Copy HTML name = SwfField description = Flash CCK. dependencies[] = content dependencies[] = filefield package = CCK core = 6.x version = "6.x-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"
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
- // hook_install(モジュールをインストール)
- 関数 swffield_install(){
- //コンテンツモジュールをロードします
- drupal_load( 'module' 、 'content' );
- //新しいモジュールのインストールについてCCKに通知します
- content_notify( 'install' 、 'swffield' );
- }
- // hook_uninstall(モジュールのアンインストール)
- 関数 swffield_uninstall(){
- drupal_load( 'module' 、 'content' );
- //新しいモジュールの削除についてCCKに通知します
- content_notify( 'uninstall' 、 'swffield' );
- }
- // hook_enable(モジュールを有効化)
- 関数 swffield_enable(){
- drupal_load( 'module' 、 'content' );
- //新しいモジュールが含まれていることをCCKに通知します
- content_notify( 'enable' 、 'swffield' );
- }
- // hook_disable(モジュールのシャットダウン)
- function swffield_disable(){
- drupal_load( 'module' 、 'content' );
- // CCKに新しいモジュールを無効にするよう指示します
- content_notify( 'disable' 、 'swffield' );
- }
モジュール
ファイルswffield.module 、 swffield.render.inc (ここではユーザーへのコンテンツの表示に関連するすべてのコードを取得します)およびswffield.widget.inc (管理パネルでフィールドを表示)を作成します。 原則として、すべてのコードはswffield.moduleで記述できます-それは動作します。
swffield.module
Copy Source | Copy HTML
- //必要なファイルを接続します
- module_load_include( 'inc' 、 'swffield' 、 'swffield.render' );
- module_load_include( 'inc' 、 'swffield' 、 'swffield.widget' );
- //初期化。 ファイルフィールドがあるかどうかを確認し、ない場合はモジュールを無効にします。
- 関数 swffield_init(){
- if (!module_exists( 'filefield' )){
- module_disable( array ( 'swffield' ));
- 帰る
- }
- }
- //ウィジェットのデータ入力フォームとその処理方法を設定します。
- //私たちのフィールドはFilefieldフィールドと変わりません
- 関数 swffield_elements(){
- $ filefield_elements = module_invoke( 'filefield' 、 'elements' );
- $ elements [ 'swffield_widget' ] = $ filefield_elements [ 'filefield_widget' ];
- $要素を 返し ます 。
- }
- // CCKフォーマッタ情報を報告します
- 関数 swffield_field_formatter_info(){
- $フォーマッタ = 配列 (
- 'swffield_flash' => 配列 (
- 'label' => t( 'Flash' )、
- 'フィールドタイプ' => 配列 ( 'filefield' )、
- 'description' => t( 'Flashコンテンツの表示' )、
- )、
- );
- $フォーマッタを 返します。
- }
- //デフォルトのフィールド値がFilefieldと同じであることを指定します
- function swffield_default_value(& $ form 、& $ form_state 、 $ field 、 $ delta ){
- return filefield_default_value( $ form 、 $ form_state 、 $ field 、 $ delta );
- }
- //フィールドを空と見なすタイミングを指定します
- function swffield_content_is_empty( $ item 、 $ field ){
- return filefield_content_is_empty( $ item 、 $ field );
- }
- //別のハンドラーを追加して、フィールド設定を保存します
- function swffield_form_content_field_overview_form_alter(& $ form 、& $ form_state ){
- $ form [ '#submit' ] [] = 'swffield_form_content_field_overview_submit' ;
- }
- //フィールド設定を保存するためのハンドラー
- function swffield_form_content_field_overview_submit(& $ form 、& $ form_state ){
- //マテリアルに新しいフィールドを追加する場合
- if ( isset ( $ form_state [ 'fields_added' ] [ '_add_new_field' ])&& isset ( $ form [ '#type_name' ])){
- //フィールドタイプ
- $ new_field = $ form_state [ 'fields_added' ] [ '_add_new_field' ];
- //材料タイプ
- $ node_type = $ form [ '#type_name' ];
- //フィールドデータを含む配列
- $ field = content_fields( $ new_field 、 $ node_type );
- //フィールドがモジュールによって追加された場合
- if ( $ field [ 'widget' ] [ 'module' ] == 'swffield' ){
- foreach ( $ field [ 'display_settings' ] as $ display_type => $ display_settings ){
- if ( $ field [ 'display_settings' ] [ $ display_type ] [ 'format' ] == 'default' ){
- // swffield_flashフィールドの表示を設定します
- $ field [ 'display_settings' ] [ $ display_type ] [ 'format' ] = 'swffield_flash' ;
- }
- }
- //フィールドを更新します
- content_field_instance_update( $ field );
- }
- }
- }
swffield.widget.inc
Copy Source | Copy HTML
- // CCKウィジェット情報を報告します
- 関数 swffield_widget_info(){
- 配列を返す (
- 'swffield_widget' => 配列 (
- 'label' => t( 'Flash' )、
- 'フィールドタイプ' => 配列 ( 'filefield' )、
- 「複数の値」 => CONTENT_HANDLE_CORE、
- 'callbacks' => 配列 ( 'default value' => CONTENT_CALLBACK_CUSTOM)、
- '説明' => 'Flashコンテンツ' 、
- )、
- );
- }
- //このフックは、フィールドがフォームに追加されるたびに呼び出されます
- function swffield_widget(& $ form 、& $ form_state 、 $ field 、 $ items 、 $ delta = 0 ){
- $ element = filefield_widget( $ form 、 $ form_state 、 $ field 、 $ items 、 $ delta );
- $要素を 返し ます 。
- }
- //ウィジェット設定(フィールド)
- function swffield_widget_settings( $ op 、 $ widget ){
- スイッチ ( $ op ){
- ケース 「フォーム」 :
- return swffield_widget_settings_form( $ widget );
- ケース 「検証」 :
- return swffield_widget_settings_validate( $ widget );
- ケース 「保存」 :
- return swffield_widget_settings_save( $ widget );
- }
- }
- //フィールド設定フォーム
- function swffield_widget_settings_form( $ widget ){
- $ form = module_invoke( 'filefield' 、 'widget_settings' 、 'form' 、 $ widget );
- //デフォルトでは、CCKはtxtファイルタイプを置き換えます
- // Swfに置き換えます
- if ( $ form [ 'file_extensions' ] [ '#default_value' ] == 'txt' ){
- $ form [ 'file_extensions' ] [ '#default_value' ] = 'swf' ;
- }
- //表示されるコンテンツの幅を示すフィールド「幅」
- $ form [ 'width' ] = 配列 (
- '#type' => 'textfield' 、
- '#title' => '幅' 、
- '#default_value' => $ widget [ 'width' ]? $ウィジェット [ 'width' ]: 470 、
- '#size' => 15 、
- '#maxlength' => 5 、
- '#description' => 'Flashコンテンツの幅' 、
- '#weight' => 2 。 1
- );
- //「高さ」に類似
- $ form [ 'height' ] = array (
- '#type' => 'textfield' 、
- '#title' => '高さ' 、
- '#default_value' => $ widget [ 'height' ]? $ウィジェット [ '高さ' ]: 350 、
- '#size' => 15 、
- '#maxlength' => 5 、
- '#description' => 'Flashコンテンツの高さ' 、
- '#weight' => 2 。 2
- );
- //ユーザーがJavascriptを無効にしている場合またはFlash Playerを使用していない場合の代替テキスト設定
- $ form [ 'alt_text' ] = array (
- '#type' => 'textarea' 、
- '#title' => '代替テキスト' 、
- '#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> ' 、
- '#description' => 'ユーザーにFlash Playerがインストールされていない場合、このテキストが表示されます' 、
- '#weight' => 2 。 3
- );
- $フォームを 返す ;
- }
- //設定フォーム検証ツール
- function swffield_widget_settings_validate( $ widget ){
- $ extensions = array_filter(explode( '' 、 $ widget [ 'file_extensions' ]));
- $ flash_extensions = array ( 'swf' );
- //ファイル拡張子を確認します
- if (count(array_diff( $ extensions 、 $ flash_extensions )))){
- form_set_error( 'file_extensions' 、 'SWF形式のみがサポートされています' );
- }
- //幅と高さを確認します
- foreach ( array ( 'width' 、 'height' ) as $ resolution ){
- if ( empty ( $ widget [ $ resolution ])||!preg_match( '/ ^ [0-9] + $ /' 、 $ widget [ $ resolution ])){
- form_set_error( $ resolution 、 '無効なコンテンツサイズが指定されました。' );
- }
- }
- return module_invoke( 'filefield' 、 'widget_settings' 、 'validate' 、 $ widget );
- }
- //フィールド設定を保存します
- function swffield_widget_settings_save( $ widget ){
- $ filefield_settings = module_invoke( 'filefield' 、 'widget_settings' 、 'save' 、 $ widget );
- return array_merge( $ filefield_settings 、 array ( 'width' 、 'height' 、 'alt_text' ));
- }
swffield.render.inc
Copy Source | Copy HTML
- //テーマフック
- //ウィジェットのテーマ関数を設定し、フォーマッターとサイトでの表示
- 関数 swffield_theme(){
- $テーマ = 配列 (
- 'swffield_widget' => 配列 (
- '引数' => 配列 ( '要素' => NULL)、
- )、
- 'swffield_formatter_swffield_flash' => 配列 (
- '引数' => 配列 ( '要素' => NULL)、
- )、
- 'swffield_flash' => 配列 (
- 'arguments' => 配列 ( 'item' => NULL、 'attributes' => NULL)、
- )、
- );
- $テーマを 返します。
- }
- //ウィジェットのテーマはフォーム要素と同じです
- function theme_swffield_widget( $ element ){
- テーマを返す ( 'form_element' 、 $ element 、 $ element [ '#children' ]);
- }
- //フォーマッタのテーマ
- function theme_swffield_formatter_swffield_flash( $ element ){
- //ファイルがアップロードされているかどうかを確認します
- if ( empty ( $ element [ '#item' ] [ 'fid' ])){
- return '' ;
- }
- $ field = content_fields( $ element [ '#field_name' ]、 $ element [ '#node' ]-> type);
- $ item = $ element [ '#item' ];
- //フィールドを表示するクラス
- $ class = 'swffield swffield-' 。 $ field [ 'field_name' ];
- // swffield_flash関数を使用して出力を返します
- テーマを返す ( 'swffield_flash' 、 $ item 、 array ( 'class' => $ class 、 'width' => $ field [ 'widget' ] [ 'width' ]、 'height' => $ field [ 'widget' ] [ 'height' ]、 'alt' => $フィールド [ 'widget' ] [ 'alt_text' ]));
- }
- //ヘルパーテーマ関数
- function theme_swffield_flash( $ item 、 $ attributes ){
- //ライブラリ「swfobject.js」をダウンロードします
- drupal_add_js(drupal_get_path( 'module' 、 'swffield' )。 "/" 。 "swfobject.js" );
- //表示されたアイテムのIDを生成します
- $ id = "swffield-" 。 rand(1、10000);
- //ファイルパス
- $ file = "/" 。 $アイテム [ 'filepath' ];
- //準備完了要素
- return "<div id = '" 。 $ id 。 "'class ='" 。 $属性 [ 'クラス' ]。 「 '>」
- 。 $属性 [ 'alt' ]
- 。 「<script type = 'text / javascript'>」
- 。 「var flashvars = {};」
- 。 "var params = {bgcolor: '#ffffff'、allowFullScreen: 'false'、allowScriptAccess: 'always'、wmode: 'opaque'};"
- 。 "new swfobject.embedSWF( '" 。 $ file 。 "'、 '" 。 $ id 。 "'、 '" 。 $ attributes [ ' width ' ]。 "'、 '" 。 $ attributes [ ' height ' ]。 " '、' 9.0.0 '、false、flashvars、params); "
- 。 「</ script>」
- 。 "</ div>" ;
- }
優れたjsライブラリSWFobjectを使用します。 swfobject.jsファイルは 、モジュールとともにディレクトリに配置する必要があります。
もう一つの微妙な点。 ページ上の要素の表示ごとに、固有のIDを生成する必要があります。これにより、コンテンツは後でJavaScriptによって挿入されます。 rand(1、10000)を使用しています。 もっと適切な方法があれば、コメントでそれを聞いてうれしいです。
おわりに
サイトのページにSWFコンテンツの表示を追加するために必要なのはそれだけです。 同様に、たとえば、FLVの場合は「ビデオプレーヤー」、MP3の場合は「オーディオプレーヤー」という表示を追加できます。
頑張って