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

Themen eines Node-Formulars

Eingetragen von stBorchert (6003) am 03.08.2009 - 11: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 (1113)
am 15.09.2009 - 18: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 (3717)
am 15.09.2009 - 18:42 Uhr

Das ist ja ein Wahnsinn!

vg
--
md - DrupalCenter.de

mdwp*

vg
md - DrupalCenter.de

mdwp* Drupal Consulting & Services

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Preloader / Spnner entfernen Menu Link Modal-Modul
  • Sexy photo galleries, daily updated pics
  • Schriftgröße standard einstellen
  • PHP 8.1 - Deprecated function: rtrim()
  • Drupal Website gestalten
  • MariaDB 10.6
  • Entity Reference - Title Felder werden als Link angezeigt
  • Tokens werden in Viev als Link angezeigt
  • [bug entdeckt & workaround gefunden] benutzerdefinierte Felder vom Userprofil tauchen ungefragt auch in den Forumtopics auf...
  • [gelöst] Mass contact Empfängerliste nach Taxonomy Term statt Rolle
  • Update V. 9.3.12 auf V. 9.4 mit Fehler: Modul mySQL fehlt. Bitte Hilfe.
  • Sprachpfad, in Drupal Korrekt einstellen, auch bei den Meta-Tags
Weiter

Neue Kommentare

  • core_version_requirement: ^8
    vor 1 Tag 3 Stunden
  • core_version_requirement: ^8
    vor 1 Tag 3 Stunden
  • ok. Wenn ich das mache
    vor 1 Tag 3 Stunden
  • Bei gleichem Namen hat das
    vor 1 Tag 3 Stunden
  • Sorry, dass ich mich hier
    vor 1 Tag 4 Stunden
  • Habe Patch versucht
    vor 1 Tag 11 Stunden
  • Hier wird ein Patsch
    vor 1 Tag 12 Stunden
  • Mit Drupal geht das um 150
    vor 2 Tagen 7 Minuten
  • Ah, ok. Wenn es ein Paragraph
    vor 3 Tagen 16 Minuten
  • Also kleiner Nachtrag noch:
    vor 3 Tagen 1 Stunde

Statistik

Beiträge im Forum: 247865
Registrierte User: 19591

Neue User:

  • kudes
  • tammiun11
  • Tkakah

» Alle User anzeigen

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

DrupalCenter durchsuchen:

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
  • Drupal 7 Video-Trainings (Deutsch)
  • Drupal-Testumgebung erstellen
  • Drupal 6 Module
  • Drupal 7 Module
  • Drupal Screencasts auf deutsch
  • Archiv

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
  • » 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