Startseite
  • » Home
  • » Handbuch & FAQ
  • » Showroom
  • » Forum
  • » Drupalchannel
  • » Übersetzungsserver
  • » Suche
Startseite › Benutzerhandbuch › Fortgeschrittene › Tutorials & How To's - Tipps & Tricks ›

Themen eines Node-Formulars

Eingetragen von stBorchert (5515) am 03.08.2009 - 10:50 Uhr in
  • Drupal 6.x

Hin und wieder kommt es vor, dass man das Formular eines bestimmten Inhaltstypen ein wenig umstrukturieren möchte.
Dies lässt sich mit ein wenig Code-Einsatz relativ einfach bewerkstelligen.

In diesem Tutorial gehe ich von "Garland" als Theme und einem Inhaltstyp namens "article" aus.

Zuerst müssen wir Drupal mitteilen, dass wir die Gestaltung des entsprechenden Formulars selbst in die Hand nehmen wollen. Dazu müssen wir in der template.php unseres Themes eine Instanz der Funktion hook_theme erstellen (bzw. eine vorhandene Instanz erweitern):

<?php
function garland_theme($existing, $type, $theme, $path) {
  return array(
   
'article_node_form' => array(
     
'arguments' => array('form' => NULL),
     
'template' => 'article-node-form',
    ),
  );
}
?>

Mit diesem Code sagen wir Drupal jetzt, dass die Darstellung des Formulars von nun an über ein Template namens "article-node-form.tpl.php" erfolgen soll. Das Template bekommt (sinnigerweise) als Argument die Daten des Formularobjektes ($form) übergeben.

Bevor wir jetzt das Template erstellen, wollen wir vielleicht noch ein paar der verfügbaren Variablen oder auch einige Elemente des Formulars verändern.
Dies geschieht in einer entsprechenden preprocess Funktion:

<?php
function garland_preprocess_article_node_form(&$vars) {
 
// drupal_set_message('<pre>'. print_r($vars['form'], 1) .'</pre>'); // Die Struktur des Formulars ansehen.
 
  // Aus dem Submit-Button einen Image-Button machen.
 
$vars['form']['buttons']['submit']['#type'] = 'image_button';
 
$vars['form']['buttons']['submit']['#src'] = drupal_get_path('theme', 'garland') .'/images/submit.png';
 
 
// Länge des Titelfeldes ändern.
 
$vars['form']['title']['#size'] = 30;
 
// Beschreibung des Titelfeldes ändern.
 
$vars['form']['title']['#description'] = 'Der Titel des Artikels.';
 
// Das Titelfeld als einfache Variable ($field_title) im Template verfügbar machen.
 
$vars['field_title'] = drupal_render($vars['form']['title']);
 
 
// CCK Feld namens 'field_test' (eine einfache Checkbox).
  // Titel verändern.
 
$vars['form']['field_test']['value']['#title'] = t('Happy?');
 
// Beschreibung verändern.
 
$vars['form']['field_test']['value']['#description'] = t('Click to select');
 
// Das Feld als einfache Variable ($field_check) im Template verfügbar machen.
 
$vars['field_check'] = drupal_render($vars['form']['field_test']);
 
 
// Body
  // Anzahl der Zeilen im Body-Feld ändern.
 
$vars['form']['body_field']['body']['#rows'] = 10;
 
// Body-Feld als einfache Variable ($field_body) im Template verfügbar machen.
 
$vars['field_body'] = drupal_render($vars['form']['body_field']);
 
 
// Fieldsets als einfache Variablen im Template verfügbar machen.
 
$vars['field_menu'] = drupal_render($vars['form']['menu']);
 
$vars['field_revision'] = drupal_render($vars['form']['revision_information']);
 
$vars['field_author'] = drupal_render($vars['form']['author']);
 
$vars['field_options'] = drupal_render($vars['form']['options']);
 
$vars['field_comment_settings'] = drupal_render($vars['form']['comment_settings']);
 
 
// Schaltflächen.
 
$vars['buttons'] = drupal_render($vars['form']['buttons']);
}
?>

Jetzt können wir das Template erstellen.

<?php
// Die Namen aller verfügbaren Variablen ausgeben.
// drupal_set_message('<pre>'. var_export(array_keys(get_defined_vars()), 1) .'</pre>');
?>

