Kommentar Formular Themen [fixed]
am 30.01.2009 - 18:35 Uhr in
Mein Problem ist folgendes: Ich möchte um das Eingabefeld für Kommentare weitere HTML-Elemente schachteln, also das "template" aus dem das ganze aufgebaut wird anpassen. Leider komm ich nicht drauf, wo ich das machen kann.
Rein über CSS Kann ich das Formular nicht so anpassen wie ich es möchte.
Ich habe schon diese Funktion gefunden die in meiner Template.php enthalten ist, kann damit allerdings nur den gesamten Kommentarbereich umschließen, und nicht das Formular alleine.
http://api.drupal.org/api/function/phptemplate_comment_wrapper/6
Hat jemand da ne Idee? Ich finde auch leider nicht die Stelle, wo für alle Formulare das Template angepasst werden kann. Das würde ich zur Not ja auch machen, und es dann per CSS nur beim Kommentarformular anpassen wie ich es möchte.
- Anmelden oder Registrieren um Kommentare zu schreiben
comment.tpl.php in deinem
am 30.01.2009 - 19:13 Uhr
comment.tpl.php in deinem Theme vorhanden?
http://api.drupal.org/api/file/modules/comment/comment.tpl.php
Formular anpassen
am 30.01.2009 - 21:05 Uhr
Moin!
Welch Zufall; erst gestern hatten wir dieses "Problem" im IRC.
Du erstellst Dir in Deinem Theme-Verzeichnis eine neue Datei namens comment-form.tpl.php:
<?php
// drupal_set_message('<pre>'. print_r($form, 1) .'</pre>');
unset($form['homepage']);
print drupal_render($form);
In diesem Beispiel wird einfach mal das Feld "Homepage" entfernt. Wenn Du wissen willst, welche Elemente noch so alles im Formular vorhanden sind, kannst Du einfach die erste Zeile wieder aktivieren und siehst dann die gesamte Formularstruktur. Nach Änderungen an dieser Datei solltest Du unter admin/settings/performance "Clear cached data" anklicken, damit das Template neu geladen wird.
Jetzt musst Du noch in der template.php Deines Themes folgende Funktion einfügen:
function phptemplate_theme($existing, $type, $theme, $path) {
return array(
'comment_form' => array(
'arguments' => array('form' => NULL),
'template' => 'comment-form', // this is the name of the template
)
);
}
Dies teilt Drupal mit, dass wir ab jetzt ein anderes Template für die Darstellung des Kommentarformulars verwenden wollen.
In der comment-form.tpl.php kannst Du jetzt nach Belieben die vorhandenen Elemente verschieben oder die HTML-Struktur ändern:
<fieldset class="collapsible">
<legend><?php print t('Information'); ?></legend>
<div class="form-field">
<?php print drupal_render($form['email']);?>
</div>
<div class="form-field">
<?php print drupal_render($form['homepage']);?>
</div>
</fieldset>
<?php
unset($form['email']);
unset($form['homepage']);
print drupal_render($form);
hth,
Stefan
Also erstmal danke an euch
am 03.02.2009 - 14:31 Uhr
Also erstmal danke an euch beide für die Antworten.
Ja, ich habe eine comment.tpl.php in meinem Verzeichniss, die kann ich aber nur zum Themen der Kommentare benutzen, so wie ich das sehe.
Der Tipp von Stefan sieht ja eigendlich super aus, nur leider bekomme ich das nicht auf meine Theme übertragen. Es erscheint nur eine weiße Seite, also ein php Fehler. Jetzt bin ich erstmal auf der Suche nach ner Einstellung, um die Error-Messages sichtbar zu machen. Hatte vor kurzem noch Drupal 5 laufen, und mir war so, als wenn php fehlermeldungen da direkt auf der Seite ausgegeben wurden...
[edit:] So! Jetzt hab ich die Fehlermeldung:
"Cannot redeclare phptemplate_theme()"
Hilft mir aber leider nicht... Meine Theme basiert doch auf der phptemplatengine, also was soll das heißen?
So so, nun hab ich
am 03.02.2009 - 15:08 Uhr
So so, nun hab ich herrausgefunden, das die Fehlermeldung die mir anzeigt wird, bedeuted das die Funktion schon vorhanden ist.
Das ist Sie natürlich auch, in dem phptemplateengine ordner. Da gehört sie ja aber auch hin und erfüllt eine wichtige funktion. Wie man die jetzt mit der oben genannten Funktion einfach überschreiben soll, ist mir schleierhaft... Oder ist das bei dir anders gewesen, Stefan?
phptemplate_theme
am 03.02.2009 - 15:15 Uhr
Wie man die jetzt mit der oben genannten Funktion einfach überschreiben soll, ist mir schleierhaft... Oder ist das bei dir anders gewesen, Stefan?
Nein, bei mir existiert die Funktion auch. Jedoch ist das nicht so schlimm, wir können sie ja einfach erweitern.
Mal angenommen, bei Dir steht sie so in der template.php:
<?php
function phptemplate_theme($existing, $type, $theme, $path) {
return array(
'user_register' => array(
'arguments' => array('form' => NULL),
'template' => 'user-register', // this is the name of the template
),
);
}
?>
Dann fügen wir unser Schnipsel jetzt einfach dazu:
<?php
function phptemplate_theme($existing, $type, $theme, $path) {
return array(
'user_register' => array(
'arguments' => array('form' => NULL),
'template' => 'user-register', // this is the name of the template
),
'comment_form' => array(
'arguments' => array('form' => NULL),
'template' => 'comment-form', // this is the name of the template
),
);
}
?>
(Die Kommata hinter den Klammern in Zeile 6 und 10 beachten!)
hth,
Stefan
Leider hab ich mich wohl
am 03.02.2009 - 15:36 Uhr
Leider hab ich mich wohl missverständlich ausgedrückt. In meiner template.php in meiner Theme gab es diese Funktion noch nicht. Deswegen brauch ich da auch nichts zusammenfügen.
Bei mir steht in der "phptemplate.engine".
function phptemplate_theme($existing, $type, $theme, $path) {
$templates = drupal_find_theme_functions($existing, array('phptemplate', $theme));
$templates += drupal_find_theme_templates($existing, '.tpl.php', $path);
return $templates;
}
Das ist doch die Funktion, mit der der Konflikt entsteht, oder nicht?
Die muss da ja auch bleiben, da sie ja auch von anderen Themes genutzt wird.
verschrieben
am 03.02.2009 - 15:42 Uhr
Äh und ich hab jetzt nicht genau hingeschaut :-)
Benenne die Funktion in der template.php einfach in
<THEMENAME>_theme(...)
um. Also beispielsweisegarland_theme(...)
.Stefan
So, alter! Tausend Dank für
am 03.02.2009 - 16:30 Uhr
So, alter! Tausend Dank für deine schnelle und umfangreiche Hilfe.
Hab es jetzt hinbekommen, nachdem ich dann merkte, das man in den Theme namen wohl auch keine Unterstriche nutzen kann. Das wusste ich nicht.
Jetzt hab ich im Prinzip die Möglichkeit das zu machen, was ich möchte. Das formularelement selber ist da aber noch nicht mit drinne, sondern nur alles was innerhalb des Fornm Tags steckt... Wenn ich noch ne Ebene höher käme ware das traumhaft.. Ich möchte die Überschrift nämlich noch mit rein haben...