ユーザーがcckファイルフィールドを使用してcsvをアップロードする必要があります。次に、列の順序が正しいことを確認します。
私の調査の結果、ファイルフィールド用のカスタムバリデーターを作成するのが最善の選択肢であると思いました。私はこれをリソースとして使用しました: https://drupal.org/node/546146 それを書くために...
次に、csvを開いて読み取る方法の例としてこれを使用しました。 http://oliverhuynh.wordpress.com/2011/06/21/drupal-batch-csv-importing-template/ ...
私はこれに非常に慣れていないので、私が間違っていることを特定する洞察がありません...これが私のコードです:
function MYMODULE_form_alter(&$form, $form_state, $form_id) {
if($form_id == 'stocklist_node_form') {
$form['field_stocklist'][0]['#upload_validators']['stocklist_validation'] = array();
return $form;
}
}
/**
* The validation for the file.
*
*/
function stocklist_validation($field) {
// variable for error messages
$errors = array();
// do some processing on the field / file
$filepath = $field->filepath;
global $base_url;
$fileurl = $base_url . '/' . $file_path;
// Open the file
if ( $handle = fopen($fileurl, 'r') ) {
$line_count = 1 ;
$first = TRUE ;
if ( $line = fgetcsv($handle, 4096) ) {
// Validate the headers
if ( $line[0] !== 'manufacturer' ) {
$errors[] = t('Unable to verify uploaded file !filepath. Please ensure the file has the correct file type, column names and information.', array('!filepath' => $field->filename));
}
}
fclose($handle);
}
// in case of error, add error message
return $errors;
}
私はどんなヘルプやポインタにも本当に感謝します...私はそれを終えるのに一歩離れていると感じますが、Google検索が不足しています...有効なファイルと無効なファイルのどちらをアップロードしても問題ではなく、定義されたエラーメッセージ...なぜそれをしているのですか?
編集:
以下は、「在庫リスト」タイプのノードを表示しながらdevelを使用したスクリーンショットです。それが役立つかもしれないと思った...
これもうまくいきました:
/**
* The validation for the stocklist.
*
*/
function stocklist_validation($field) {
// variable for error messages
$errors = array();
// do some processing on the field / file
$filepath = $field->filepath;
// Open the file
if ( $handle = fopen($filepath, 'r') ) {
$line_count = 1 ;
$first = TRUE ;
if ( $line = fgetcsv($handle, 4096) ) {
// Validate the headers
if ( $line[0] !== 'something' ) {
$errors[] = t('Please ensure the files 1st column has the something in it. Including something as the heading.');
}
if ( $line[1] !== 'somethingelse' ) {
$errors[] = t('Please ensure the files 2nd column has the somethingelse in it. Including somethingelse as the heading.');
}
fclose($handle);
}
else {
$errors[] = t('Unable to open uploaded file !filepath.', array('!filepath' => $filepath));
}
}
// in case of errors, return error messages
return $errors;
}
最初の関数を変更する必要はありませんでした...
2番目の関数では、変更が必要なのはfopen()でした。次に、ばかのように、「有効な」ファイルが実際にはタブ区切りであることに気づきました...これらのファイルも受け入れることができるといいですね。一部のソフトウェアはcsvファイルをその形式で保存するため、私が明らかに使用しているOpenOfficeなどです。