Node Add Formular themen?
am 02.08.2009 - 10:34 Uhr in
Hallo zusammen,
wir haben unser Node Add Formular für einen bestimmten Inhaltstyp mit verschiedenen CCK Felder sehr erweitert.
Das Ganze wirkt jetzt beim Eintragen von neuen Nodes sehr sehr unübersichtlich.
Da vorallem User und Gäster die Eintragefunktion nutzen, müssen wir hier dringend etwas an der Usability ändern.
Besteht in irgendeiner Weise das Node Add Formular für einen bestimmten Inhaltstyp nur zu themen?
Bisher sind meine Recherchen vollkommen im Sand verlaufen. Ich konnte keine wirklich nützlichen Informationen finden.
Wie gesagt soll sich dieses Theming lediglich auf das Node Add Formular eines einzigen Inhaltstyps am besten beziehen.
Hat jemand eine Idee oder ähnliches bereits vollzogen?
VIele Grüße
Florian
- Anmelden oder Registrieren um Kommentare zu schreiben
Node Formular themen
am 02.08.2009 - 17:04 Uhr
Moin.
Das geht eigentlich relativ einfach mit jedem Inhaltstypen (unabhängig von der Verwendung von CCK).
In den folgenden Beispielen gehe ich jetzt einfach mal von "Garland" als Theme und "article" als Inhaltstyp aus.
In Deiner template.php erstellst Du (falls nicht bereits vorhanden) die Funktion
garland_theme
:<?php
function garland_theme($existing, $type, $theme, $path) {
return array(
'article_node_form' => array(
'arguments' => array('form' => NULL),
'template' => 'article-node-form',
),
);
}
?>
Falls Du die verfügbaren Variablen noch ein wenig anpassen und aufhübschen möchtest, kannst Du sie vorher auch noch in einer entsprechenden preprocess-Funktion (in der template.php) bearbeiten:
<?php
function garland_preprocess_article_node_form(&$vars) {
// Backup original form.
$vars['article-form'] = $vars['form'];
// Change submit button to image button.
$vars['form']['buttons']['submit']['#type'] = 'image_button';
$vars['form']['buttons']['submit']['#src'] = drupal_get_path('theme', 'garland') .'/images/submit.png';
// field_article_image
$vars['article_image'] = drupal_render($vars['form']['field_article_image']);
// ...
// Submit button.
$vars['submit'] = drupal_render($vars['form']['buttons']['submit']);
}
?>
Jetzt kannst Du für diesen Inhaltstypen ein Template namens article-node-form.tpl.php erstellen (in dem Verzeichnis, in dem auch template.php liegt).
<?php
// Print names of all available variables.
drupal_set_message('<pre>'. var_export(array_keys(get_defined_vars()), 1) .'</pre>');
// Print fields.
<?php print $article_image; ?>
<hr class="field-break" />
<div class="form-buttons">
<?php print $submit; ?>
</div>
<div class="hidden">
<?php print drupal_render($form); ?>
</div>
?>
Und schon kannst Du das Formular genau so ausgeben, wie Du es gerne hättest.
hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Wahnsinn! Das sieht super
am 02.08.2009 - 17:51 Uhr
Wahnsinn! Das sieht super aus. Werde es die Tage gleich mal testen! Besten, besten Dank Dir!
Viele Grüße
Florian
funktioniert das auch in der
am 04.08.2009 - 16:40 Uhr
funktioniert das auch in der version 6.xx?
ich scheine mich grad etwas blöd anzustellen. ich habe einen inhaltstyp "hadamar" und will das formular dafür ändern. in der template.php hab ich folgendes:
<?
function msz_theme($existing, $type, $theme, $path) {
return array(
'hadamar_node_form' => array(
'arguments' => array('form' => NULL),
'template' => 'hadamar-node-form',
),
);
}
?>
(mein theme, das ich nutze heißt "msz")
ich habe die hadamar-node-form.tpl.php angelegt - im gleichen ordner wie template.php. wenn ich aber meinen node/add/hadamar neu aufrufe, gibt es keinerlei veränderungen
Node Formular themen
am 04.08.2009 - 17:46 Uhr
funktioniert das auch in der version 6.xx?
Ja, das ist speziell für Drupal 6.x
Hast Du mal die Theme-Registry geleert?
hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Ich bin bisher noch nicht
am 04.08.2009 - 18:35 Uhr
Ich bin bisher noch nicht zum austesten gekommen. Werde ich wohl erst am WE nachholen können. Wir fahren unsere Seite auf einer D5 Version, bin gespannt obs hinhaut! :)
theming
am 04.08.2009 - 21:20 Uhr
...Wir fahren unsere Seite auf einer D5 Version, bin gespannt obs hinhaut! :)
Öhm, höchstvermutlich nicht. Dass das für D5 war, habe ich glatt übersehen.
Bei D5 gab es noch keine
hook_theme()
.Da geht das dann ein wenig anders.
hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
@stBorchert dein link zeigt
am 05.08.2009 - 08:20 Uhr
@stBorchert
dein link zeigt zum leeren des caches. was genau meinst du mit theme-registry leeren. (bin noch relativ neu bei drupal)
Theme-Registry
am 05.08.2009 - 08:32 Uhr
Moin.
Die Theme-Registry ist ein Container für sämtliche Theme-Funktionen von Drupal (und Templates). Die Funktionen und Templates werden dort also zwischengespeichert, so dass sie nicht bei jedem Seitenaufruf von Neuem erzeugt und abgearbeitet werden müssen.
Wenn man Templates erstellt (oder Module entwickelt, die theme-Funktionen implementieren) kann es sein, dass Drupal noch nicht gleich mitbekommt, dass es da ein neues Template, bzw. eine neue Funktion gibt.
Aus diesem Grund muss man dann die Theme-Registry leeren, damit Drupal alle verfügbaren theme-Funktionen und deren Verarbeitung neu einliest.
hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Oder man installiert das
am 05.08.2009 - 08:37 Uhr
Oder man installiert das Devel-Modul und hakt in dessen Konfig die Option an bei jedem Seitenaufruf den Theme Registry Cache zu leeren.
--
mortendk: everytime you use contemplate... Thor is striking down from above with his mighty hammer - crushing and killing a kitten!
webseiter.de
Suchmaschinenoptimierung (SEO) & Drupal
dank devel-modul hab ich das
am 05.08.2009 - 12:24 Uhr
dank devel-modul hab ich das auf die reihe bekommen... :-)
mein formular reagiert nun.
jetzt muss ich die template-datei füllen.
<?php
print '<h3>Einen Artikel eingeben</h3>';
print drupal_render($form['title']);
print drupal_render($form['field_bild']);
print drupal_render($form['field_name']);
print drupal_render($form['field_vorname']);
print drupal_render($form['field_email']);
?>
soweit bin ich schon. mit meinem gefährlichen php-halbwissen muss ich nun noch irgendwie das feld für den textkörper, das feld für die taxonomie, die ich für den inhaltstyp angelegt hab, ausgeben und die buttons für vorschau und absenden. das gestalterische kommt dann im anschluss. gibt's tipps für die fehlenden felder?
Node Formular
am 05.08.2009 - 12:58 Uhr
gibt's tipps für die fehlenden felder?
Ja: http://www.drupalcenter.de/handbuch/20522
hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
besten dank! das einzige,
am 05.08.2009 - 13:53 Uhr
besten dank! das einzige, was jetzt noch fehlt, ist die taxonomie, die dem inhaltstyp zugeordnet ist.
was noch dazugekommen ist: in meiner template.php ist irgendwas, das meine seite dazu bringt, nach dem klicken des speichern-buttons eine leere weiße seite anzuzeigen. egal welcher speicher-button, ob im formular, in irgendeiner konfiguration - überall.
<?
function msz_theme($existing, $type, $theme, $path) {
return array(
'hadamar_node_form' => array(
'arguments' => array('form' => NULL),
'template' => 'hadamar-node-form',
),
);
}
?>
<?php
function msz_preprocess_hadamar_node_form(&$vars) {
// Grösse 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 verfügbar machen.
$vars['field_title'] = drupal_render($vars['form']['title']);
// Body
$vars['form']['body_field']['body']['#rows'] = 10;
$vars['field_body'] = drupal_render($vars['form']['body_field']);
// Fieldsets
$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']);
}
?>
ich habs geschafft. es ist
am 05.08.2009 - 15:34 Uhr
ich habs geschafft. es ist alles da...
ich hab jetzt nur noch das problem mit der weißen seite nach dem klicken des speicher-buttons. kann mir da jemand helfen. wie gesagt, es muss an der template.php liegen. nehm ich alles raus, funtkioniert alles nach dem speichern.
das problem hatte ich schon
am 10.08.2009 - 12:22 Uhr
das problem hatte ich schon öfters, wenn die template.php auf UTF-8 steht passiert das. Stell es mal auf ASCII um
________________________________________________________________________
Drupal-Entwicklung und Web-Design in Darmstadt || www.brightsolutions.de
________________________________________________________________________
Drupal-Entwicklung und Web-Design in Darmstadt || www.brightsolutions.de
wo ist die Datei template.php?
am 28.08.2009 - 06:08 Uhr
Hallo, ich verwende die Themen Bluemarien, Ich habe keine template.php gefunden, wie soll ich nun machchen. Drupal version 6x.
Danke
Das mit der weissen Seite
am 28.08.2009 - 08:35 Uhr
Das mit der weissen Seite passiert (mir) immer dann, wenn sich in *irgendeinem* xxx.tpl.php zu Beginn irgendwelche Zeichen oder Leerschläge eingeschlichen haben.
lg leda
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
Zitat: ich hab jetzt nur
am 28.08.2009 - 11:03 Uhr
ich hab jetzt nur noch das problem mit der weißen seite nach dem klicken des speicher-buttons. kann mir da jemand helfen. wie gesagt, es muss an der template.php liegen. nehm ich alles raus, funtkioniert alles nach dem speichern.
Das Problem hatte ich auch mal nachdem ich eine Theme-Funktion in der template-php geschrieben hatte. Schau am besten mal unter 'Berichte' -> 'Neue Log-Einträge', da müsste stehen, welche Fehler aufgetreten ist. Bei mir musste ich nur das ?> am Ende der template.php entfernen, das ich wohl aus Gewohnheit getippt hatte.
Servus. Wie gesagt nutze ich
am 12.09.2009 - 13:25 Uhr
Servus.
Wie gesagt nutze ich D5. Habe jetzt mit der Anleitung von http://drupal.org/node/112358#comment-936148 ganz gute Ergebnisse erzielen können.
Allerdings benötige ich mehr Einfluss auf die Textfelder.
Mit
<?php
$width=120;
$form['field_name']['0']['value']['#size']=$width;
print drupal_render($form['field_name']);
?>
konnte ich jetzt schonmal Einfluss auf die Größe des Textfeldes nehmen.
Was ich jetzt aber bräuchte:
<?php
print drupal_render($form['field_name']);
?>
Gibt komplett das Textfeld mit dem Titel des Textfeldes und seiner Description aus. Ich würde jetzt aber gerne gezielt nur das Textfeld ausgeben, nur den Titel des Textfeldes ausgeben und nur die Description des Textfeldes seperat und einzeln ausgeben lassen.
Also jetzt mal rein logisch sowas?!?!
<?php
print drupal_render($form['field_name']['0']['value']['#title']);
?>
Besteht da eine Chance? Hat hier jemanden Erfahrungen?
Danke Euch!
Beste Grüße
Florian
Keiner eine Idee? Oder kann
am 18.09.2009 - 09:05 Uhr
Keiner eine Idee? Oder kann jemand definitiv ausschließen das es nicht möglich ist?
Feld ausgeben
am 18.09.2009 - 09:22 Uhr
Speicher die Beschreibung in einer zusätzlichen Variablen und entferne sie dann aus dem Element.
<?php
$description = $form['field_name'][0]['value']['#description'];
$form['field_name'][0]['value']['#description'] = '';
?>
<div class="description"><?php print $description; ?></div>
<?php
drupal_render($form['field_name']);
?>
hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Funktioniert auch mit Admin Theme?
am 02.01.2011 - 09:47 Uhr
Hallo zusammen,
ich bin gerade auf euren Thread gestoßen um genau dieses Problem zu lösen. Allerdings benutze ich ein "Admin Theme" um den Inhalt zu editieren. Ich habe also "Theme Frontend" und "Theme Backend". Theme Backend wird nur von Moderatoren und Editoren benutzt wenn neuer Inhalt erstellt wird. Allerdings möchte ich das Gäste Bilder hochladen können die dann durch die Moderatoren freigeschaltet werden.
Die oben aufgezeigte Methode scheint nicht zu funktionieren. Drupal ignoriert meine template vorgabe und benutzt weiterhin das "Theme Backend".
Zur Zeit benutze ich folgenden Code:
<?php
function tubantia_theme() {
$items = array();
$items['image_node_form'] = array(
'arguments' => array('form' => array()),
'path' => drupal_get_path('theme', 'tubantia') . '/templates',
'template' => 'node-image-form',
'preprocess functions' => array(
'tubantia_preprocess_image_form'
)
);
return $items;
}// end function custom_theme_theme;
function tubantia_preprocess_image_form(&$vars) {
// Copy taxonomy and buttons from $form to $vars, to pass them to the template file.
$vars['sidebar'] = $vars['form']['taxonomy'];
$vars['buttons'] = $vars['form']['buttons'];
// Remove taxonomy and buttons, from $form ( no duplication ).
unset($vars['form']['taxonomy']);
unset($vars['form']['buttons']);
}// end function custom_theme_preprocess_project_form;
?>
Meine node-image-form.tpl.php sieht folgendermaßen aus:
<?php
// Print names of all available variables.
drupal_set_message('<pre>'. var_export(array_keys(get_defined_vars()), 1) .'</pre>');
?>
<div class="node-add-wrapper clear-block">
<div class="node-column-sidebar">
<?php if($sidebar): ?>
<?php print drupal_render($sidebar); ?>
<?php endif; ?>
</div>
<div class="node-column-main">
<?php if($form): ?>
<?php print drupal_render($form); ?>
<?php endif; ?>
<?php if($buttons): ?>
<div class="node-buttons">
<?php print drupal_render($buttons); ?>
</div>
<?php endif; ?>
</div>
<div class="clear"></div>
</div>
Hat jemand eine Idee wieso das nicht funktioniert oder was genau ich falsch mache? Vielen Dank schonmal!
Beste Grüße,
Milchbar
Theme
am 02.01.2011 - 11:23 Uhr
Hallo.
Drupal ignoriert meine template vorgabe und benutzt weiterhin das "Theme Backend".
Kann es sein, dass Du unter admin/settings/admin eingestellt hast, dass Drupal das Admin-Theme auch beim Erstellen und Bearbeiten von Inhalten verwenden soll?
https://skitch.com/stborchert/r8m8m/administration-theme
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
admin/settings/admin
am 02.01.2011 - 12:00 Uhr
Hi Stefan,
danke für die prompte Antwort. Ich habe das in der Tat so eingestellt. Genau das möchte ich ja eigentlich auch erreichen. Im Prinzip soll *überall* das Admin-Theme benutzt werden, sobald man Inhalte bearbeitet/löscht/erstellt. Die Ausnahme ist das erstellen des Content-Types "Image". Dies soll nicht das Admin-Theme, sondern das reguläre Theme benutzen.
Beste Grüße,
Milchbar
Themekey
am 02.01.2011 - 12:02 Uhr
In diesem Fall verwende das Modul [do:themekey Themekey]. Damit kannst Du nach verschiedensten Kriterien auswählen, welches Theme verwendet werden soll.
Bei Dir wären das dann "Pfad" + "Inhaltstyp" (+ eventuell Rolle).
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
*Doh*
am 02.01.2011 - 12:11 Uhr
Super, vielen Dank! Benutze das sogar schon bei 2 anderen Projekten aber das Brett vor meinem Kopf ist heute wohl besonders sperrig. ;)
Nochmals vielen Dank und beste Grüße,
Milchbar
stBorchert schriebesseff
am 03.08.2012 - 09:17 Uhr
Funktioniert das auch für Drupal7?
LG