Importazione dati
Ciao sono nuovo di Drupal ma ho parecchia esperienza sul Web.
Sto tentando di importare dei dati nel modulo FAQ:
Sono riuscito ad importare il nodo principale con l'istruzione node_save($node):
-------------------------
$node = new stdClass();
$node->type = 'faq'; // Your specified content type
$node->title = "My imported FAQ";
$node->body = "The body of my imported FAQ.\n\nAdditional Information";
$node->created = time();
$node->changed = $node->created;
$node->status = 1;
$node->promote = 1;
$node->sticky = 0;
$node->format = 1; // Filtered HTML
$node->uid = 1; // UID of content owner
$node->language = 'und'; // If known, the taxonomy TID values can be added as an array.
$node->field_category[0]['value'] = 26;
node_save($node);
-------------------------
Mi da un errore, giustamente, manca la parte per importare la domanda nella tabella "faq_question"
Mi potete dare una dritta?
Grazie
Risposte
Ciao, che errore ti
Ciao, che errore ti restituisce?
* Notice: Undefined property:
* Notice: Undefined property: stdClass::$detailed_question in faq_insert() (line 267 of /data3/intranet/www/html/sites/all/modules/faq/faq.module).
* PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'detailed_question' cannot be null: INSERT INTO {faq_questions} (nid, vid, question, detailed_question) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3); Array ( [:db_insert_placeholder_0] => 13 [:db_insert_placeholder_1] => 18 [:db_insert_placeholder_2] => My imported FAQ [:db_insert_placeholder_3] => ) in faq_insert() (line 269 of /data3/intranet/www/html/sites/all/modules/faq/faq.module).
Mmmm, forse ho capito, come
Mmmm, forse ho capito, come uno grande :-),
aggiungendo:
$node->detailed_question = "";
non mi da più l'errore però mi mancano dei pezzi:
non ritrovo l'inserimento nel body
$node->body = "The body of my imported FAQ.\n\nAdditional Information";
e nemmeno l'inserimento nel campo category che è un campo che ho aggiunto io
$node->field_category[0]['value'] = 26;
Cosa sbaglio? grazie
Roberto
Ciao, ho testato questo
Ciao, ho testato questo codice e funziona:
<?php
$node = new stdClass();
$node->type = 'article';
$node->title = "My imported FAQ";
$node->body['und'][0]['format'] = 'filtered_html';
$node->body['und'][0]['value'] = "The body of my imported FAQ.\n\nAdditional Information";
$node->created = time();
$node->changed = $node->created;
$node->status = 1;
$node->promote = 1;
$node->sticky = 0;
$node->uid = 1; // UID of content owner
$node->language = 'und'; // If known, the taxonomy TID values can be added as an array.
$node->field_category['und'][0] = array('tid' =>'2');
node_save($node);
?>
nel mio caso field_category è un campo tassonomia.
Vedi se ok anche nel tuo caso.
Fischia se funziona!!! Sei un
Fischia se funziona!!!
Sei un grande! Grazie
Quindi se ho capito la logica a body e category bisogna inserire un primo livello di array per specificare la lingua ['und']
purtroppo nelle guide che ho letto non c'era questo passaggio specificato... è una novità del D7?
Sì, precisamente (per un
Sì, precisamente (per un codice più "elegante") "und" è il valore della costante LANGUAGE_NONE (http://api.drupal.org/api/drupal/includes--bootstrap.inc/constant/LANGUA...).
Ciao, si è verificato
Ciao, si è verificato un'altro problema.
Come avrai capito sto realizzando una funzioncina di importazione, per importare alcune FAQ da un altro archivio.
Me ne importa 2 perfettamente poi alla terza mi da questo errore:
PDOException: in field_sql_storage_field_storage_write() (line 425 of /data3/intranet/www/html/modules/field/modules/field_sql_storage/field_sql_storage.module).
Il titolo si vede, ma il corpo/body no. Tutto mi fa pensare a qualche carattere strano in quel body... ma ho verificato non c'è nulla di strano.
Mi rendo conto che è un po' difficile fare una diagnosi ma forse mi puoi dare una dritta per capire meglio cosa succede?
Forse non sto imboccando la strada giusta? C'è un modo migliore per importare questi dati.
Posto anche il codice, avrò fatto qualcosa che non va!?!
while($row=mysql_fetch_array($result))
{
// impostazioni nodo faq
// Construct the new node object.
$node = new stdClass();
$node->type = 'faq'; // Your specified content type
$node->created = time();
$node->changed = $node->created;
$node->status = 1;
$node->promote = 0;
$node->sticky = 0;
$node->format = 1; // Filtered HTML
$node->uid = 1; // UID of content owner
$node->language = LANGUAGE_NONE; // If known, the taxonomy TID values can be added as an array.
$node->detailed_question = "";
// scrittura faq
$node->title = strip_tags($row['pn_question']);
$node->body[LANGUAGE_NONE][0]['format'] = 'filtered_html';
$node->body[LANGUAGE_NONE][0]['value'] = $row['pn_answer'];
$node->field_category[LANGUAGE_NONE][0] = array('tid' =>'26');
node_save($node);
unset($node);
}
Ho scoperto che gli da
Ho scoperto che gli da fastidio la 'è' ... accentata... addirittura?
Ho un po' di pasticcio sul DB un po' in latin1 e un po' in utf8... cosa mi consigli?
Sembra un problema di set di
Sembra un problema di set di caratteri nel db...Ok, sembra che il problema è stato individuato ... penso tu possa convertire le tabelle o le colonne "incriminate" tramite istruzioni sql "alter table".
Ciao, ho risolto con una
Ciao, ho risolto con una funzioncina che mi converte tutte le accentate tipo (
è in è
) mi sembrava più pulito ... cosa dici!?!Solo che, nel body tutto bene, nel titolo mi scrive prorpio
è
mi viene da piangere.:-\
Ti conviene risolvere il
Ti conviene risolvere il problema come ti avevo accennato sopra, riportando tabelle/colonne al giusto set di caratteri.
Problema: quando inserisco un
Problema: quando inserisco un titolo FAQ che contiene una lettere accentate mi restituisce errore node_save()
PDOException: in drupal_write_record() (line 6776 of /data3/intranet/www/html/includes/common.inc).
Ho fatto diverse prove:
- tutte le tabelle in utf8_general_ci (stesso problema)
allora ho pensato "dipende dal charset del db sorgente"
- tutte le tabelle in latin1_swedish_ci (stesso problema)
Il bello è che se inserisco un record con un accentata nella tabella faq_questions con phpmyadmin funziona senza problemi.
Non so più cosa tentare :-\
Ho provato anche con il tuo
Ho provato anche con il tuo esempio:
<?php
$node = new stdClass();
$node->type = 'article';
$node->title = "My imported FAQ";
$node->body['und'][0]['format'] = 'filtered_html';
$node->body['und'][0]['value'] = "Questo è il body of my imported FAQ.\n\nAdditional Information";
$node->created = time();
$node->changed = $node->created;
$node->status = 1;
$node->promote = 1;
$node->sticky = 0;
$node->uid = 1; // UID of content owner
$node->language = 'und'; // If known, the taxonomy TID values can be added as an array.
$node->field_category['und'][0] = array('tid' =>'2');
node_save($node);
?>
Inserendo nel body un carattere accentato e mi da lo stesso errore.
Mi rispondo da solo ...
Mi rispondo da solo ... posso!?! :-)
serve la funzione drupal_convert_to_utf8 ...
posto il codice corretto, spero sia utile:
$node = new stdClass();
$node->type = 'article';
$node->title = "La mia FAQ importata";
$node->body['und'][0]['format'] = 'filtered_html';
$term="Il corpo della mia FAQ è importato.\n\nAdditional Information";
$node->body['und'][0]['value'] = drupal_convert_to_utf8( $term, 'iso-8859-1' );
$node->created = time();
$node->changed = $node->created;
$node->status = 1;
$node->promote = 1;
$node->sticky = 0;
$node->uid = 1; // UID of content owner
$node->language = 'und'; // If known, the taxonomy TID values can be added as an array.
$node->field_category['und'][0] = array('tid' =>'2');
node_save($node);
Ciao, ho avuto modo di
Ciao, ho avuto modo di testare quest'ultimo codice inserendolo direttamente dentro un nodo e selezionando "Filtro PHP" come filtro in input. Nel mio caso ha generato correttamente la pagina con la "è" accentata.
Prova a linkare il file di testo completo.
Se la soluzione è questa, mi
Se la soluzione è questa, mi viene un dubbio ... ma che codifica usi per il file che stai programmando?
VH l'encoding del file ... ho
VH l'encoding del file ... ho capito! hai ragione!
era la cosa più semplice ma vigliacco se ci ho pensato... grazie ancora.