Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Tipps & Tricks ›

Migrate csv to Drupal 6

Eingetragen von Dolce (6)
am 10.05.2013 - 13:42 Uhr in
  • Tipps & Tricks
  • Drupal 6.x

Hallo Drupalisten

Eigentlich komme ich aus der DotNet Ecke, darf aber neu Projekte in Drupal, IOS etc. entwickeln :-). Dies ist sehr spannend und leider zeigt die Lernkurve zu Beginn deutlich nach oben.

Teilprojekt Beschrieb:
Ich darf einen .csv Import to Drupal mit dem Migrate Modul Realisieren. Dieser Import wird pro Jahr etwa 1mio. Datensätze einlesen und nach Drupal migrieren. Soweit so gut.

Alle Columns aus dem .csv File sind als einzelne Taxonomien in Drupal 6.x angelegt und dem richtigen Inhaltstyp zugeordnet worden. Auf den Taxonomien sind die Tags aktiviert und es handelt sich bei allen Taxonomien um Pflichtfelder.

Der XDebug läuft, wie erwartet, durch die Implementierten Methoden.
Alle …_csv Columns enthalten die erwarteten Werte, wenn ich den Breakpoint bei „return true“ in der Funktion prepareRow($row) setzte.

Nun zu meinem Problem:
Interessant ist nun dass das mapping nur bei den Columns „Quelle Buchung“ und „Quelle Versicherung“ funktioniert und mir unter Inhalt die importierten Datensätze anzeigt. Die restlichen Spalten werden mit Leerstring befüllt. Sprich das mapping funktioniert nicht korrekt (einige Spalten werde importiert andere nicht (Gleicher Fehler in Englisch nur in MigrateDestinationTrem und nicht MigrateDestinationNode angewandt: )). Hat mir wer einen Tipp? Rechtschreibung bei dem Taxonomienamen sowie dem Taxonomi-Maschin_Name zum PHP-Code wurden bereits überprüft.

