node/add themen?
Eingetragen von MagicMatze (127)
am 25.01.2008 - 17:26 Uhr in
am 25.01.2008 - 17:26 Uhr in
Hiho,
ich wollte jetzt das Erstellen von Inhalten themen, Z.b. "Video einstellen": Hier habe ich vier Felder: Titel, Kategorie, Kurzbeschreibung und Videolink. Diese sind jetzt relativ schlicht untereinander und ich wollte da jetzt oberhalb der Felder jeweils eine Grafik einbinden (Schritt 1: Titel vergeben etc.).
Wie und wo kann ich für jeden Inhaltstyp die "add" Seite themen?
Danke,
Matze
- Anmelden oder Registrieren um Kommentare zu schreiben
eigentlich ist es gar nicht
am 26.01.2008 - 18:01 Uhr
eigentlich ist es gar nicht so schwer
1. diesen Code in die template.php am ende schreiben
wichtig dabei "inhaltstyp" zu verändern
das führt dazu dass Drupal in der datei inhaltstyp.tpl.php nachschaut und das darin enthaltene ausgibt
<?php
// Add Form Start...........jghyde..
if ((arg(0) == 'node') && (arg(1) == 'add') && (arg(2) == 'inhaltstyp')){
function phptemplate_node_form($form) {
return _phptemplate_callback('inhaltstyp', array('user' => $user, 'form' => $form));
}
}
// Add Form End.................
// Edit Form Start...........Dublin Drupaller..
if ((arg(0) == 'node') && (arg(2) == 'edit')){
$node = node_load(array('nid' => arg(1)));
if ($node->type == 'inhaltstyp'){
function phptemplate_node_form($form) {
return _phptemplate_callback('inhaltstyp', array('user' => $user, 'form' => $form));
}
}
}
// Edit Form End........
?>
2. Felder kann man einfach folgendermaßen ausgeben
<?php
print drupal_render($form['title']);
?>
natürlich kann man auch html ausgeben
--------------
Mein Blog: www.freeblogger.org
Deutscher IRC-Channel: irc.freenode.net #drupal.de je mehr desto besser
... Jabber-me: dereine@jabber.ccc.de Warum Jabber?
Das ist genau das, was ich
am 26.01.2008 - 18:34 Uhr
Das ist genau das, was ich gesucht habe! Vielen Dank dafür :)
Morgen werde ich dann eine schöne und einfache "Video einstellen in 3 Schritten" Seite basteln.
---
www.party-riebel.de
Ich habe jetzt das Problem,
am 10.02.2008 - 12:38 Uhr
Ich habe jetzt das Problem, dass wenn ich als Admin einen Beitrag erstelle oder editiere, dieser automatisch auf Unveröffentlicht steht.
Ich habe auch schon testweise die Funktion in template.php und die node-xxx-edit.php deaktiviert - dann hat es auch mit dem admin geklappt.
Meine node-video-edit.tpl.php sieht so aus:
<?php
print '<h3>#1 - Titel und Beschreibung des Videos:</h3>';
print drupal_render($form['title']);
print drupal_render($form['field_kurzbeschreibung']);
print '<h3>#2 - Videolink und Kategorie:</h3>';
print drupal_render($form['field_videofeld']);
print drupal_render($form['taxonomy']);
print '<h3>#3 - Video Erstellen:</h3>';
global $user;
if (in_array('administrator',$user->roles)) {
// This line prints everything, including fields we haven't specified
print drupal_render($form);
} else {
// This prints just the fields that we've specified to keep it simple for regular users
print drupal_render($form['form_token']);
print drupal_render($form['form_id']);
print drupal_render($form['preview']);
print drupal_render($form['submit']);
print drupal_render($form['delete']);
}
?>
Funktion in template.php:
if ($form['#node']->type == 'video') {
return _phptemplate_callback('node-video-edit', array('form' => $form));
}
Warum erstellt die selbstgebastelte node edit form meine Beiträge als unveröffentlicht?
---
www.party-riebel.de
lass dir noch <?phpprint
am 10.02.2008 - 13:30 Uhr
lass dir noch
<?php
print drupal_render($form['options']);
?>
anzeigen, damit müsste es gehen
--------------
Mein Blog: www.freeblogger.org
Deutscher IRC-Channel: irc.freenode.net #drupal.de je mehr desto besser
... Jabber-me: dereine@jabber.ccc.de Warum Jabber?
Vielen Dank - es hat
am 10.02.2008 - 19:08 Uhr
Vielen Dank - es hat geklappt^^
---
www.party-riebel.de
irgendwie funktioniert das
am 27.11.2008 - 15:49 Uhr
irgendwie funktioniert das ganze nicht bei mir.
ich habe einen inhaltstyp mit dem namen "news".
nun möchte ich nur die bearbeiten ansicht ändern.
ich hab also der template.php datei folgendes hinzugefügt:
if ((arg(0) == 'node') && (arg(2) == 'edit')){
$node = node_load(array('nid' => arg(1)));
if ($node->type == 'news'){
function phptemplate_node_form($form) {
return _phptemplate_callback('news', array('user' => $user, 'form' => $form));
}
}
}
und dann die datei node-news-edit.tpl.php erstellt.
aber irgendwie ändert sich nichts.
Du hast den Zusammenhang noch nicht verstanden.
am 28.11.2008 - 00:25 Uhr
Kleine Korrektur Deines Code:
<?php
if ((arg(0) == 'node') && (arg(2) == 'edit')){
$node = node_load(array(arg(1));
if ($node->type == 'news') {
phptemplate_node_form($form);
}
}
function phptemplate_node_form($form) {
return _phptemplate_callback('news', array('user' => $user, 'form' => $form));
}
?>
Der Code ist PHP logisch so besser. Funktionen stehen wenn sie definiert werden immer fuer sich allein. Um sie anzusprechen kann man sie beispielsweise in if Statements aufrufen.
Er wird aber immer noch nicht funktionieren. Weil:
1.
Wie kommt bei Aufruf der Funktion die Variable $form zu ihrem Inhalt? Antwort: Gar nicht.
2.
Funktionen wie die function phptemplate_node_form($form) gehoeren in die Datei "template.php".
3.
Auch wenn sich die function phptemplate_node_form($form) in der "template.php" befindet wird das Ganze immer noch nicht funktionieren.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
du solltest eher
am 28.11.2008 - 00:26 Uhr
du solltest eher schreiben
<?php
_phptemplate_callback('node-news-edit', a
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING
Da beisst die Maus keinen Faden ab.
am 28.11.2008 - 00:40 Uhr
Deine Frage
Wie und wo kann ich für jeden Inhaltstyp die "add" Seite themen?
Antwort
Eine /node/add Seite ist zu aller Erst ein Formular. Also benötigst Du für die Änderung eines Formulares den hook_form_alter. Zumindest immer dann wenn Du aktiv in den Code des Formulares eingreifen möchtest und nicht nur mittels CSS Formatierungen realisieren willst.
Da beisst die Maus keinen Faden ab. Das ist einfach so.
Die Funktion hook_form_alter verwendet man sinnvoller Weise in einem eigenen Modul.
Die Vorgehensweise zur Anwendung von hook_form_alter mit einem eigenen Modul (Minimodul, Mini Modul) habe ich hier auf DC bereits beschrieben. Suche einfach nach meinen Post's.
Tipp, Formulare mit HTML Code erweitern
HTML Code vor- und nach Formularelementen
Mit '#suffix' und '#prefix' kann man jedem Formelement HTML Code verpassen.
<?php
$foobar_prefix = '<div>';
$foobar_prefix .= t('Hallo world');
$foobar_prefix .= '</div>';
$form['foobar'] = array(
'type' => 'textfield',
'title' => 'Field title',
'#suffix' => '<div>Hallo Drupal.</div>',
'#prefix' => $foobar_prefix,
);
?>
HTML Code links- und rechts neben Formularelementen
In bestimmten Formfeld-Anwendungsszenarien könnte man auch '#field_suffix' und '#field_prefix'. Und zwar dann um Code links und/oder rechts neben dem Formelement zu platzieren.
HTML Code unabhängig von Formelementen platzieren
Um HTML Code unabhängig von bereits existierenden Formelementen zu platzieren kann man sich eines Tricks bedienen. Der Trick besteht darin das man ein neues Feld/neue Felder vom Typ hidden erstellt. Dieses Feld kann man nach Bedarf mit '#suffix' und '#prefix' versehen.
Das würde so aussehen:
<?php
$foobar_prefix = '<div>';
$foobar_prefix .= t('Hallo world');
$foobar_prefix .= '</div>';
$form['foobar'] = array(
'type' => 'hidden',
'#suffix' => '<div>Hallo Drupal.</div>',
'#prefix' => $foobar_prefix,
);
?>
Logischer würde bei einem Feld vom Typ hidden die Verwendung '#field_suffix' und '#field_prefix' keinen Sinn machen da es kein sichtbares Formularelement gibt neben dem recht und links etwas platziert wird.
Es bleibt die Frage nach der Unlogik:
Was passiert wenn trotzdem '#field_suffix' und '#field_prefix' mit einem hidden Formelement verwendet wird?
Zugefügter HTML Code und die Größe des Formulares
Grundsätzlich kann man alle existierenden Formelemente nachträglich mit Collapsi-Feldern erweitern um so im Formular "Platz zu schaffen".
Neben dem Aspekt des "Platz schaffens" kann diese Vorgehensweise auch als Alternative zur Anwendung von '#suffix' und '#prefix' dienen.
Formelement $form['foobar'] mit Collapsi-Funktion erweitern
<?php
$form['more'] = array(
'type' => 'fieldset',
// Titel des eigentlichen Elementes übernehmen damit im zugeklappten Zustand sichtbar ist was da drin steckt
'title' => 'Field title',
'#collapsible' => TRUE,
// Feld ist standardmässig zugeklappt
'#collapsed' => TRUE,
'#description' => "<div>Hier zusätzlicher HTML Code alternativ zur Verwendung von '#suffix' und '#prefix'.</div>",
);
$form['more']['foobar'] = array(
'type' => 'textfield',
'title' => 'Field title',
);
?>
Links
DC Handbuch: Formulare mit Minimodulen ändern
PS
@dereine, kleiner Angriff:
Ein Hinweis in Richtung hook_form_alter hätte von Dir eigentlich kommen können. ;-)
======================== Tags ========================
Formalter alter, Formular erweitern,
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
muss das wirklich so
am 28.11.2008 - 13:42 Uhr
muss das wirklich so kompliziert sein?
bei den einfachen seiten geht es ja auch immer indem man einfach eine theme-datei erstellt, warum also nicht auch bei den bearbeiten seiten?
es ist halt nunmal so,
am 29.11.2008 - 14:52 Uhr
es ist halt nunmal so, akzeptier es.
Vom Prinzip ist das ja kein Unterschied, finde ich ^^
mi hook_theme könntest du eigentlich theoretisch das ganze auch erreichen, weiß aber gerade nicht wie hook_theme genau funktioniert
@Quiptime
Dann aber bitte ein Verweis auf
<?php
function hook_form_node_form_alter($&$form, $form_state) {
}?>
^^
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING