Ich habe eine Situation, in der ich gleichzeitig Knoten und referenzierte Knoten erstellen möchte. Gibt es dafür Lösungen, die dafür gut funktionieren?
Um zu verdeutlichen, wovon ich spreche, betrachten Sie die folgende Situation ( zur Erklärung stark vereinfacht):
Es gibt eine Klasse vom Inhaltstyp mit dem knotenbezogenen Feld Student . Ich möchte, dass Benutzer gleichzeitig Klassen- und Studentenknoten erstellen können. Ich möchte auch, dass sie die normale Knotenreferenz verwenden können, um einen Schüler auszuwählen, der zufällig bereits existiert.
Im Idealfall möchte ich, dass all dies von einer einzigen Seite aus funktioniert und auch innerhalb der Grenzen des Drupal-Berechtigungssystems, damit ich verschiedene Rollen und Berechtigungen haben kann.
Ja, ich weiß, dass Student in diesem Fall am besten als Benutzer (und nicht als Knoten) dient, aber Klasse und Student sollen nur die Situation veranschaulichen. Das reale Szenario benötigt wirklich Knotenreferenzen.
Es gibt eine ähnliche Frage: Erstellen von referenzierten Knoten zusammen mit dem übergeordneten Knoten , aber ich bin speziell nur an Drupal 7-Lösungen interessiert.
BEARBEITEN:
Nicht nur nach vorhandenen Modulen suchen, sondern auch nach benutzerdefiniertem Code suchen.
Antworten:
Ich verwende das Dialogfeld "Referenzen", in dem vorhandene Referenzfelder mit einem kleinen "+" versehen werden, damit der Benutzer einen neuen Schüler direkt aus dem Bearbeitungsformular für Klassenknoten erstellen kann .
quelle
Für ein paar verschiedene Sites habe ich dies jetzt mit einem ctools-Modal gemacht, und hier ist die grundlegende Beschreibung, wie ich es implementiert habe (sehr einfach):
Erstellen Sie im hook_menu () Ihres Moduls einen benutzerdefinierten Seitenrückruf, der eine grundlegende Knotenform für den Knoten anzeigt, auf den Sie verweisen möchten (für einen 'Studenten'-Knoten haben Sie nur ein Namensfeld und möglicherweise ein Abschlussjahresfeld). Speichern Sie in diesem Formular in Ihrem Rückruf zum Senden den Knoten mit node_save () und speichern Sie die Knoten-ID (die sich bei $ node-> nid befinden sollte, nachdem Sie ein neues Knotenobjekt an node_save () übergeben haben) im Formular
$form_state['storage']['student_id']
.Ändern Sie das Master- / Klassenknotenformular mit hook_form_alter () . Sie müssen hier einige Dinge tun:
Zuerst müssen Sie das modale Javascript und die Funktionalität von ctools hinzufügen, damit ctools weiß, was mit Ihrem speziellen Link zu tun ist:
Zweitens müssen Sie einen Link zu dem Seitenrückruf hinzufügen, den Sie in Schritt 1 im Hook-Menü erstellt haben, und mit diesem Link die Klasse 'ctools-use-modal' hinzufügen. Also zum Beispiel:
Hier ist ein Beispiel für einen Rückruf:
In
mymodule_create_student_form($form, $form_state)
, bauen Sie Ihre Form wie gewohnt, und dann in dermymodule_create_student_form_submit(form, &$form_state)
(abschicken) Funktion, in den Wert des NID des neu geschaffenen Studenten Knoten gesetzt$form_state['storage']['student_id']
. Auf diese Weise erhalten Sie ctools / AJAX, um die neue NID an Ihre ursprüngliche Klassenform zurückzugeben.In meiner Situation habe ich das Modal verwendet, um ein Markup auf die Originalseite zurückzuspucken. Daher habe ich das Markup mithilfe von
ajax_command_append()
jQuery auf der Originalseite an ein Platzhalter-Div übergeben. Dabei wurde das Platzhalter-Div überwacht und der Inhalt wurde gefunden es würde den HTML-Code an die richtige Stelle an einer anderen Stelle im Knotenformular verschieben. In Ihrem Fall müssen Sie ein ein- oder mehrwertiges Knotenreferenzfeld ausfüllen, das möglicherweise etwas komplexer ist. Ich musste das noch nicht tun ... also habe ich für diesen Teil der Gleichung keine weiteren Ratschläge.quelle
Eine Option könnte darin bestehen, dem Inline-Entitätsformularmodul Knotenunterstützung hinzuzufügen .
BEARBEITEN: Inline Entity Form unterstützt heutzutage Knoten.
quelle
Folgende Module können in Drupal 7 verwendet werden:
Noderefcreate erstellt einen neuen Knoten nur, wenn er nicht vorhanden ist. Verwenden Sie dazu den Assistenten für die automatische Vervollständigung. Nodeconnect und Entityconnect bieten eine Schaltfläche zum Hinzufügen / Bearbeiten an der Knotenreferenz, wenn der Assistent für die automatische Vervollständigung verwendet wird. Nodeconnect stellt es nur als Knotenreferenz bereit, während Entityconnect es als Knotenreferenz, Entitätsreferenz, Termreferenz und Benutzerreferenz bereitstellt.
Inline_entity_form bietet zwei zusätzliche Widgets als Entitätsreferenz (nur).
quelle
Wenn dies dem Schulszenario wirklich ähnlich ist und Ihre Schüler mehreren Klassen beitreten können, würde ich Folgendes verwenden:
Dies würde auch die Verwendung von Token erfordern , das Filtern der Ansicht in Abhängigkeit von der Klassen-ID und das Einrichten eines Standardwerts für das Referenzfeld des Anwesenheitsknotens als aktuelle Klassen-ID.
Schließlich können Sie Ihren Student-Inhaltstyp dem Benutzer mit einer Benutzerreferenz zuordnen.
quelle