<?php // Felder ausgeben. ?>
<?php // Ohne die preprocess müsste man "print drupal_render($form['title']);" schreiben. ?>
<?php print $field_title; ?>
<?php print $field_body; ?>
<div class="my-check">
  <?php print $field_check; ?>
</div>
 
<div class="extra-fields">
  <?php print $field_author; ?>
  <?php print $field_revision; ?>
  <?php print $field_menu; ?>
  <?php print $field_comment_settings; ?>
</div>
 
<div class="form-buttons">
  <?php print $buttons; ?>
</div>
 
<?php // Alle anderen Felder und Ausgaben nicht anzeigen (setzt natürlich ein "display: none;" für die CSS-Klasse voraus). ?>
<div class="hidden">
  <?php print drupal_render($form); ?>
</div>

Und schon ist das Node-Formular für diesen Inhaltstypen ein wenig umstrukturiert.

‹ Prozentbalken bei Views (Balkendiagramm) nach oben Titel mit Stil ›

Danke Stefan, das ist selbst

Eingetragen von aschiwi (1106)
am 15.09.2009 - 17:22 Uhr

Danke Stefan, das ist selbst für Nichtprogrammierer gut erklärt :-)
Gerade heute wollte ich es ausprobieren, dann fand ich allerdings das recht neue Modul "Interface", was obige Prozedur vereinfacht und auch sehr stark beschleunigt. Ich habe es probiert und bin sehr zufrieden.

http://www.twitter.com/aschiwi

http://www.twitter.com/aschiwi
Drupal-Initiative e.V.

undpaul

Interface modul

Eingetragen von md (3775)
am 15.09.2009 - 17:42 Uhr

Das ist ja ein Wahnsinn!

vg
--
md - DrupalCenter.de

mdwp*

vg
md - DrupalCenter.de

mdwp*

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Anzahl der mögliche uploads ändern...
  • Neuer Core
  • Link Menue auf eine aufgerufene Seite für eine weiter Auswahl
  • CKEditor und rechte
  • Nodetype page.tpl.php?
  • Speziellen, ausgeflipptes,Themme gesucht, bzw. wie erstellen?
  • Nodetype links?
  • Startseite
  • IE8 + ZEN Subtheme: Blinkt beim Seitenwechsel
  • Ubercart und Mengen
  • Date field löschen nach abgelaufene Datum
  • Änderung der default.settings.php
Weiter

Neue Kommentare

  • Hallo, und Danke für die
    vor 2 Minuten 13 Sekunden
  • Hallo, falls du in der
    vor 4 Minuten 28 Sekunden
  • Ein Drupal-Menü ist per
    vor 6 Minuten 43 Sekunden
  • Eine andere Idee wäre noch
    vor 31 Minuten 9 Sekunden
  • Global
    vor 37 Minuten 39 Sekunden
  • Hast Du das Modul Global
    vor 47 Minuten 32 Sekunden
  • Eigenes Mini-Modul schreiben.
    vor 51 Minuten 42 Sekunden
  • Umleitungsfehler
    vor 1 Stunde 5 Minuten
  • Hallo, es ist zwar schon
    vor 9 Stunden 56 Minuten
  • Hallo, keiner eine Idee? Oder
    vor 10 Stunden 2 Minuten

Statistik

Beiträge im Forum: 173323
Registrierte User: 15437

Neue User:

  • iGong
  • andreaszdw
  • kirk.spock

» Alle User anzeigen

User nach Punkten sortiert:
stBorchert5515
quiptime4713
Tobias Bähr3874
md3775
wla3738
bv3698
Thoor3678
Alexander Langer3268
dereine2635
Exterior2564
» User nach Punkten
Zur Zeit sind 4 User und 42 Gäste online.

Benutzer online

  • fraweg
  • wla
  • kahta
  • Teac