<?php
/**
* There are four essential components to set up in your constructor:
*  $this->source - An instance of a class derived from MigrateSource, this
*    will feed data to the migration.
*  $this->destination - An instance of a class derived from MigrateDestination,
*    this will receive data that originated from the source and has been mapped
*    by the Migration class, and create Drupal objects.
*  $this->map - An instance of a class derived from MigrateMap, this will keep
*    track of which source items have been imported and what destination objects
*    they map to.
*  Mappings - Use $this->addFieldMapping to tell the Migration class what source
*    fields correspond to what destination fields, and additional information
*    associated with the mappings.
*/
class VersicherungsfaktenTermMigration extends Migration {
  public function
__construct() {
   
// Process initialization and include it in the my_migrate group
   
parent::__construct(); //MigrateGroup::getInstance('migrate_versicherungsfakten')

    // Give a description to this process
   
$this->description = t('Import FINMA data to content type Versicherungsfakten');

   
// Add custom columns because 8,9,10 and 11 not exists in source cvs
   
$columns = array(
//      0 => array('Bereich_csv', 'Bereich'),
//      1 => array('Sitzland_csv', 'Sitzland'),
//      2 => array('VersichererName_csv', 'VersichererName'),
//      3 => array('QuelleAkro_csv', 'QuelleAkro'),
//      4 => array('KennzahlAkro_csv', 'KennzahlAkro'),
//      5 => array('KennzahlName_csv', 'KennzahlName'),
//      6 => array('Jahr_csv', 'Jahr'),
//      7 => array('Wert_csv', 'Wert'),
//      8 => array('VersichererGesellschaft_csv', 'VersichererGesellschaft'),
//      9 => array('QuelleSparte_csv', 'QuelleSparte'),
//      10 => array('QuelleBuchung_csv', 'QuelleBuchung'),
//      11 => array('QuelleVersicherung_csv', 'QuelleVersicherung')


     
array('Id_csv', 'Id'), // Integer
     
array('Bereich_csv', 'Bereich'),
      array(
'Sitzland_csv', 'Sitzland'),
      array(
'VersichererName_csv', 'VersichererName'),
      array(
'QuelleAkro_csv', 'QuelleAkro'),
      array(
'KennzahlAkro_csv', 'KennzahlAkro'),
      array(
'KennzahlName_csv', 'KennzahlName'),
      array(
'Jahr_csv', 'Jahr'),
      array(
'Wert_csv', 'Wert'), // Integer
     
array('VersichererGesellschaft_csv', 'VersichererGesellschaft'),
      array(
'QuelleSparte_csv', 'QuelleSparte'),
      array(
'QuelleBuchung_csv', 'QuelleBuchung'),
      array(
'QuelleVersicherung_csv', 'QuelleVersicherung'),

    );

  
$this->source = new MigrateSourceCSV(file_directory_path() . '/finma_import/FINMA_Basisdaten2010.csv',
     
$columns,
      array(
          
'delimiter' => ';',
          
'header_rows' => 1
     
)
   );

   
// Set up our destination content type
   
$this->destination = new MigrateDestinationNode("versicherungsfakten");
   
//$this->destination = new MigrateDestinationTerm("versicherungsfakten");


   
$this->map = new MigrateSQLMap($this->machineName,
      array(
          
'Id_csv' => array( // this field is used to connect user und profile2
            
'type' => 'int'
          
)
      ),
     
MigrateDestinationNode::getKeySchema()
     
//MigrateDestinationTerm::getKeySchema()
   
);

   
// Assign mappings TO destination fields FROM source fields. To discover
    // the names used in these calls, use the drush commands
    // drush migrate-fields-destination VersicherungsfaktenTerm
    // drush migrate-fields-source VersicherungsfaktenTerm
   
$this->addFieldMapping('Bereich', 'Bereich');
   
$this->addFieldMapping('Sitzland', 'Sitzland_csv');
   
$this->addFieldMapping('Versicherer Name', 'VersichererName_csv');
   
$this->addFieldMapping('Quelle Akro', 'QuelleAkro_csv');
   
$this->addFieldMapping('Kennzahl Akro', 'KennzahlAkro_csv');
   
$this->addFieldMapping('Kennzahl Name', 'KennzahlName_csv');
   
$this->addFieldMapping('Jahr', 'Jahr_csv');
   
$this->addFieldMapping('Wert', 'Wert_csv');
   
$this->addFieldMapping('Versicherer Gesellschaft', 'VersichererGesellschaft_csv');
   
$this->addFieldMapping('Quelle Sparte', 'QuelleSparte_csv');
   
$this->addFieldMapping('Quelle Buchung', 'QuelleBuchung_csv');
   
$this->addFieldMapping('Quelle Versicherung', 'QuelleVersicherung_csv');
   

  }

 
/**
   * The function prepareRow cant be overwrited in order to do some custom
   * processing when the source data has been read. The $row object contains
   * the field values of the current row being processed.
   *
   * In our case we use it to process the special mappings for the images,
   * gallery and documents fields. To achive this we have defined a custom
   * that we call for each field of type image or file.
   */

 
public function prepareRow($row) {
   
$this->splitQuelleAkroToQuelleDefinition($row);

   
//$new = $this->getFieldMappings($row->Bereich_csv); // = 'HaHa blabla';

    //print $new;
    //$this->node->nid = 432309;
   
return true;

  }


  private function
splitQuelleAkroToQuelleDefinition($row) {

    switch (
$row->QuelleAkro_csv) {
      case
'AL16F':
       
$row->QuelleSparte_csv = 'NaNa';
       
$row->QuelleBuchung_csv = 'Versicherte Summen und Renten';
       
$row->QuelleVersicherung_csv = 'Lebensversicherung';
       
$row->VersichererGesellschaft_csv = 'AXA';
        break;

      case
'AS02B':
       
$row->QuelleSparte_csv = 'HUHU';
       
$row->QuelleBuchung_csv = 'Versicherte Summen und Renten';
       
$row->QuelleVersicherung_csv = 'Lebensversicherung';
       
$row->VersichererGesellschaft_csv = 'AXA';
        break;

      default:
       
$row->QuelleSparte = 'Nein';
       
$row->QuelleBuchung = 'Nein';
       
$row->QuelleVersicherung = 'Nein';
       
$row->VersichererGesellschaft_csv = 'Nein';
    }
  }
}
 
?>

Technische Eckdaten:

