Node Import (Drupalmodule)

Uit DeVliegendeWiki

Ga naar: navigatie, zoeken
Preview-scherm bij importeren: Het Description-veld wordt niet getoond: Wel de afbeelding en oa. de prijs -- Dit is zoals het normaal werkt

Zie ook Importeren van artikelgegevens in Übercart 1.x

Node import is een module om verschillende soorten content (nodes, gebruikers, etc.) te importeren in een Drupalinstallatie. Het is beschikbaar voor Drupal 4.7, 5, 6 en 7. De versie voor Drupal 6 bereikte pas in 2011 productiekwaliteit. Voor ons was dit een van de belangrijkste redenen om te wachten met de overstap naar Drupal 6. Voor Drupal 7 bestaat voor dit doel daarnaast de Feeds-module.

Wat je kunt importeren:

  • Nodes: blog, books, comment, ruwe node-gegevens (titel, body, etc.), path, taxonomieietermen, uploads;
  • Gebruikers;
  • Vocabulaires;
  • Specifieke CCK-velden: Date, Email, FileField, ImageField, Link, Node reference, Number, Text en User reference;
  • Alternatieve contenttypen waar een contrib of add-on voor Node Import voor is gemaakt: Übercart en Location. Voor Drupal 6 is deze contrib opgenomen in de module zelf.

Inhoud

Handige kolomnamen

Het is aan te bevelen om op de eerste rij van een spreadsheet met te importeren gegevens, de namen van de kolommen te vermelden.

Importeren wordt een stuk gemakkelijker als de kolommen exact dezelfde namen hebben als de corresponderende velden in Node Import. Enkele van deze velden:

  • Name - Artikelnaam, dus de aanhef die bezoekers zien. Liefst een leesbare en aantrekkelijke naam of zin
  • Image - ?
  • Vocabularies - Onder dit kopje verschijnen vermoedelijk de namen van de verschillende taxonomieën die beschikbaar zijn
  • Description
  • SKU
  • Sell price
  • Shippable
  • URL path settings

Geen tekstscheidingsteken

In OpenOffice/LibreOffice Calc kun je een scheidingsteken uit de lijst kiezen, of je eigen scheidingsteken invoeren, of het veld leeg maken

Importeren lijkt het beste te gaan als er geen tekens worden gebruikt om strings aan te geven. Oa. het veld shippable wordt daardoor onleesbaar. Daarnaast snap ik toch al niet waarom je dergelijke tekens nodig hebt. Het veldscheidingsteken is voldoende.

Tab als veldscheidingsteken

Gebruik tab als veldscheidingsteken, want dat komt (tot op heden) nooit voor binnen velden. In tegenstelling tot bv. dubbele aanhalingstekens of enkele aanhalingstekens, want dat komt wel degelijk voor, al is het maar om inches aan te geven in maten.

Valuta als numeriek veld

Een euroteken is geen probleem, maar gedoe met spaties rondom het bedrag, wel. Daarnaast kan het voorkomen dat geldbedragen onder water meer decimalen kennen, en dat kan afrondfouten geven.

Beste oplossing tot op heden: In de database waar de productgegevens uit afkomstig zijn, prijzen niet als valuta opslaan, maar als enkele-precisie-getallen, en daar het aantal decimalen bijwerken met functie Round (OpenOffice/LibreOffice/Microsoft Access).

Exporteren vanuit Microsoft Access 2003

Microsoft Access klaagt bij exporteren snel dat de inhoud van een veld te lang is. Ik heb de indruk dat je die foutmeldingen kunt negeren.
Kies exportindeling met scheidingsteken
Tab als veldscheidingsteken, geen tekstscheidingsteken, veldnamen meeexporteren
Misschien handig: Je kunt exportinstellingen opslaan. Hier kun je ook het decimaalscheidingsteken bepalen. Dat kan erg handig zijn, als je computer en de Drupalsite verschillende tekens gebruiken. Ook handig: UTF-8 instellen als codetabel in plaats van Microsofts proprietaire codetabel

Afbeeldingen mee-importeren (Drupal 5)

Zie artikel Afbeeldingen mee-importeren (Drupal)

Taxonomische informatie meeïmporteren

Taxonomische termen die je wilt meeïmporteren met artikelen, moeten voorkomen in de afzonderlijke taxonomie. Je kunt dus geen taxonomie on the fly laten genereren aan de hand van de geïmporteerde artikelen

Zie ook Taxonomieën (algemeen) en Taxonomy CSV import/export (Drupalmodule)

