4

データベースにcsvファイルをインポートするためのコードを使用しましたが、そのファイルデータを読み取って表示する方法

drupal7で

csvファイルのインポートに次のコードを使用しました

<?php
  function file_upload_permission() {
    return array(
      'administer uploader' => array(
       'title' => t('Administer Uploader'),
       'description' => t('Allow the following roles to upload csv files to the server.'),
           ),
         );
     }

     /**
     * Implements hook_menu()
     */
     function file_upload_menu() {

      $items['file_upload/import'] = array(
      'title' => 'Upload a File',
      'type' => MENU_CALLBACK,
        'description' => 'Import a csv',
        'page callback' => 'drupal_get_form',
    'page arguments' => array('file_upload_import_form'),
         'access arguments' => array('access content'),
     'access callback' => TRUE
       ); 

    return $items;
   }

    /**
     * Builds a form that will allow users to upload csv files
     *   hook_menu()
     */
     function file_upload_import_form($form, $form_state) {

           $form['notes'] = array(
          '#type' => 'markup',
          '#markup' => '<div class="import-notes">A few notes when uploading. <ul><li>Make    
         sure           the file is in a .csv format.</li><li>Columns should be in *this*  
           order</li><li>Be sure to click the "Upload" button when you select a csv.</li>
         </ul></div>',
         '#upload_location' => 'public://tmp/',
          );

        $form['import'] = array(
          '#title' => t('Import'),
          '#type' => 'managed_file',
          '#description' => t('The uploaded csv will be imported and temporarily saved.'),
          '#upload_location' => 'public://tmp/',
          '#upload_validators' => array(
             'file_validate_extensions' => array('csv'),
                                  ),
                );

        $form['submit'] = array (
         '#type' => 'submit',
         '#value' => t('Import'),
         );
          return $form;

    }

      /**
      * Submit handler for file_upload_import_form()
      */
    function file_upload_import_form_submit($form, $form_state) {

    // Check to make sure that the file was uploaded to the server properly
       $uri = db_query("SELECT uri FROM {file_managed} WHERE fid = :fid", array(
                      ':fid' => $form_state['input']['import']['fid'],
                      ))->fetchField();

         if(!empty($uri)) {
         if(file_exists(drupal_realpath($uri))) { 
          // Open the csv
          $handle = fopen(drupal_realpath($uri), "r");
         // Go through each row in the csv and run a function on it. In this case we are 
           parsing by '|' (pipe) characters.

          // If you want commas are any other character, replace the pipe with it.

           while (($data = fgetcsv($handle, 0, ',', '"')) !== FALSE) {

       $result = db_insert('test')->fields(array('price' => $data[1],))->execute();
       $operations[] = array(
          'file_upload_import_batch_processing',  // The function to run on each row
           array($data),  // The row in the csv
          );
      }

      // Once everything is gathered and ready to be processed... well... process it!
      $batch = array(
      'title' => t('Importing CSV...'),
      'operations' => $operations,  // Runs all of the queued processes from the while loop 
       above.
     'finished' => 'file_upload_import_finished', // Function to run when the import is 
              successful
      'error_message' => t('The installation has encountered an error.'),
      'progress_message' => t('Imported @current of @total products.'),
     );
     batch_set($batch);
    fclose($handle);    
  }
}
 else {
  drupal_set_message(t('There was an error uploading your file. Please contact a System 
   administator.'), 'error');
  } 


}

このコードは、ファイルをparticulerフォルダーにアップロードし、テーブルfile_managedを使用してデータベースにアップロードする場合は正常に機能しますが、アップロード後、そのCsvファイルデータを表示してデータベースの新しいテーブルに挿入するにはどうすればよいですか?

if anyone knows , please let me know,
thanks in advance.
4

2 に答える 2

1

CSVファイルのインポートを可能にするFeedsモジュールを使用できます。フィードは通常、インポートされたデータからノードを作成するため、最終的に得られるのは、CSVファイルの行にそれぞれ対応するノードの束です。

データをカスタムテーブルにインポートする場合は、データをフィードと組み合わせて使用​​できます。プロジェクトページには次のように書かれています。

フィードを使用して、RSS、Atom、CSV、またはOPMLファイルをデータテーブルにインポートできます。

于 2012-10-13T17:18:54.757 に答える