Drupal 6.x
phpStorm als Entwicklungsumgebung (auf Windows 7)
Code Files auf VMware Linux Ubuntu gespeichert und via Netzlaufwerk unter Windows in phpStorm bearbeitet.
Mein erstelltes Modul ist vom CCK Modul abgeleitet.

Gruss und danke für euer Tipps....

Dolce

‹ Projekte managen mit Drupal [HOWTO] pixelgenaues Vermessen von Objekten auf einer Seite ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Zwei Fragen die mir dazu

Eingetragen von wla (9212)
am 10.05.2013 - 13:58 Uhr

Zwei Fragen die mir dazu direkt einfallen:
Sind die Daten im UTF8-Format?
Warum schreibst Du ein eigenes Modul, statt [do:feeds Feeds] und [do:feeds_tamper Feed_tamper] zu benutzen?

Beste Grüße
Werner

.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *

  • Anmelden oder Registrieren um Kommentare zu schreiben

UTF8-Format: wo kann ich das

Eingetragen von Dolce (6)
am 10.05.2013 - 14:25 Uhr

UTF8-Format: wo kann ich das prüfen?
Eigenes Modul: Weil mir das so vorgegeben wurde und es soll auch aktiviert.- und deaktiviert werden können.

Bei meinem Fall stimmt ja das Mapping in die Felder der Taxonomie nicht. Ich hab auch schon versucht über die Values via Vocabular ID den Taxonomien zuzuweisen.
Weiter ist die Frage hier noch offen, weshalb das Mapping bei 2 von 12 Feldern funktioniert...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Dolce schrieb UTF8-Format: wo

Eingetragen von torfnase (1523)
am 10.05.2013 - 14:27 Uhr
Dolce schrieb

UTF8-Format: wo kann ich das prüfen?

Wenn du eine CSV-Datei speicherst, dann mußt du doch die Kodierung festlegen, und im besten ist da wohl UTF8 als Kodierung

Dolce schrieb

Eigenes Modul: Weil mir das so vorgegeben wurde und es soll auch aktiviert.- und deaktiviert werden können.

Die Funktionalität von Feeds und Feeds Tamper geht weit über dein Modul hinaus und ist wesentlich flexibler. Da machen auch Taxonomie-Begriffe überhaupt keine Probleme.
Feeds und Feeds-Tamper kann man auch deaktivieren :-)
Ich habe spezielle zum CSV-Import vor kurzem ein auch ein Video veröffentlicht.
Ich bin mir da nicht so sicher, ob du den richtigen Weg beschreitest.

Gruß
Berthold Lausch

Drupal Video-Tutorials

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wie bereits erwähnt..

Eingetragen von Dolce (6)
am 10.05.2013 - 14:59 Uhr

bin ein Anfänger in der Drupal Welt und weiss somit noch nicht genau was alles möglich ist. werde jedoch deinen Ansatz prüfen. Was rechnest Du so als implementations aufwand?
Hab noch vergessen zu erwähnen, dass ich anschliessend über diese Daten einen Filter bauen darf um diese in Tabellen oder Grafiken dar zu stellen.

Muss ich anhand deines Videos anstatt Taxonomien Felder anlegen?
Weiter muss beachtet werden, dass ich mit Drupal 6 arbeite und mit Drupal 7 die Verschmelzung der Taxonomie und den Feldern enger verknüpft wurde.

Gruss Dolce

  • Anmelden oder Registrieren um Kommentare zu schreiben

Du mußt auf jeden Fall Felder

Eingetragen von wla (9212)
am 10.05.2013 - 14:59 Uhr

Du mußt auf jeden Fall Felder im Datensatz haben (eines oder mehrere, ein Feld ist dann einem Vokabular zugeordnet), die die Taxonomiebegriffe aufnehmen (einen oder mehrere, je nach Definition). Mit dem Import werden es Dupal-Nodes. Damit kannst Du alles tun, was so mit Nodes möglich ist, also auch mit Views in diversen Formaten und gefilter ausgeben.

Beste Grüße
Werner

.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ok vielen Dank bis jetzt

Eingetragen von Dolce (6)
am 10.05.2013 - 15:14 Uhr

Ich hab nun als erstes einen Inhaltstyp mit 12 Taxonomien.
Wenn ich dich nun richtig verstanden habe, sollte ich einen Inhaltstyp mit einer Taxonomie, welche meine 12 Felder hält, aufbauen.