In juni 2011 hadden we een situatie waarin we in Übercart zo'n 700 artikelen wilde invoeren. De taxonomie die daar bij hoorde bevatte maar liefst 23.000 termen. Die moesten dus automatisch geïmporteerd worden. Aanpak:

  • Vanuit de aangeleverde artikelgegevens twee aparte overzichten gegenereerd: taxonomie, en opgeschoonde artikelgegevens. Dit is trouwens erg veel werk, en nog lastig werk ook. Het zou wellicht interessant zijn om te zien of dit (deels) te automatiseren is. Zie elders in dit artikel
  • Taxonomie geïmporteerd middels de Taxonomy_csv-module (Drupal 5, mede naar aanleiding van [1]. Status voor Drupal 6 onbekend);
  • Artikelen geïmporteerd middels Node Import.

Voorbeelden:

Met één compleet pad

Hier is een succesvol voorbeeld van een importbestand waarbij een artikel slechts via één pad bereikbaar is:

ProductSKU	ProductName	Shippabe SellPrice  Description	   Taxonomie
Test           Test	        1	 4,19	    Omschrijving   Afmetingen|8 x 5 x 13,5

Met één eindelement

Succesvol voorbeeld met een eindelement en spaties in de naam van de taxon [2]:

ProductSKU   ProductName   Shippabe   SellPrice   Description    Taxonomie
Test         Test          1          4,19        Omschrijving   8 x 5 x 13,5

Geen aanhalingstekens of komma's

Geen aanhalingstekens of komma's gebruiken [3]. Dit werkt dus niet:

ProductSKU   ProductName   Shippabe   SellPrice   Description    Taxonomie
Test         Test          1          4,19        Omschrijving   "8 x 5 x 13,5"

Double pipe + eindtermen

Dit werkt [4]:

ProductSKU   ProductName   Shippabe   SellPrice   Description    Taxonomie
Test         Test          1          4,19        Omschrijving   8 x 5 x 13,5||FSC1.6

Omdat je alleen de namen van de elementen op het laatste taxonomische niveau specificeert, verschijnen ook alleen die termen als tags op de productpagina, en dat is waarschijnlijk wel prettig.

Alleen eindtermen specificeren kan problematisch zijn als verschillende paden bij gelijke eindtermen belanden. Bv.:

Auto's > Ferrari's > Rood
Auto's > Rode Ster Tractors > Rood

Maar ook daar is een oplossing voor:

Complete paden

In dit geval wordt een pad gegeven (Afmetingen > 8 x 5 x 13,5) en een eindterm. Dit werkt.

ProductSKU	ProductName	Shippabe	SellPrice	Description	Taxonomie
Test02	Test02	1	4,19	Omschrijving	Afmetingen|8 x 5 x 13,5||FSC1.6

Uitsluitend complete paden werkt ook:

ProductSKU	ProductName	Shippabe	SellPrice	Description	Taxonomie
Test03	Test03	1	4,19	Omschrijving	Afmetingen|8 x 5 x 13,5||Multitool|FEIN|FSC1.6

Voorbeeld

In januari 2012 heb ik 89 artikelen geïmporteerd. De bijbehorende taxonomie was al eerder geïmporteerd.

De betreffende artikelgegevens in Calc. Laatste kolom bevat taxonomische informatie
Het CSV-bestand met tab als veldscheidingsteken, en zonder tekstscheidingsteken

Bronnen

Taxonomieën automatisch genereren

Het is veel werk om van een aangeleverde Excel-sheet met artikelgegevens een werkende vocabulaire te genereren. Hiervoor moet je twee overzichten genereren:

  • Artikelgegevens inclusief bijbehorende paden;
  • Apart overzicht met alle paden.

Terwijl alle informatie al voorhanden is in de aangeleverde artikelgegevens. Dit roept om automatisering. Ideeën:

  • De gegevens die in de aangeleverde tabel samengevoegd zijn in kolommen, weer splitsen;
  • Paden defineren. Dat is waarschijnlijk deels handwerk;
  • Automatisch genereren van een vocabulaire aan de hand van de paden;
  • Misschien kan dit als een LibreOffice- of Drupalmodule.

Bestaande artikelen overschrijven

Het zou mogelijk moeten zijn om bestaande artikelen te overschrijven:

Vragen & antwoorden

Beantwoord

  • Vaak lijkt het dat Node Import de dubbele aanhalingstekens rondom velden niet verwijdert. Dit geeft storingen, bv. voor waardes in de kolom shippable. Moet je er voor zorgen dat er totaal geen dubbele aanhalingstekens worden gebruikt, of alleen voor 'tekstvelden'? --> Geen teken rondom velden gebruiken
  • Hoe importeer je ook al weer afbeeldingen mee? --> Zie artikel Node Importmodule
  • Moet je per se eerst een taxonomie defineren? Kan die niet gewoon on the fly vastgesteld worden ahv. de geïmporteerde artikelen? --> Ja, dat moet apart. Zie elders in dit artikel.

Open

Bronnen

Persoonlijke instellingen