原則として、多くの質問は写真付き商品の大量輸入によって引き起こされます。
私の場合、商品とその属性(名前、説明、価格、著者、写真へのリンクなど)のリストを含むExcelファイルがありました。
純粋な形式のExcelファイルは、インポート用のフィードが非常に難しいため、* .csvファイルとして保存しました。
私は今それで次に何をすべきかを説明します:)
node_importモジュールを使用して、アドインモジュールを作成しました。
アドインモジュールで、フックhook_node_import_fields()を追加し、追加のフィールドを担当します。
Copy Source | Copy HTML function my_module_node_import_fields( $type ) { if (_uc_product_node_import_is_product( $type )) { $fields = array ( 'my_field_0' => 'MY FIELD 0' , 'my_field_1' => 'MY FIELD 1' , ... 'my_field_n' => 'MY FIELD N' , 'my_image_filepath' => 'MY Image filepath' , ); return $fields ; }
Copy Source | Copy HTML function my_module_node_import_fields( $type ) { if (_uc_product_node_import_is_product( $type )) { $fields = array ( 'my_field_0' => 'MY FIELD 0' , 'my_field_1' => 'MY FIELD 1' , ... 'my_field_n' => 'MY FIELD N' , 'my_image_filepath' => 'MY Image filepath' , ); return $fields ; }
Copy Source | Copy HTML function my_module_node_import_fields( $type ) { if (_uc_product_node_import_is_product( $type )) { $fields = array ( 'my_field_0' => 'MY FIELD 0' , 'my_field_1' => 'MY FIELD 1' , ... 'my_field_n' => 'MY FIELD N' , 'my_image_filepath' => 'MY Image filepath' , ); return $fields ; }
Copy Source | Copy HTML function my_module_node_import_fields( $type ) { if (_uc_product_node_import_is_product( $type )) { $fields = array ( 'my_field_0' => 'MY FIELD 0' , 'my_field_1' => 'MY FIELD 1' , ... 'my_field_n' => 'MY FIELD N' , 'my_image_filepath' => 'MY Image filepath' , ); return $fields ; }
Copy Source | Copy HTML function my_module_node_import_fields( $type ) { if (_uc_product_node_import_is_product( $type )) { $fields = array ( 'my_field_0' => 'MY FIELD 0' , 'my_field_1' => 'MY FIELD 1' , ... 'my_field_n' => 'MY FIELD N' , 'my_image_filepath' => 'MY Image filepath' , ); return $fields ; }
Copy Source | Copy HTML function my_module_node_import_fields( $type ) { if (_uc_product_node_import_is_product( $type )) { $fields = array ( 'my_field_0' => 'MY FIELD 0' , 'my_field_1' => 'MY FIELD 1' , ... 'my_field_n' => 'MY FIELD N' , 'my_image_filepath' => 'MY Image filepath' , ); return $fields ; }
Copy Source | Copy HTML function my_module_node_import_fields( $type ) { if (_uc_product_node_import_is_product( $type )) { $fields = array ( 'my_field_0' => 'MY FIELD 0' , 'my_field_1' => 'MY FIELD 1' , ... 'my_field_n' => 'MY FIELD N' , 'my_image_filepath' => 'MY Image filepath' , ); return $fields ; }
Copy Source | Copy HTML function my_module_node_import_fields( $type ) { if (_uc_product_node_import_is_product( $type )) { $fields = array ( 'my_field_0' => 'MY FIELD 0' , 'my_field_1' => 'MY FIELD 1' , ... 'my_field_n' => 'MY FIELD N' , 'my_image_filepath' => 'MY Image filepath' , ); return $fields ; }
Copy Source | Copy HTML function my_module_node_import_fields( $type ) { if (_uc_product_node_import_is_product( $type )) { $fields = array ( 'my_field_0' => 'MY FIELD 0' , 'my_field_1' => 'MY FIELD 1' , ... 'my_field_n' => 'MY FIELD N' , 'my_image_filepath' => 'MY Image filepath' , ); return $fields ; }
Copy Source | Copy HTML function my_module_node_import_fields( $type ) { if (_uc_product_node_import_is_product( $type )) { $fields = array ( 'my_field_0' => 'MY FIELD 0' , 'my_field_1' => 'MY FIELD 1' , ... 'my_field_n' => 'MY FIELD N' , 'my_image_filepath' => 'MY Image filepath' , ); return $fields ; }
Copy Source | Copy HTML function my_module_node_import_fields( $type ) { if (_uc_product_node_import_is_product( $type )) { $fields = array ( 'my_field_0' => 'MY FIELD 0' , 'my_field_1' => 'MY FIELD 1' , ... 'my_field_n' => 'MY FIELD N' , 'my_image_filepath' => 'MY Image filepath' , ); return $fields ; }
Copy Source | Copy HTML function my_module_node_import_fields( $type ) { if (_uc_product_node_import_is_product( $type )) { $fields = array ( 'my_field_0' => 'MY FIELD 0' , 'my_field_1' => 'MY FIELD 1' , ... 'my_field_n' => 'MY FIELD N' , 'my_image_filepath' => 'MY Image filepath' , ); return $fields ; }
my_field_nは、オプションフィールドのマシン名です。
MY FIELD Nは、インポート時にユーザーにフィールドが表示される方法です。
my_image_filepath-画像ファイルへの直接パスを含める必要があります。
次に、フックhook_node_import_prepare()を追加します。 ここで、フィールドの有効性を確認し、インポートの準備をすることができます。
Copy Source | Copy HTML
- function my_module_node_import_prepare(& $ node 、 $ preview = FALSE){
- $ errors = array ();
- if (! isset ( $ node-> my_field_0)|| empty ( $ node-> my_field_0)){
- $ errors [] = t( 'ERROR!on MY FIELD 0' );
- } else $ node-> field_0 = $ node-> my_field_0;
- if (! isset ( $ node-> my_field_1)|| empty ( $ node-> my_field_1)){
- $ errors [] = t( 'ERROR!on MY FIELD 1' );
- } else $ node-> field_1 = $ node-> my_field_1;
- ...
- if (! isset ( $ node-> my_field_n)|| empty ( $ node-> my_field_n)){
- $ errors [] = t( 'ERROR!on MY FIELD N' );
- } else $ node-> field_n = $ node-> my_field_n;
- $エラーを 返します。
- }
ここでフィールド( my_field_n )をチェックします。何かが間違っている場合はエラーになり、そうでない場合は実際のフィールド( field_n )に書き込みます。
ところで、フィールドがCCK'shoeの場合、次のようにアクセスする必要があります$ node-> field_n [0] ['value']
画像をインポートするために、別の関数を作成しました。
Copy Source | Copy HTML
- function _my_module_create_image_field( $ filepath 、 $ nid ){
- $ file_temp = file_get_contents ( $ filepath );
- $ file_temp = file_save_data( $ file_temp 、file_directory_path()。 '/ images /'。basename($ filename )、FILE_EXISTS_RENAME);
- $ image_field [ '0' ] [ 'fid' ] = 'upload' ;
- $ image_field [ '0' ] [ 'title' ] = basename( $ file_temp );
- $ image_field [ '0' ] [ 'nid' ] = $ nid ;
- $ image_field [ '0' ] [ 'filename' ] = basename( $ file_temp );
- $ image_field [ '0' ] [ 'filepath' ] = $ file_temp ;
- $ image_field [ '0' ] [ 'filemime' ] = mime_content_type( $ file_temp );
- $ image_field [ '0' ] [ ' filesize ' ] = filesize ( $ file_temp );
- $ image_fieldを返します。
- }
フックhook_node_import_prepare()でこれを使用します:
Copy Source | Copy HTML
- if (! $ preview ){
- if ( isset ( $ node-> my_image_filepath)){
- if (file_exists( $ node-> naeyc_image_filepath)){
- $ node-> field_image_cache = _my_module_create_image_field( $ node-> my_image_filepath、 $ node-> nid);
- } else $ errors [] = $ node-> my_image_filepath。 t( 'ファイルが存在しません。' );
- }
- }
プレビューは$ previewが担当します。 プレビューのこのコードは実行されませんが、ユーザーがインポートを開始した後にのみ実行されます。
それがすべてです。
あなたの批判を待っています:)