Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

[erledigt]Settings: textfield in Array speichern

Eingetragen von messy (116)
am 04.12.2010 - 14:40 Uhr in
  • Allgemeines zu Drupal
  • Drupal 6.x

Hi,

ich möchte in den Einstellungen von meinem Modul die textfield-Eingaben als Array speichern. Die Werte werden wie folgt eingegeben: 2,2,2,22,2

Die $form wird mit system_settings_form() generiert.

Die Eingaben werden über blubb_validate() validiert.

Das Problem:
Ich kriege es nicht auf die Reihe an geeigneter Stelle variable_set('bla', explode(',' $textfield) zu setzen. Immer wieder steht die Variable als String in der Tabelle variable und nicht als gewünschter Array.

Wo muss ich mich einhängen? Oder läuft das ganz anders?

‹ Upgradefaehigkeit von D6 -> D7 Multisite und Error 500 und .htaccess ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi, die variables Tabelle in

Eingetragen von Kars-T (1473)
am 04.12.2010 - 18:53 Uhr

Hi,

die variables Tabelle in mysql kennt nur Text. Und ein Feldtyp Array existiert nicht. Also musst du die Daten als Text speichern. Entweder du speicherst direkt deinen 2,2,2 String. Oder du machst ein explode drauf und speicherst das array per serialize. Aber anders wirst du da nichts erreichen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das in der MySQL-Tabelle nur

Eingetragen von messy (116)
am 05.12.2010 - 11:43 Uhr

Das in der MySQL-Tabelle nur Text steht ist mir klar, aber die variable-Tabelle beinhaltet Strings wie z.B. a:3:{s:12:"participants";s:12:"participants";s:14:"thread_started";i:0;s:5:"count";i:0;}. Diese werden mir variable_get() als Array zurückgeliefert. Und so will ich meine Zeichenkette auch abspeichern. Könnte es natürlich manuell erreichen, aber dachte es gebe noch andere Möglichkeiten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das was du dort siehst, sind

Eingetragen von md (3717)
am 05.12.2010 - 15:48 Uhr

Das was du dort siehst, sind serialisierte Arrays und als solche musst du diese speichern.
http://php.net/manual/de/function.serialize.php

  • Anmelden oder Registrieren um Kommentare zu schreiben

Achso! Das ist gar keine

Eingetragen von messy (116)
am 05.12.2010 - 16:38 Uhr

Achso! Das ist gar keine Drupaleigenheit. Erstmal danke für diese Info.

Aber trotzdem bleibt das Problem. serialize() muss ich ja gar nicht verwenden. Das macht variable_set() ja für mich. Aber wann/wo speichere ich die Eingabe von textfield?

So ist der gewünschte Ablauf:

1. #default_value von textfield: implode(',' variable_get('bla', array(1,1,1)));
2. neuer String wird in textfield eingegeben: "2,2,2"
3. variable_set('bla', explode(',' String));

Wie setzte ich das um? Mir funkt system_settings_form() irgendwie immer dazwischen. Letztendlich steht die Variable doch als serialisierter Sring in der Tabelle.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hö? Wenn du ein Textfeld in

Eingetragen von Exterior (2903)
am 05.12.2010 - 17:13 Uhr

Hö? Wenn du ein Textfeld in einem Formular verwendest, welches über system_settings_form gespeichert wird, dann packt Drupal die Einstellungen automatisch in die Variablen-Tabelle, unter dem Bezeichner des Textfeldes.

Beispiel:

<?php
$form
['mein_textfeld'] = array(
 
'#type' => 'textfield',
 
'#title' => 'Mein Textfeld',
 
'#description' => 'Gib hier was ein',
 
'#size' => 10,
 
'#default_value' => variable_get('mein_textfeld', 'mein_standardwert'),
);
?>

Damit werden die Inhalte des Felds unter "mein_textfeld" gespeichert und können über <?php variable_get('mein_textfeld', 'mein_standardwert'); ?> abgerufen werden. Wo liegt denn da das Problem?

Und wenn du damit insgesamt nicht zufrieden bist, dann mach eben kein <?php return system_settings_form($form); ?> sondern nur ein <?php return $form; ?>. Dann musst du dir zusätzlich noch eine eigene Submit-Funktion schreiben, in der du das Textfeld auslesen und nach eigenen Wünschen formatieren und mit variable_set() speichern kannst.

  • Anmelden oder Registrieren um Kommentare zu schreiben

<?php '#default_value' =>

Eingetragen von messy (116)
am 05.12.2010 - 17:46 Uhr

<?php
'#default_value' => variable_get('mein_textfeld', 'mein_standardwert'),
?>
ist nicht einfach ohne weiteres möglich. Es geht ja um ein Array. Das kannst du ja nicht einfach im Textfeld ausgeben.

Eine eigene Submit-Funktion wäre im Prinzip möglich, aber es muss doch möglich sein, das eine spezielle Feld gesondert zu verarbeiten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn der Wert aus dem Feld

Eingetragen von Exterior (2903)
am 05.12.2010 - 19:45 Uhr

Wenn der Wert aus dem Feld mittels variable_set in die Variablen-Tabelle eingetragen wurde, dürfte doch der Rückweg über variable_get genauso laufen, oder?

Wenn du in dein Textfeld "2,2,22,2" einträgst, dann wird das so in die Variablen-Tabelle gelegt und genauso wieder rausgenommen und kann als default_value verwendet werden. Wo liegt denn da eigentlich das Problem? Wenn du das so in das Feld einträgst, wieso muss das denn dann unbedingt als Array gespeichert werden? Geht doch auch so, oder?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Exterior schrieb Wenn du das

Eingetragen von messy (116)
am 05.12.2010 - 20:01 Uhr
Exterior schrieb

Wenn du das so in das Feld einträgst, wieso muss das denn dann unbedingt als Array gespeichert werden? Geht doch auch so, oder?

Weil das unschön ist. Das ist ja eine Moduleinstellung auf die später zugegriffen werden muss. Wenn das nicht als Array gespeichert wird, dann muss ich ja jedes Mal den zurückgelieferten String in ein Array wandeln.

So ist meine momentane "Lösung". Eher ein Workarround:

<?php

 
function modul_settings() {
 
//restlichen $forms
 
 
$values = array(2,2,2,2,2,2,2,2,2,2,2);
 
$values = variable_get('blubb', $values);
 
$values_string = implode(',', $values);
 
$form['bli']['bla'] = array(
   
'#type' => 'textfield',
   
'#default_value' => $values_string,
  );
 
variable_del('bla')
 
 
$form['#submit'][] = 'special_submit';

  return
system_settings_form($form);
}

function
special_submit($form, &$form_state) {
 
variable_set('blubb', explode(',', $form_state['values']['bla']}

?>

Ich kann irgendwie nicht direkt bla speichern und geh den Umweg mit blubb. In bla fuscht mir system_settings_form_submit() immer rein.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat: In bla fuscht mir

Eingetragen von Exterior (2903)
am 05.12.2010 - 20:30 Uhr
Zitat:

In bla fuscht mir system_settings_form_submit() immer rein.

Natürlich "pfuscht" dir da system_settings_form_submit() rein, weil die eben so funktioniert und ausgeführt wird.

Zitat:

Weil das unschön ist. Das ist ja eine Moduleinstellung auf die später zugegriffen werden muss. Wenn das nicht als Array gespeichert wird, dann muss ich ja jedes Mal den zurückgelieferten String in ein Array wandeln.

Das würde ich eher in kauf nehmen, als diese sinnlose Doppelspeicherung, die du mit dem Code da oben erzeugst. Damit wird jedesmal der eingegebene String in "bla" und das Array in "blubb" gespeichert, ergo der gleiche Kram zweimal. DAS ist viel unschöner.

Da würde ich doch eher den Weg gehen, den String bei Benutzung in ein Array umzuwandeln, ist nun auch nicht die Welt.

Oder du speicherst es wirklich als Array in der Tabelle, dann solltest du aber - wie bereits weiter oben geschrieben - nict return system_settings_form($form) nehmen, sondern ein ganz normales return $form inkl. Submit-Funktion, damit umgehst du die Doppelspeicherung. Aber das was du da in dem Code machst ist völlig sinnfrei.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi, mit der Doppelspeicherung

Eingetragen von messy (116)
am 06.12.2010 - 13:54 Uhr

Hi,

mit der Doppelspeicherung hast du sicher recht, deswegen lösche ich die Variable direkt wieder. Also steht letztendlich nur das Array in der Tabelle.
Dachte mir, dass diese "Arbeit" nur bei Änderung der Settings ausgeführt wird, also relativ selten. Die Wandlung von String in Array muss aber häufiger ausgeführt werden.

Ein ganz normales return $form wäre natürlich auch möglich. Dieses würde aber eigentlich wie die drupaleigene Funktion aussehen mit dem einzigen Unterschied, dass der $form_state['values']['blubb'] anders behandelt wird. Alle anderen $form sollen ganz normal behandelt werden. Deswegen wollte ich nur den "blubb" gesondert behandeln. Könnte natürlich die system_settings_form_submit() kopieren und innerhalb der foreach-Schleife "blubb" abfangen und als Array speichern.

Ist das mit dem variable_del('bla') wirklich so sinnfrei oder kann man das machen? Oder doch lieber eine eigene form_submit() auf Basis von system_settings_form_submit()?

Viele Grüße

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hoppla, das variable_del

Eingetragen von Exterior (2903)
am 06.12.2010 - 16:33 Uhr

Hoppla, das variable_del hatte ich übersehen, sorry. Dann dürfte es eigentlich funktionieren, denke ich (Allerdings fehlt in dem Code oben hinter variable_del ein Semikolon :-P)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Exterior schrieb Hoppla, das

Eingetragen von messy (116)
am 06.12.2010 - 16:52 Uhr
Exterior schrieb

Hoppla, das variable_del hatte ich übersehen, sorry. Dann dürfte es eigentlich funktionieren, denke ich (Allerdings fehlt in dem Code oben hinter variable_del ein Semikolon :-P)

Na dann ist es ja kein Wunder, dass du das übersehen hast. ;) Ich setze den Thread mal auf erledigt.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Ветошь для протирки оборудования
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 5 Tagen
  • Hey danke
    vor 2 Wochen 5 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 6 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 4 Tagen
  • Da scheint die Terminologie
    vor 3 Wochen 4 Tagen
  • Kannst doch auch alles direkt
    vor 4 Wochen 1 Tag
  • In der entsprechenden View
    vor 4 Wochen 1 Tag
  • Dazu müsstest Du vermutlich
    vor 4 Wochen 1 Tag
  • gelöst
    vor 6 Wochen 5 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 6 Tagen

Statistik

Beiträge im Forum: 250234
Registrierte User: 20455

Neue User:

  • JoMek
  • Znogsnernoimb
  • ByteScrapers

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 33 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