Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module ›

Beim Speichern eines Nodes den Inhalt von einem Taxonomy-Feld in ein anderes Taxonomy-Feld kopieren/verschieben

Eingetragen von DrupalFan (1646)
am 12.11.2015 - 21:26 Uhr in
  • Module

Gegeben ist ein Inhaltstyp mit 2 Felden:

- Feld1 "Neuer Tag", Typ: Referenz auf Taxonomy-Begriffe, Element: Autovervollständigen-Feld

- Feld2: "Tags", Typ: Referenz auf Taxonomy-Begriffe, Element: Ankreuzfelder/Auswahlknöpfe (also Checkboxes)

Beim Speichern (nach Erstellen oder Ändern) eines Nodes sollen alle im Feld1 mittels Autovervollständigen-Feld eingegebene Werte in das Feld2 kopiert werden.

--> Dazu suche ich die Codestellen (z. Bsp. in tempplate.php) bzw. ungefähre Codesnippets, wie das funktonieren könnte. Test und genaue Umsetzung kann ich selbst machen, nur der erste Ansatz fehlt mir noch.

Nach dem Speicher wird also dieser (zu progammierende) Code aufgerufen und damit werden die unter "Neuer Tag" eingegebene Begriffe zu den normalen Begriffen im Feld "Tags" kopiert bzw. dorthin verschoben.

Öffnet man nach dem Speicher die Node wieder, dann ist das Feld "Neuer Tag" leer und das Feld "Tags" erweitert um die kopierten Werte. Beim Kopieren wurde darauf geachtet, dass es keine Doppel-Begriffe im Vokabular gibt. (Das Taxonomy-Vokabular wurde ebenfals um diese Werte erweitert.)

Weiters sollten dabei auch die dem Node zugeordneten Begriff alphabetisch sortiert werden.

Wie kann man das realisieren?
Entweder mit eigenem Code, der an der richtigen Stelle nach dem Speichern eines Nodes eingreift ...
... oder gibt es eine ganz andere Lösung?
DANKE!

‹ Search API: Keine Ergebnisse bei verwandten Wörtern no Flexslider - kein css angewendet / kein JS ausgeführt ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

ich verstehe zwar den Sinn dieser Redundanz nicht

Eingetragen von ronald (3845)
am 12.11.2015 - 22:47 Uhr

aber mit Rules solltest du das gemanaged bekommen

Grüße
Ronald

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wirklich mit Rules?

Eingetragen von DrupalFan (1646)
am 12.11.2015 - 23:00 Uhr

Wieso, warum soll das mit Rules gehen?

Nach dem Kopieren der neuen Begriffe aus dem Feld "Neue Tags" zu den Taxonomy-Tags müsste für jeden neuen Begriff auch ein Url-Alias angelegt werden.

Ich glaube im Moment noch nicht, dass das alles mit Rules geht.

Geht das nicht viel einfacher mit ein paar Zeilen Code?
Nur wo setzt man an?

Der Sinn des ganzen ist es, das Verhalten von Taxonomy Super Select, welches nur für Drupal 6 gibt, nachzubauen. Oder kennst Du jemanden der Taxonomy Super Select nach Drupal 7 portieren kann?

  • Anmelden oder Registrieren um Kommentare zu schreiben

DrupalFan schriebGegeben ist

Eingetragen von Ionit (1798)
am 13.11.2015 - 00:43 Uhr
DrupalFan schrieb

Gegeben ist ein Inhaltstyp mit 2 Felden:
Beim Speichern (nach Erstellen oder Ändern) eines Nodes sollen alle im Feld1 mittels Autovervollständigen-Feld eingegebene Werte in das Feld2 kopiert werden.

--> Dazu suche ich die Codestellen (z. Bsp. in tempplate.php) bzw. ungefähre Codesnippets, wie das funktonieren könnte. Test und genaue Umsetzung kann ich selbst machen, nur der erste Ansatz fehlt mir noch.

Nach dem Speicher wird also dieser (zu progammierende) Code aufgerufen und damit werden die unter "Neuer Tag" eingegebene Begriffe zu den normalen Begriffen im Feld "Tags" kopiert bzw. dorthin verschoben.

Öffnet man nach dem Speicher die Node wieder, dann ist das Feld "Neuer Tag" leer und das Feld "Tags" erweitert um die kopierten Werte. Beim Kopieren wurde darauf geachtet, dass es keine Doppel-Begriffe im Vokabular gibt. (Das Taxonomy-Vokabular wurde ebenfals um diese Werte erweitert.)

1. Eigenes Modul mit hook_form_FORM_ID_alter und hook_node_presave! Darüber kommt man an die Form-Values ran und kann sie ins andere Feld kopieren - danach über die hooks Feld1 "Neuer Tag" leeren (Feld1 zu leeren, geht auch mit Rules).

2. Wenn der Node zum editieren geöffnet wird, kann man die Werte aus Feld2: "Tags" wieder auslesen und das Formfeld von Feld1 "Neuer Tag" vorfüllen (danach kommt wieder 1 - sodass die Werte von Feld1 niemals in der Datenbank gespeichert werden)!

DrupalFan schrieb

Weiters sollten dabei auch die dem Node zugeordneten Begriff alphabetisch sortiert werden.

Das weiß ich nicht!

Drupal rockt!!!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Genauer

Eingetragen von DrupalFan (1646)
am 13.11.2015 - 00:55 Uhr

Danke.

Dein Punkt 2 ist aber nicht gewünscht. Wenn Du die Funktionen von Taxonomy Super Select (D6) kennst, dann weißt Du, dass die Begriffe über die vielen Checkboxes ausgewählt werden können und über das Autocomplete-Feld neue Begriffe hinzugefügt werden können, die dann aber übernommen werden in die Datenbank. Dein Punkt 2 passt also nicht.

Beim nächsten Editieren ist also Feld 1 (Neuer Tag) immer leer, weil die dort das letzte Mal eingegebenen Werte ja in Feld2 verschoben wurden und dort gespeichert wurden und vollständige Taxonomy-Begriffe dieses Vokabulars geworden sind und in diesem Node auch hinzugefügt wurden.

hook_form und hook_node_presave sind schon gute Ansätze, aber ich bräuchte es etwas genauer, um es umsetzen zu können.

  • Anmelden oder Registrieren um Kommentare zu schreiben

DrupalFan schrieb .... Wenn

Eingetragen von Ionit (1798)
am 13.11.2015 - 01:09 Uhr
DrupalFan schrieb

.... Wenn Du die Funktionen von Taxonomy Super Select (D6) kennst ...

Nein - ich kenne das nicht!

DrupalFan schrieb

Dein Punkt 2 ist aber nicht gewünscht. Wenn Du die Funktionen von Taxonomy Super Select (D6) kennst, dann weißt Du, dass die Begriffe über die vielen Checkboxes ausgewählt werden können und über das Autocomplete-Feld neue Begriffe hinzugefügt werden können, die dann aber übernommen werden in die Datenbank. Dein Punkt 2 passt also nicht.

Beim nächsten Editieren ist also Feld 1 (Neuer Tag) immer leer, weil die dort das letzte Mal eingegebenen Werte ja in Feld2 verschoben wurden und dort gespeichert wurden und vollständige Taxonomy-Begriffe dieses Vokabulars geworden sind und in diesem Node auch hinzugefügt wurden.

Dann lässt Du Punkt 2 halt weg oder passt ihn so an, dass Du Du beim editieren des fertigen Nodes halt die Values aus Feld1 ausliest und mit den bestehenden Values in Feld2 vergleichst - wenn etwas neues in Feld1 vorhanden ist, "hängst" Du die Values dann einfach an Feld2 ran.

DrupalFan schrieb

hook_form und hook_node_presave sind schon gute Ansätze, aber ich bräuchte es etwas genauer, um es umsetzen zu können.

So etwas ähnliches habe ich vor 3 Wochen gemacht aber ich habe jetzt keine Muße das rauszusuchen. Über die hook-Namen findest Du bei Google zahlreiche Beispiele (wie Du auf die Pre-Savevalues der Form zugreifen kannst und sie in andere Felder schreibst).

