Ich habe versucht, dieses Problem herauszufinden, bei dem der Benutzer dynamisch Projektanforderungsformulare erstellen kann (eigene Felder hinzufügen, einschließlich Dropdown-Listen, Mehrfachauswahl usw.). Der Benutzer benötigt eine Möglichkeit, mehrere Projektanforderungstypen (z. B. Bundles?) Für verschiedene Geschäftsbereiche zu erstellen. Ich dachte, die Entity / Bundle-Beziehung wäre perfekt dafür. Also hier ist meine Idee:
Verwenden Sie die Schema-API, um meine Basistabelle "Projekt" zu definieren. Verwenden Sie die Entitäts-API hook_entity_info (), um Drupal über meine neue Entität zu informieren und sie auf die Tabelle "Projekt" zu verweisen. Jetzt kann ich in diesem Hook Bundles definieren - was großartig ist. Der Benutzer muss jedoch in der Lage sein, ein Bundle zu erstellen. Wo befindet sich der Aufruf entity_create_bundle ($ entity_type, $ bundle)?
Beispiel:
Entitätstyp: Projekt (mit in DB definierten allgemeinen Feldern, und es ist feldfähig)
Bundle: IT-Projekt, HR-Projekt - die die gemeinsamen Felder von Project teilen
In einer Tabelle project_type werden zusätzliche Gruppierungen gespeichert, die ich benötige (Projektanforderungen für Geschäftsbereiche).
Jetzt habe ich Drupal 7 Module Development gelesen, was großartig war, und in Kapitel 6 definieren sie eine Entität "Kunstwerk", die ein paar Bündel, "Skulptur" und "Malerei" enthält. Die Art und Weise, wie sie die Schritte beschreiben, ist, als würden sie eine Administrationsoberfläche erstellen, um zusätzliche Grafikarten zu erstellen, aber dies ist nicht wahr (soweit ich das beurteilen kann). Nach Abschluss des Kapitels kann ich nur Objekte vom Typ "Malerei" oder "Skulptur" erstellen.
Wie kann ich Benutzern erlauben, Bundles vom Entitätstyp "Projekt" zu erstellen?
Fehlt mir etwas oder ist die Funktionalität [noch] nicht vorhanden?
Antworten:
Untersuchen der Standardknotenpakete
Das Knotenmodul erstellt die Bundles "Artikel" und "Basisseite" nicht selbst. Nach einigem Graben fand ich die Definitionen für diese Bundles in der Installationsdatei des Standardinstallationsprofils.
/profiles/standard/standard.install
Ein paar Anmerkungen zu diesem Code
st()
Die Funktion sollte nur während eines Drupal-Installationsvorgangs verwendet werdennode_type_save
field_attach_create_bundle
, um Feldmodule über das neue Bundle zu informierenErstellen eines Bundles mit der Entity-API
Ich bin nicht sicher, wie Sie Ihre Entitäten definiert haben, aber wenn Sie die Entitäts-API verwendet haben, sieht Ihr Code zur Bundle-Erstellung möglicherweise folgendermaßen aus:
Ein Hinweis zu Entitäten
Mehr über Entitäten
quelle
Ich habe eine ganze Weile versucht, das herauszufinden. Ich arbeite an einem Projekt, das auf dem Modellmodul basiert ( https://drupal.org/project/model ). In meinem Installationsskript wollte ich Bundles erstellen. Das Codebeispiel für das Entity-API-Beispiel in der Antwort "Untersuchen der Standardknotenpakete" ist nah, aber nicht ganz richtig (nun, es war nicht für mich).
Das folgende Snippet sollte funktionieren:
Das field_info_bundles prüft, ob das Bundle vorhanden ist (Sie versuchen also nicht, es zweimal zu erstellen). Dadurch werden Informationen zu den für die Entität project_type erstellten Bundles abgerufen.
Wenn das Bundle nicht vorhanden ist, können Sie das Bundle erstellen.
Zuerst erstellen Sie einen Controller und dann ein Parameterarray mit den Optionen für das Bundle, das Sie erstellen möchten. Anschließend erstellen Sie mit dem Controller ein Bundle-Objekt (dies erstellt ein PHP-Objekt mit allen "Standard" -Entitätsfeldern und -Methoden und fügt dann Ihre Parameter zum Objekt hinzu. Anschließend speichern Sie das Bundle mit dem Controller. Dieser letzte Teil bleibt bestehen das Bundle in der Datenbank.
Ich hoffe das hilft.
quelle
Ich versuche so etwas zu tun, und es sieht so aus, als ob das Knotenmodul bereits den Code enthält. Wenn Sie einen neuen Inhaltstyp erstellen, erstellt es ein neues Bundle für die Knotenentität und fügt das Feld "body" hinzu es standardmäßig (unter Verwendung der Feld-API). Alle diese Operationen und Formulare (Tabelle der Bündel, CRUD der Bündel usw.) werden von Hand erstellt.
Dank der Drupal-Entwickler können Sie den im Node-Modul enthaltenen Code kopieren.
Ich denke, später kann ich meine Arbeit als Drupal-Modul für die visuelle Erstellung von Entitäten und deren Hierarchie von Bundles veröffentlichen.
quelle