Gruss Dolce

  • Anmelden oder Registrieren um Kommentare zu schreiben

Halt, das erscheint mir jetzt

Eingetragen von wla (9212)
am 10.05.2013 - 15:35 Uhr

Halt, das erscheint mir jetzt etwas verwirrend. Du solltest Dir als erstes mal Gedanken über eine vernünftige Datenstruktur machen. Hier unterscheidet sich Drupal deutlich von anderen CMS. Die Stuktur der Daten ist wesentlich für die weitere Arbeit. Wenn die nicht sinnvoll aufgesetzt ist, läufst Du in den Wald.

Beste Grüße
Werner
P.S. Du bekommst eine PM von mir

.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *

  • Anmelden oder Registrieren um Kommentare zu schreiben

nur als hinweis: nimm

Eingetragen von caw (2729)
am 10.05.2013 - 15:42 Uhr

nur als hinweis: nimm drupl7!! drupal6 hört bald auf...
und drupal 8 kommt bald schon

C.A.W. Webdesign

  • Anmelden oder Registrieren um Kommentare zu schreiben

bin leider...

Eingetragen von Dolce (6)
am 10.05.2013 - 15:49 Uhr

Bin leider, da ein Teil des Projektes bereits in Drupal 6 existent ist, an diese Version gebunden. werde deinen Vorschlag jedoch entgegen nehmen und anbringen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hab dir einen PM gesendet mit

Eingetragen von Dolce (6)
am 10.05.2013 - 15:50 Uhr

@wla: Hab dir einen PM gesendet mit meinem Skypenamen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Dolce schrieb Bin leider, da

Eingetragen von caw (2729)
am 10.05.2013 - 15:57 Uhr
Dolce schrieb

Bin leider, da ein Teil des Projektes bereits in Drupal 6 existent ist, an diese Version gebunden. werde deinen Vorschlag jedoch entgegen nehmen und anbringen.

dann erst upgraden auf d7..

C.A.W. Webdesign

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • benutzerdefinierte Felder vom Userprofil tauchen ungewollt oberhalb des Bodys jedes Forumtopics auf...
  • [gelöst] Mass contact Empfängerliste nach Taxonomy Term statt Rolle
  • Update V. 9.3.12 auf V. 9.4 mit Fehler: Modul mySQL fehlt. Bitte Hilfe.
  • Sprachpfad, in Drupal Korrekt einstellen, auch bei den Meta-Tags
  • Update von Drupal 9.3 auf 9.4 oder bei 9.3 bleiben
  • Terminverwaltung
  • Views in Seite einbetten
  • Hilfe! Nach Update auf 7.90 zeigt User reference (Kontrollkästchen/Auswahlknöpfe) nicht mehr vollständig an
  • ("Gelöst,...") Das Deinstallieren eines Content typen, der keinen Content hat, ist nicht möglich.
  • Drupal Website gestalten
  • DrupalCamping 2022 in Wolfsburg, 25. - 28. August
  • Entity Reference - Title Felder werden als Link angezeigt
Weiter

Neue Kommentare

  • Nein, das war es nicht. S. o.
    vor 2 Tagen 8 Stunden
  • Eventuell hier ein Hinweis?
    vor 2 Tagen 9 Stunden
  • Lösung gefunden
    vor 20 Stunden 1 Minute
  • Kalender und webform
    vor 4 Tagen 14 Stunden
  • Alle Funktionen sind in views schon enthalten
    vor 4 Tagen 14 Stunden
  • Danke, Werner. Composer läuft
    vor 6 Tagen 22 Minuten
  • Wenn eine neue Drupal
    vor 6 Tagen 1 Stunde
  • Nein. Mittlerweile denke ich,
    vor 6 Tagen 1 Stunde
  • Wurde der Update mit composer
    vor 6 Tagen 2 Stunden
  • Maik Petran schrieb und zwar
    vor 1 Woche 1 Tag

Statistik

Beiträge im Forum: 247845
Registrierte User: 19585

Neue User:

  • Tkakah
  • JeraldFub
  • andycrestodina

» Alle User anzeigen

User nach Punkten sortiert:
wla9212
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3845
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 1 Gast online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association