[gelöst]2 Fragen zu hook_form(type=>date_popup) und hook_view
am 14.11.2010 - 23:18 Uhr in
Hallo,
wie im Titel geschrieben hab ich zwei Fragen:
1) Ich nutze in einem eigenen node-Modul die Form (type=>date_popup) das funktioniert auch. Allerdings mit einer Einschränkung: Beim "Inhalt erstellen" der node wird das Datum im Datumsfeld nicht angezeigt. Sobald ich das Feld klicke, erscheint der Kalender und das Datum wird eingetragen, wenn ich es wähle (mit Return wird auch das aktuelle Datum eingetragen). Ich hätte es gern so, dass das aktuelle Datum auch beim Erstellen im Feld angezeigt und später übernommen wird. Nun ist es so, dass ich bereits ein default-Datum (#default_value => 'now') probiert habe, auch einfach #value => irgendwas, aber dann hab ich zwar Anzeige im Feld aber immer vom 01.01.2010.
Kann man das richten?
Der aktuelle Code:
$form['field_invoice_date'] = array(
'#type' => 'date_popup',
'#title' => 'Date',
'#date_format' => $format,
'#date_label_position' => 'within',
'#date_timezone' => 'Europe/Berlin',
'#date_increment' => 15,
'#date_year_range' => '0:+2',
);
2) Ich versteh die hook_view absolut nicht. Kann mir da jemand helfen, bitte!
Mein Problem ist, dass ich momentan nur unformatierte Texte in der Ansicht habe, sprich alle Daten schön hintereinandergereiht ohne Titel. Nun hab ich das auch mit dem '#value' => theme('mymodule_myfield', $node->myfield) Eintrag aus der Api versucht, aber dann hab ich keine Anzeige; außer wenn ich 'page' als erstes Argument liefere. Dann wird aber - wie der Name sagt - eine ganze Seite im Node eingebunden.
Wie kann ich hook_view nutzen, um mir die Ausgabe des nodes etwa wie bei Eingeben anzeigen zu lassen. (node_api hab ich auch probiert, nüscht jutes)
Nachhilfe sehr, sehr willkommen!
Der aktuelle Code:
function rechnung_view($node, $teaser = FALSE, $page = FALSE) {
$node = node_prepare($node, $teaser);
$node->content['field_user'] = array(
'#value' => $node->field_user,
'#weight' => 1);
$node->content['field_invoice_no'] = array(
'#value' => $node->field_invoice_no,
'#weight' => 49);
return $node;
}
Danke schonmal!
Gruß
Michael
- Anmelden oder Registrieren um Kommentare zu schreiben
So richtig werde aus deinen
am 15.11.2010 - 00:17 Uhr
So richtig werde aus deinen Erklärungen nicht schlau aber vielleicht zwei Hinweise
Du mußt #default_value verwenden, sonst können die Werte im Formular nicht geändert werden.
Wenn #default_value => 'now' nicht wirkt versuche doch mal #default_value => time().
Der hook_view wird aufgerufen, wenn Dein Node angezeigt werden soll. Du mußt also die Ausgabe des Nodes codieren. Du solltest das Kapitel im Handbuch oder in dem Buch "Pro Drupal Development" noch mal gründlich durchlesen.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Okay, ich versuch noch mal
am 15.11.2010 - 07:36 Uhr
Okay, ich versuch noch mal bisschen anders zu erklären:
1) Wenn ich die node erstelle, wird nach den verschiedenen Eingaben gefragt. Unter anderem Datum. Das Datumsfeld ist dann immer leer (ohne default_vlaue), bis ich darauf klicke und der Kalender öffnet, dann sehe ich das aktuelle Datum im Kalender.
Wenn ich nun default_value im Modul angebe, ist das Feld Datum sofort beim Erstellen gefüllt. Allerdings mit dem dem Datum 01.01.2010, also nicht wie eingestellt mit aktuellem Datum.
Ich hätte gern Feld: sofort gefüllt mit aktuellem Datum. Klappt aber irgendwie nicht.
2)
Bei dem view auf die node werden mir die entsprechenden Infos unformatiert ausgegeben. Alle in einer Reihe und ohne Titel der Felder. Verstehe nicht warum und was ich ändern muss.
Gelesen hab ich übrigens bevor ich hier poste. Aber daraus werde ich eben nicht schlau.
Gruß
Michael
1) Du hast offensichtlich
am 15.11.2010 - 17:49 Uhr
1) Du hast offensichtlich einen Fehler in der Variablen $format, die Du in der Form anziehst. Da ich nicht wußte, was Du da drin stehen hattest, habe ich diese Zeile auskommentiert. Wenn ich dann im Code habe
'#default_value' => 'now',
bekomme ich das aktuelle Datum und die Zeit gemäß Deiner Vorgabe von 15 Minuten Increments in den beiden Feldern angezeigt.2) Wenn Du ein eigenes Node-Modul schreibst, bist Du auch für die Ausgabe verantwortlich und mußt den entsprechenden HTML-Code mit den Daten ausgeben. Das macht man üblicherweise in einer eigenen Theme-Funktion. Da packt man div-Tags etc mit Klassen dazu und evtl
<br />
damit man das anschließend über CSS stylen kann bzw die Ausgabe schon mehrzeilig vorbereitet hat.Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Danke für die Hilfe. 1) So
am 16.11.2010 - 09:37 Uhr
Danke für die Hilfe.
1) So hab noch rumprobiert. Du hast recht, so funktioniert es bei mir auch, wenn ich das Format auslasse.
Bei mir soll/ist $format = 'd. M. Y' sein, damit dann das Zeitfeld erst gar nicht angezeigt wird. Funktioniert auch, aber mit der eingangs erwähnten Einschränkung.
2) Tja, aller Anfang ist schwer. Hatte ich irgendwie glatt übersehen/ nicht bedacht, dass ich das Ganze selbst formatieren muss. Bin dem Irrtum aufgesessen, ich könnte die Titel der hook_form irgendwie auch im hook_view verwenden. Nach 2 stündiger Suche in der API hab ich es jetzt erstmal über die node-Template zurechtgebogen.
Gruß
Michael
Ich weiß nicht was Du falsch
am 16.11.2010 - 10:24 Uhr
Ich weiß nicht was Du falsch machst, aber bei mir ist das Ergenis von:
$form['field_invoice_date'] = array(
'#type' => 'date_popup',
'#title' => 'Date',
'#date_format' => 'd. M. Y',
'#date_label_position' => 'within',
'#date_timezone' => 'Europe/Berlin',
// '#date_increment' => 15,
'#date_year_range' => '0:+2',
'#default_value' => 'now',
);
Ok. Gerade gesehen, das Datum ist falsch sorry. Da bleibt wohl nur mit CSS ausblenden über die Id "edit-field-invoice-date-timeEntry-popup-1". Mußt Du mal nachsehen, ob die bei Dir identisch ist.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Dieses doofe Datum zermürbt
am 16.11.2010 - 12:52 Uhr
Dieses doofe Datum zermürbt mich so langsam ;)
Ich hab jetzt versucht, per phpAdmin den Feld-Typ auf Date zuändern, was auch klappt. Wird aber leider nicht von drupal .install gefeatured, nur datetime, also wieder db-Fehler bei der Modulinstallation. Na egal.
Also ich werd mal deinen Tipp versuchen, und das Feld einfach ausblenden. Bzw. bei der Ansicht muss das sowieso irgendwie gemacht werden, weil als Datum immer die Datetime ausgegeben wird. Das sieht schäbig aus.
Danke nochmal für die Hilfe. Meld mich, wenn alles geklappt hat.
Edit: Ja, containername ist der selbe. Mit visibility:hidden klappt das auch. So werd ich's jetzt machen.