Drupal rockt!!!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Bsp-Code

Eingetragen von DrupalFan (1646)
am 13.11.2015 - 01:15 Uhr

Ja, so ähnlich.

Bräuchte noch ein kleines Beispiel oder einen Code-Ansatz.

  • Anmelden oder Registrieren um Kommentare zu schreiben

<?php function

Eingetragen von Ionit (1798)
am 13.11.2015 - 01:49 Uhr

<?php
function MODULNAME_form_DEIN_CONTENT_TYPE_MASCHINNAME_node_form_alter(&$form, &$form_state, $form_id) {

#Formfeld vorfüllen
$form['field_em_telefon']['und']['0']['value']['#default_value'] = '1234567';

$form['field_agentur_model_adresse']['und']['0']['#default_value']['street'] = $street;

#nur ausfuehren wenn Node neu ist und noch keine NID hat
if (is_null($form['nid']['#value'])) {
...
}

#nur ausfuehren wenn Node NICHT neu ist und schon eine NID hat
if (!is_null($form['nid']['#value'])) {
....
}

}

#dieser Hook ist die letzte Möglichkeit Daten zu ändern bevor die Daten in die Datenbank geschrieben werden
function MODULNAME_node_presave($node) {
  if (
$node->type =='DEIN_CONTENT_TYPE_MASCHINNAME') {
$node->field2['und']['0']['value'] = $node->field1['und']['0']['value'];

#danach Field1 leeren - das musst du mal testen
$node->field1['und']['0']['value'] = '';
}
}
?>

Wie Du bestehende Multivalue-Fields handelst und dort neue Values anhängst, musst Du selbst nachschauen (dazu wird es sicherlich auch enstprechende Hooks geben).

Drupal rockt!!!

  • Anmelden oder Registrieren um Kommentare zu schreiben

DANKE! Modul selbst geschrieben

Eingetragen von DrupalFan (1646)
am 29.11.2015 - 03:00 Uhr

Habe das Modul jetzt selbst geschrieben.

Ähnlich wie Du es vorgeschlagen hat, allerdings doch in einigen Details anders. Diese Details kommt man erst immer beim Programmieren drauf und am Ende schaut es dann doch um einiges anders aus. Aber das Prinzip ist vergleichbar und DANKE für die HILFE!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Matomo(?) in Seite, aber Deinstalliert!
  • Upgrade Drupal 7 auf Drupal 9 / Inhalt erstellen zeigt nur Fehler an
  • Olivero veraendern
  • Fehlermeldung nach Update auf Drupal 10
  • Wie Button erstellen?
  • footnotes bei D10 und CKE5
  • ckeditor Bilder skalieren
  • Bild in welcher Form die Beschriftung!
  • Drupal 10 und Adaptive Theme 2.0
  • Drupal Commerce: Deprecated Module deinstallieren: CKEditor, RDF
  • [gelötst] Migration einer Seite von D8.9 auf 9 resp 10
  • Theme Olivero - Rand entfernen?
Weiter

Neue Kommentare

  • @onkel Bob,Erst mal
    vor 4 Tagen 4 Stunden
  • Prinzipiell geht das schon.
    vor 4 Tagen 5 Stunden
  • Rubi_2021 schriebWie genau
    vor 1 Woche 2 Tagen
  • Ok, war ein Versuch. ;-) Kann
    vor 1 Woche 3 Tagen
  • Danke
    vor 1 Woche 3 Tagen
  • Redest Du von dem
    vor 1 Woche 3 Tagen
  • Mit sticht das hier ins
    vor 1 Woche 3 Tagen
  • Mit welcher Version Drupal
    vor 1 Woche 3 Tagen
  • Bitte um Hilfe
    vor 1 Woche 3 Tagen
  • Fehler trotz Neuinstallation
    vor 1 Woche 3 Tagen

Statistik

Beiträge im Forum: 248796
Registrierte User: 19831

Neue User:

  • J. Berten
  • vohome
  • DerRalph

» Alle User anzeigen

User nach Punkten sortiert:
wla9333
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3845
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 5 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association