Предполагая, что у меня есть CSV, как это:Drupal 7 | Импорт CSV, строка за строкой, в пользовательской таблице
value1,value2
value1,value2
и таблицу с двумя столбцами
column1|column2
как я могу программно импортировать в CSV в таблицу ?
Предполагая, что у меня есть CSV, как это:Drupal 7 | Импорт CSV, строка за строкой, в пользовательской таблице
value1,value2
value1,value2
и таблицу с двумя столбцами
column1|column2
как я могу программно импортировать в CSV в таблицу ?
@ ответ erier действительно хорош и получить работу.
Поскольку вопрос отмечен с помощью Drupal 7, я думал, что отправлю метод пользовательского модуля Drupal, адаптировав ответ @ erier и уберег его.
Для основы пользовательского модуля вы можете увидеть этот простой пример.
function custom_module_form($form, &$form_state) {
$form['csv_upload'] = array(
'#type' => 'file',
'#title' => t('Choose a file'),
'#title_display' => 'invisible',
'#size' => 22,
'#upload_validators' => array('file_clean_name' => array()),
);
$form['upload'] = array(
'#type' => 'submit',
'#value' => 'Upload',
);
}
function custom_module_form_validate($form, &$form_state) {
$validators = array('file_validate_extensions' => array('csv'));
// Check for a new uploaded file.
$file = file_save_upload('csv_upload', $validators);
//$file = $form_state['values']['csv_upload'];
if (isset($file)) {
// File upload was attempted.
if ($file) {
// Put the temporary file in form_values so we can save it on submit.
$form_state['values']['csv_upload_file'] = $file;
}
else {
// File upload failed.
form_set_error('csv_upload', t('The file could not be uploaded.'));
}
}
}
function custom_module_submit($form, &$form_state) {
$file = $form_state['values']['csv_upload_file'];
$file->status = FILE_STATUS_PERMANENT;
$file->filename = str_replace(' ', '_', $file->filename);
file_save($file);
$csv_file = file_load($file->fid);
$file = fopen($csv_file->uri, "r");
while(! feof($file))
{
$customer = fgetcsv($file));
db_insert('your_db_table')
->fields(array(
'column1' => $customer[0],
'column2' => $customer[1]
))
->execute();
}
fclose($file);
drupal_set_message('CSV data added to the database');
}
function file_clean_name($file) {
$file->filename = str_replace(' ', '_', $file->filename);
}
Это означает, что ваш вопрос касался таблицы базы данных.
Если вы имели в виду в HTML таблицу, вы можете адаптировать функцию представить после $csv_file = file_load($file->fid);
как это:
$headers = array('column 1', 'column 2');
$rows = array();
$file = fopen("contacts.csv","r");
while(! feof($file))
{
$customer = fgetcsv($file));
$rows[] = array($customer[0], $customer[1]);
}
fclose($file);
return theme('table', array('header' => $headers, 'rows' => $rows);
Или адаптировать два путем добавления данных в базу данных и отображения на экране без второй базы данных удар.
Этот модуль может помочь вам https://www.drupal.org/sandbox/draenen/2442165 Это требует ленты, но она расширяет его для работы с пользовательскими таблицами (не Друпал лиц)
Это то, что я придумал - я не PHP эксперт - и это не кажется красивым - но это работает!
$handle = fopen('/path/to/file/filename.csv', 'r');
$row = fgetcsv($handle);
for ($e = 0; $row = fgetcsv($handle); $e++) {
$record = array();
foreach ($row as $field) {
$record[] = $field;
}
db_insert('your_db_table')
->fields(array(
'column1' => $record[0],
'column2' => $record[1]
))
->execute();
}
fclose($handle);
таблица будет выглядеть следующим образом:
column1|column2
---------------
value1|value2
value1|value2