Benutzerhandbuch

  • FAQ - Häufig gestellte Fragen.
  • Links & Downloads
  • Über Drupalcenter.de und das deutschsprachige Benutzerhandbuch
  • Über Drupal
  • Einsteiger
  • Fortgeschrittene
    • Best Practice - Drupal Sites - Guidelines
    • Die beliebtesten Themes und Module
    • Tutorials & How To's - Tipps & Tricks
      • Kurztipps - Dinge die Stunden sparen können.
      • Notfallpläne - Tipps die Deine Drupalinstallation retten können
      • Anleitung zur Erstellung eines einfachen Kontaktformulars
      • Arbeiten mit dem Drupal Taxonomie-System [beinhaltet veraltete Inhalte]
      • Bearbeiten-Tab zu jeden Block hinzufügen
      • Block View mit Argument
      • Das Tagebuch einer Site
      • Drupal 6 - Automatisch unterschiedliche Bildgröße bei Teaser und Artikel
      • Drupal 6 - Eigene CSS Datei in ein Theme integrieren
      • Drupal 6 - Einfache Bildergalerie mit Image und Lightbox2
      • Drupal 6 - Einrichten eines Kalenders
      • Drupal 6 - Google Adsense ohne Zusatzmodul einbinden
      • Drupal 6 - Hauptnavigation mit DropDown Effekt ab Ebene Zwei
      • Drupal 6 - ImageMagick mit XAMPP Lite nutzen
      • Drupal 6 - Imagefield mit Imagecache und Colorbox
      • Drupal 6 - Installation FCK Editor
      • Drupal 6 - Installieren der WYSIWYG API inkl. Editoren
      • Drupal 7: mehrere Bilder in Node: 1 Bild in Anrisstext
      • Drupal Code Highlighting in Redmine Projektarchiv (CodeRay)
      • Drupal Theming: JavaScript einhängen in Abhängigkeit von Page-Variablen
      • Drush - Das Schweizermesser für Drupal auf Kommandozeile
      • Einfaches und erfolgreiches Patchen unter Windows
      • Eingabeformat & Inputfilter
      • Einrichten eines einfachen, statischen Menüsystems
      • Erstellen von Patches
      • Gallery mit CCK und Views erstellen (Drupal 5)
      • Header image Modul einrichten
      • Inhaltsübersicht für einen User mit einem View erstellen
      • Javascript und CSS-Dateien einbinden
      • Kontaktformular mit Jquery aufwerten
      • Leitfaden zur Erstellung von Suchmaschinenoptimierten Drupal-Sites
      • Mac OSX - Backupskript für Websites auf MAMP
      • Module updaten via Shell auf Windows
      • Module übersetzen
      • Perl-Script zum Erzeugen einer statischen Kopie einer Drupal-Website
      • Portierung eine Themes von openwebdesign.org
      • Prozentbalken bei Views (Balkendiagramm)
      • Themen eines Node-Formulars
      • Titel mit Stil
      • Umkreissuche mit Location- und Views-Modul
      • Usergalerie mit ImageCache, CCK, Views + Thickbox
      • Userprofil mit Usernodes erstellen
      • Validierung von Usereingaben bei Nodes
      • Variation vom Showroom auf drupalcenter.de
      • View mit Eingabeformular für neue Beiträge
      • WebSVN mit Drupal Code Highlighting
      • Zusätzliche Submit-Schaltfläche in Node-Formularen
      • i18n Language Switcher Block, die Links mit den Flaggen themen
      • ui.slider als Ersatz für den Ajax-Pager von Views
      • Zugriffsbeschränkungen für Nodes - eine Übersicht der Möglichkeiten
  • Entwicklung von Modulen und Themes
  • Drupalcenters Community
  • Bücherecke
  • Drupal 7 Video-Trainings (Deutsch)
  • Drupal 6 Module
  • Drupal 7 Module
  • Drupal Screencasts auf deutsch
  • Archiv

Buchempfehlung

Webseiten erstellen Drupal 7
Content - Layout - Administration
Das Drupal-Entwicklerhandbuch
Der Praxisleitfaden für Drupal-basierte Webprojekte.
Pro Drupal 7 Development
(Expert's Voice in Open Source)

Das Copyright des deutschsprachigen Drupal-Benutzerhandbuches unterliegt den jeweiligen Autoren. Übersetzungen des englischsprachigen Drupal-Benutzerhandbuches unterliegen der Creative Commons License, Attribution-ShareAlike 2.0.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Showroom
  • » Forum
  • » Drupalchannel
  • » Ü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
  • Bücherecke

Quicklinks III

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

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed Drupal Podcast
  • 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