Feeds-module & referenced entity

Uit De Vliegende Brigade
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Naar navigatie springen Naar zoeken springen

Het probleem:

  • Ik wil eerst een dataset importeren (bv. koolborstels) en daarna een gerelateerde dataset (bv. tools waar die eerdere koolborstels mee corresponderen). Hoe doe je dat? Hoe zorg je ervoor dat die relatie er is?
  • En nog iets ingewikkelder: Die relatie is bidrectioneel. Dus objecten koolborstels bevatten een entity reference-veld naar tools, en tools bevatten een entity reference-veld naar koolborstels
  • En om het nog iets ingewikkelder te maken: Het zijn veel-op-veel-relaties. Dus de velden waarmee de entiteiten naar elkaar refereren, bevatten geïmplodeerde referenties (Met "|" als scheidingsteken).

Vraagstukken

  • Hoe werkt entity reference precies? Moet je iets doen met GUID? Hoe zorg je ervoor dat je gewoon je eiden SKU's kunt gebruiken? Moet je iets doen met die entity reference-subvelden?
  • Hoe werkt explode precies? Ik krijg 'm niet goed aan de praat.

Praktijkvoorbeeld

Koolborstel-entiteit (P2), inclusief veld field_powertool van het type entity reference
Mapping import koolborstel-entiteiten: En passant worden alle velden van object powertool ingevuld. Verrassend

Simpele test - Simpel probleem

Deze test boorduurt voort op het voorbeeld hier. Er is een tweede content type explode_test2 aangemaakt. Vanaf explode_test wordt daarnaar verwezen

Eih, een probleem

Hier gaat het mis

  • Ik heb geen idee wat ik moet invullen
  • Wat ik probeerde, werkte niet: Geen foutmelding, maar ook geen waarde in het referentieveld
  • Het is nog gekker: Bij het aanmaken van de 'doel-entiteit' kon ik geen primaire sleutel defineren. Hoe werkt dit?

Opnieuw zonder succes

Doel: Instanties explode_test importeren, inclusief verwijzingen naar bestaande instanties explode_test2, zonder explode:

  • Er zijn twee instanties van entiteit explode_test2, met unieke titel, sku & body
  • Entiteit explode_test bevat een veld referentie_test02. Dat moet verwijzen naar een explode_test2-instantie
  • Feeds Importer-entiteit: explode_test

Verschillende mappings geprobeerd

  • Title lookup
  • Entity-ID (optie 1)
  • Entity-ID (optie 2)

Verschillende opties referenced entity-veld geprobeerd

  • Zoals in Kolibrie-voorbeeldsite
  • Met en zonder inline-entity
  • Autocomplete

Steeds hetzelfde resultaat als hiervoor: Geen waardes geïmporteerd in het referentieveld, maar ook geen foutmeldingen.

Mogelijke oplossingen

  • Feeds Tamper: String2ID - Herkenbare use case, aardige documentatie. In gebruik door 1.160 sites
  • Feeds Tamper + schrijven naar entity reference-veld
  • Feeds entity reference - In gebruik bij 781 sites. Last update: Dec. 2014
  • Entity reference feeds - 1.058 gebruikers. Last update: Dec. 2014 - Ik geloof dat dit voor situaties is, waarbij de child-entiteiten en de parent-entiteiten in één bestand zitten, en niet gemakkelijk gescheiden kunnen worden

Feeds Module

De Feeds Module ondersteunt referenced entity-velden, maar [1] zegt er het volgende over:

The base Feeds.module existing entityreference support (also the other modules feeds_entityreference 
and entityreference_feeds) assumes that both the referrer and the referree content are managed by 
feeds import processes, and tries to do do the job of re-linking them after importing. They use GUIDs 
and support referential integrity, but are less flexible when it comes to user-moderated input or 
you don't have acces to (or want to support) a full downloaded list of all possible values.

Dit klinkt weinig uitnodigend → Verder zoeken.

Feeds Tamper: String2ID - WERKT!

Casus & documentatie [2]:

* Set up a content type where the feeds imports will land (eg Article) → test_Article
* Set up another content type that the first will reference (eg Person) → test_person
* Add an entityreference field from Article->Person (eg "Attributed Author"). 
  Configure it to use 'autocomplete' as a data widget.
* Create some content of type 'Person' with titles exactly matching the names → Titles wordt dus gebruikt als ID!
  of the 'author' field that will be imported.
* Set up the feeds importer using most default settings and mappings for RSS.
* Add a mapping from the "Source:Author name" to "Target:Attributed author: Entity ID"
* Use feeds_tamper to add a "Transform: Convert string into entity ID" action to that 
  mapping rule.
* Choose the simple "Entityreference autocomplete" method of string resolution.

Now, if you run the Feeds import, the recognized "Author name" tags will turn into 
entityreference links.

Ik had het in vijf minuten aan de praat:

Mapping: Er zijn twee Entity ID-velden. Toevallig deze gekozen, en dat werkte
String2ID-plugin
String2ID-plugin - Nix aan veranderen
Resultaat, inclusief entity-ID tussen haakjes achter de titel. Dat lijkt me een goed teken

String2ID + Explode - WERKT!

En nu het klapstuk: string2ID in combinatie met de Explode plug-in! En ook dat lukte binnen vijf minuten:

Referenced entity-veld: Number of values aangepast van 1 naar oneindig
Explode-plugin toegevoegd (1)
Explode-plugin toegevoegd (2)
Dataset
Gelukt!

Zie ook