it-swarm.com.de

Anzeigen von Daten nach Ansichten von einer externen API

Ich habe 2 DBs erstellt, von denen eine Drupal 8 und eine andere extern ist, dh nicht SQL (CouchDB)) ist. Um diese Datenbank zu verwalten, habe ich eine API mit verschiedenen Endpunkten (URLs) erstellt, die ich kann Achsen sie durch GET/POST-Methoden. Nach korrekter Anfrage erhalte ich eine Antwort in JSON von meiner API.

Wenn ich zum Beispiel einen Benutzer, einen Inhalt (Knoten) oder etwas anderes erstelle, speichere ich einige Informationen in meiner Drupal -Datenbank und einige Informationen in meiner API-Datenbank (ich habe die Formulare geändert, mit denen Inhalte erstellt werden) hook_form_BASE_FORM_ID_alter und auf diese Weise erstelle ich Inhalte in meiner externen Datenbank.

Meine Frage ist, wie man Daten aus einer Ansicht anzeigt und Informationen aus zwei Datenbanken kombiniert.

2

Vielleicht können Sie weitere Details veröffentlichen, aber soweit ich weiß, speichern Sie zusätzliche Informationen pro Knoten in einer externen Datenbank. Sie haben bereits ein API-System für die Kommunikation mit dieser Datenbank entwickelt, sodass Sie keine Abfragen von Drupal direkt an diese Datenbank) senden müssen. In diesem Fall besteht eine Möglichkeit, dies fortzusetzen folgende.

Konfigurieren Sie Ansichten so, dass ein Anzeigemodus zum Rendern Ihrer Entität verwendet wird. Geben Sie in Ihrer Knotenvorverarbeitungsfunktion die API-Anforderung aus und rufen Sie die zusätzlichen Daten aus der zweiten Datenbank ab. Bereiten Sie die Daten vor und stellen Sie sie der Vorlage zur Verfügung.

/**                                                                                                                                                                                                                                          
 * Implements hook_preprocess_node(&$variables).                                                                                                                                                                                         
 */
function MY_THEME_preprocess_node(&$variables) {
  // Issue API request.
  // Process JSON response.
  $variables['additional_field'] = $request_result;
}

Sie können dann die Vorlage für diese Entität (Knoten) und den Anzeigemodus überschreiben, um Ihre zusätzlichen Felder zu rendern.

Wenn Sie Ansichten benötigen, um die Feldanzeige zu verwenden, anstatt einen Anzeigemodus zu rendern, müssen Sie einen benutzerdefinierten Feldhandler entwickeln, der die Daten von der externen API abruft. Lassen Sie uns wissen, wenn Sie dabei Hilfe benötigen.

Eine Alternative wäre die Verwendung von Views-Hooks, um die Daten zu einem früheren Zeitpunkt auf ähnliche Weise vorzubereiten, aber dieser Ansatz bietet keinen wirklich großen Vorteil. Das heißt, es sei denn, Sie können alle Daten für alle Ergebnisse in einer einzigen API-Anforderung abrufen. Dies ist am effizientesten, damit Sie nicht mehrere Anforderungen ausgeben, eine pro Knotenergebnis. Lassen Sie uns wissen, ob dies der Fall ist und ob Sie dabei Hilfe benötigen.

1
krystalcode

Wenn Sie lediglich Daten aus der API anzeigen müssen, müssen Sie in Ansichten nichts Besonderes tun. Wählen Sie einfach aus, dass Sie gerenderte Objekte Ihrer Benutzer mit einem bestimmten Ansichtsmodus anzeigen möchten.

(enter image description here

In der Vorverarbeitungsfunktion für diesen Ansichtsmodus können Sie die API aufrufen und die zusätzlichen Daten laden, die Sie benötigen. Daten, die in eine Vorverarbeitungsfunktion geladen werden, sollten zwischengespeichert werden, damit sie beim nachfolgenden Laden der Seite nicht auf die API treffen.

function mymodule_preprocess_user(&$variables) {
  /** @var $account \Drupal\user\UserInterface */
  $account = $variables['elements']['#user'];

  // custom code to hit the 3rd party API
2
oknate

Es gibt Module wie Views Database Connector , Externe Entitäten in Kombination mit Such-API für die Integration von Ansichten oder Webdienstdaten - Keine Ahnung über die Integration der Ansichten. Remote Entity API ist noch nicht portiert nach drupal 8. Siehe: Drupal-Entität aus einer anderen Datenbank

Ideen für die benutzerdefinierte Codierung sind: Views Query Backend oder Search API (oder schreiben Sie Ihr eigenes Such-API-Backend - möglicherweise über solr )

Denken Sie in jedem Fall an Caching. Da das Anfordern Ihrer API bei jeder Anforderung an Ihre Site sehr teuer ist.

1
rémy

Erste Einschränkung. Es ist schwierig, datenbankübergreifend abzufragen. Ansichten führen standardmäßig SQL-Abfragen durch. Jede Art von Abfrage, bei der die Daten beider zusammengeführt werden müssen, besteht aus zwei benutzerdefinierten Abfragen und einer Zusammenführung in PHP. Dies ist nicht etwas, bei dem Ansichten Ihnen helfen werden.

Es gibt viele Ansätze, die Ihnen dabei helfen. Ich würde es angehen, indem ich JSON-Datenquellen erstelle und AngularJS verwende, um die Daten zu präsentieren.

2x SQL-Quellen. 2 SQL-Datenquellen können gemäß drupal 7 zugeordnet werden. Verwenden Sie die Abfrageoberflächen und massieren Sie die Daten. Rückkehr als JSON.

Die Frage führt zu Antworten, die Datenbanktabellen Ansichten zuordnen, und es gibt Tools, um dies zu tun. Ich glaube nicht, dass Sie eine Ansichtserfahrung aus separaten Datenbanken erhalten.

1
Interlated