Here, I want to import user from csv file in drupal 7 site.
Let's create a custom module and name the module as "csv_import".
csv_import.info
name = Csv Import
description = Import node from csv file.
core = 7.x
package = Hsk
csv_import.module
<?php
/**
* Implements hook_permission()
*/
function csv_import_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 csv_import_menu() {
$items['file-uploader'] = array(
'title' => 'Upload a File',
'type' => MENU_CALLBACK,
'description' => 'Import a csv',
'page callback' => 'drupal_get_form',
'page arguments' => array('csv_import_import_form'),
'access arguments' => array('administer uploader'),
);
return $items;
}
/**
* Builds a form that will allow users to upload csv files
*
* @see
* hook_menu()
*/
function csv_import_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 csv_import_import_form()
*/
function csv_import_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) {
$operations[] = array(
'csv_import_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' => 'csv_import_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');
}
}
/**
* This function runs the batch processing and creates nodes with then given information
* @see
* csv_import_import_form_submit()
*/
function csv_import_import_batch_processing($data) {
// Lets make the variables more readable.
$title = $data[0];
$body = $data[1];
$serial_num = $data[2];
// Find out if the node already exists by looking up its serial number. Each serial number should be unique. You can use whatever you want.
$nid = db_query("SELECT DISTINCT n.nid FROM {node} n " .
"INNER JOIN {field_data_field_serial_number} s ON s.revision_id = n.vid AND s.entity_id = n.nid " .
"WHERE field_serial_number_value = :serial", array(
':serial' => $serial_num,
))->fetchField();
if(!empty($nid)) {
// The node exists! Load it.
$node = node_load($nid);
// Change the values. No need to update the serial number though.
$node->title = $title;
$node->body['und'][0]['value'] = $body;
$node->body['und'][0]['safe_value'] = check_plain($body);
node_save($node);
}
else {
// The node does not exist! Create it.
global $user;
$node = new StdClass();
$node->type = 'page'; // Choose your type
$node->status = 1; // Sets to published automatically, 0 will be unpublished
$node->title = $title;
$node->uid = $user->uid;
$node->body['und'][0]['value'] = $body;
$node->body['und'][0]['safe_value'] = check_plain($body);
$node->language = 'und';
$node->field_serial_number['und'][0]['value'] = $serial_num;
$node->field_serial_number['und'][0]['safe_value'] = check_plain($serial_num);
node_save($node);
}
}
/**
* This function runs when the batch processing is complete
*
* @see
* csv_import_import_form_submit()
*/
function csv_import_import_finished() {
drupal_set_message(t('Import Completed Successfully'));
}
Let's create a custom module and name the module as "csv_import".
csv_import.info
name = Csv Import
description = Import node from csv file.
core = 7.x
package = Hsk
csv_import.module
<?php
/**
* Implements hook_permission()
*/
function csv_import_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 csv_import_menu() {
$items['file-uploader'] = array(
'title' => 'Upload a File',
'type' => MENU_CALLBACK,
'description' => 'Import a csv',
'page callback' => 'drupal_get_form',
'page arguments' => array('csv_import_import_form'),
'access arguments' => array('administer uploader'),
);
return $items;
}
/**
* Builds a form that will allow users to upload csv files
*
* @see
* hook_menu()
*/
function csv_import_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 csv_import_import_form()
*/
function csv_import_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) {
$operations[] = array(
'csv_import_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' => 'csv_import_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');
}
}
/**
* This function runs the batch processing and creates nodes with then given information
* @see
* csv_import_import_form_submit()
*/
function csv_import_import_batch_processing($data) {
// Lets make the variables more readable.
$title = $data[0];
$body = $data[1];
$serial_num = $data[2];
// Find out if the node already exists by looking up its serial number. Each serial number should be unique. You can use whatever you want.
$nid = db_query("SELECT DISTINCT n.nid FROM {node} n " .
"INNER JOIN {field_data_field_serial_number} s ON s.revision_id = n.vid AND s.entity_id = n.nid " .
"WHERE field_serial_number_value = :serial", array(
':serial' => $serial_num,
))->fetchField();
if(!empty($nid)) {
// The node exists! Load it.
$node = node_load($nid);
// Change the values. No need to update the serial number though.
$node->title = $title;
$node->body['und'][0]['value'] = $body;
$node->body['und'][0]['safe_value'] = check_plain($body);
node_save($node);
}
else {
// The node does not exist! Create it.
global $user;
$node = new StdClass();
$node->type = 'page'; // Choose your type
$node->status = 1; // Sets to published automatically, 0 will be unpublished
$node->title = $title;
$node->uid = $user->uid;
$node->body['und'][0]['value'] = $body;
$node->body['und'][0]['safe_value'] = check_plain($body);
$node->language = 'und';
$node->field_serial_number['und'][0]['value'] = $serial_num;
$node->field_serial_number['und'][0]['safe_value'] = check_plain($serial_num);
node_save($node);
}
}
/**
* This function runs when the batch processing is complete
*
* @see
* csv_import_import_form_submit()
*/
function csv_import_import_finished() {
drupal_set_message(t('Import Completed Successfully'));
}
Comments
Post a Comment