Contao Open Source CMS > Contao-Forum

Zum englischen Forum

Index > Contao-Core > Bestimmt Eingabefelder beim Kommentar ausblenden!??

Hallo zusammen,

die Kommentarfunktion verwende ich als Gästebuch, was auch super klappt. Allerdings möchte ich die Eingabefelder wie E-Mail und Webseite ausblenden. Wie kann ich das machen? Kann man das irgendwie über das CMS steuern, oder muss ich das direkt im Template machen, und wenn ja, in welchem??

Vielen Dank schon mal.
2008-01-18 13:07
leo
Administrator
Avatar
Beiträge: 7046
Wuppertal, Deutschland
Hi Jano,

das musst Du im Template "system/modules/comments/templates/ce_comments.tpl" machen.

Grüße
Leo
2008-01-18 16:53
Hi Leo,

erstmal vielen Dank für deine schnelle Antwort, aber was genau muss ich da raus nehmen?
Blick da leider nicht ganz durch. Ich bin in PHP nicht so fit, dass ich das erkenne :-(
Sorry!
2008-01-18 21:00
Hallo Jano,

blende die Felder doch einfach mittels CSS aus.

iconCode:
#ctrl_website, #ctrl_email
{
        display:none;
}

LG, Peter
2008-01-18 21:13
Hallo Peter,

das klappt wunderbar für die Eingabefelder, aber leider nicht für die Beschreibung dazu. Und die kann ich mit CSS nicht ausblenden, weil sonst auch die label der benötigten Felder verschwinden.

Viele Grüße
2008-01-19 11:41
Hallo Jano,

du hast Recht. Ist mit gestern Abend gar nicht aufgefallen. Wäre ja auch zu einfach gewesen.
Von PHP habe ich leider keine Ahnung.

LG, Peter
2008-01-19 14:51
Hab es bis jetzt nicht geschaft, die Felder auszublenden? Weiß jemand einen Rat??
2008-01-23 13:03
darki777
User
Avatar
Beiträge: 685
Deutschland
Hi leo,
könnte man nicht die Bezeichnung des Elements im div (da wo die CSS Klasse "widget" ist) setzen (oder als ID, ist egal)? Also statt:

iconCode:
<div class="widget">

nun z.B. bei der Website:

iconCode:
<div class="widget crtl_website">

Habe es mittels "strId" versucht, um so meine Werte herzubekommen, aber da is sowieso alles protected, ich komm also nicht an die Werte ran, außer ich splitte $objWidget->generateLabel() und hol mir meine nötigen Werte raus (recht unschöne Lösung).

So könnte jeder auf alle Elemente zugreifen und Sie jederzeit per CSS bearbeiten (z.B. per .crtl_website label / .crtl_website input, etc.) oder gleich das ganze Widget dass man nicht braucht ausblenden, momentan ist das ja nicht möglich.

Gruß, darki
Zuletzt bearbeitet von darki777, 2008-01-23 14:45
PROGRAMMING / DEVELOPMENT / FLASH CREATION / SCREENDESIGN / WEBDESIGN - Contact Me info@pixelmount.com

---------------------------------------------------------------------------------

IRC TYPOlight Chat: irc://irc.freenode.net/typolight

Flashig Flasher - GeT ThE ExperiencE NoW
2008-01-23 14:44
Hallo zusammen,

habe gerade selber den Wunsch gehabt, das Webseiten-Feld auszublenden, hier nun meine Lösung:

- Neues Template erstellen, Vorlage ce_comments.tpl
- Folgenden Abschnitt suchen:

iconCode:
1 <?php foreach ($this->fields as $objWidget): ?>
2 <div class="widget">
3  <?php echo $objWidget->generateWithError(); ?> <?php echo ($objWidget instanceof FormCaptcha) ? $objWidget->generateQuestion() : $objWidget->generateLabel(); ?><?php if ($objWidget->required): ?><span class="mandatory">*</span><?php endif; ?> 
4 </div>
5 <?php endforeach; ?>
6 <div class="submit_container">

und wie folgt ändern:

iconCode:
1 <?php foreach ($this->fields as $objWidget): ?>
neu: <?php if (strpos($objWidget->generateLabel(),"ctrl_website") == false): ?>
2 <div class="widget">
3  <?php echo $objWidget->generateWithError(); ?> <?php echo ($objWidget instanceof FormCaptcha) ? $objWidget->generateQuestion() : $objWidget->generateLabel(); ?><?php if ($objWidget->required): ?><span class="mandatory">*</span><?php endif; ?> 
4 </div>
neu: <?php endif; ?>
5 <?php endforeach; ?>
6 <div class="submit_container">

Weiss nicht, ob es die eleganteste Lösung ist (php ist auch nicht so meins), aber es sucht nach den Begriff "ctrl_webseite" und zeigt das entsprechende Feld dann einfach nicht an :)
2008-08-03 13:16
peter63
User
Avatar
Hallo @all,

nachdem ich nun unter den Suchbegriffen "ce-comments", "widget", Kommentare, Comments, Gästebuch etc. alles gelesen habe, möchte ich das bisher ungelöste Thema der Ausblendung von Teilen des Formulars noch einmal aufgreifen.

Ich arbeite mit TL Vers. 2.6.1 und habe das Inhaltselement "Kommentare" in eine Seite des geschützten Mitgliederbereichs eingebunden.
Das Template "ce_comments" habe ich bereits so geändert, dass das Formular oben erscheint und in ein Akkordeon eingebunden ist. Läuft alles hervorragend.
Im Backend habe ich beim Inhaltselement die Sicherheitsfrage deaktiviert. (Ist das für einen geschützten Bereich o.k.?)
Nun möchte ich noch die Beizeichnungen und Eingabefelder für "Namen", "E-Mail" und "Webseite" ausblenden oder so einstellen, dass sie nicht beschreibbar sind. Im Idealfall sollen nur das Textfeld und der Sende-Button sichtbar sein.

Leo's Hinweis, dass man das im Template "ce_comments" einstellen kann, kenne ich, aber ich beherrsche PHP nicht. Es wäre aber gut, wenn das ginge, da es dann eine Sicherheit bei updates gibt.

Dann möchte ich noch "Kommentar" in "Beitrag" umändern. Die entsprechende Sprachdatei im UVZ system\modules\frontend\languages\de\default.php ist mir bekannt. Muss ich die beiden Einträge
iconCode:
$GLOBALS['TL_LANG']['MSC']['com_submit']   = 'Kommentar absenden';
$GLOBALS['TL_LANG']['MSC']['comment_by']   = 'Kommentar von';
in der Datei direkt ändern, oder ginge es auch in der "dcaconfig" und wenn ja, wie?

Vielen Dank schon jetzt für evtl. Unterstützung
Peter
2008-10-22 11:17
iconpeter63:
Nun möchte ich noch die Beizeichnungen und Eingabefelder für "Namen", "E-Mail" und "Webseite" ausblenden oder so einstellen, dass sie nicht beschreibbar sind. Im Idealfall sollen nur das Textfeld und der Sende-Button sichtbar sein.

So viel ich weiss, sind "Name" und "E-Mail" Pflichtfelder, die beim Absenden erwartet werden. Sind diese Felder nicht mit dabei, kommt eine Fehlermeldung.
Du kannst diese Felder ausblenden und sie versteckt im html-code durch die Benutzerdaten vorbelegen, das sollte gehen (zu ändern im ce_comments).
Aber: ein Benutzer kann recht einfach diese vorbelegten Felder ändern und sich somit als jemand anderen ausgeben. Das Commentsmodul prüft nämlich die Benutzerdaten nicht auf Übereinstimmung.
Wenn dich das nicht stört, sollte es via ce_comments klappen.

iconpeter63:
Dann möchte ich noch "Kommentar" in "Beitrag" umändern. Die entsprechende Sprachdatei im UVZ system\modules\frontend\languages\de\default.php ist mir bekannt. Muss ich die beiden Einträge
iconCode:
$GLOBALS['TL_LANG']['MSC']['com_submit']   = 'Kommentar absenden';
$GLOBALS['TL_LANG']['MSC']['comment_by']   = 'Kommentar von';
in der Datei direkt ändern, oder ginge es auch in der "dcaconfig" und wenn ja, wie?

Geht auch via ce_comments, allerdings würdest du damit die Multi-Sprachenfähigkeit des Moduls übergehen. Deine Methode bewahrt die Sprachenfähigkeit, ist aber nicht updatesicher (wenn ich das recht im Kopf habe).

Wenn du konkrete Tipps brauchst, poste mal deine bisherige ce_comments Vorlage.
Zuletzt bearbeitet von maccs, 2008-10-22 11:48
2008-10-22 11:47
peter63
User
Avatar
Hallo maccs,

danke für Deine Antwort.

Die Pflichtfelder "Name" und "E-Mail" sind mit den Benutzerdaten für den geschützten Mitgliederbereich bereits vorbelegt. Sie sollen im Frontend jedoch möglichst nicht angezeigt oder schreibgeschützt dargestellt werden. Insofern dürfte keine Fehlermeldung kommen. Ich möchte dadurch jegliche Manipulation, die Du auch erwähnst, ausschalten.

Die Multisprachfähigkeit des Inhaltselements Kommentare ist kein Problem, da die Seite nur in Deutsch erstellt ist. Updatesicher sollte die Änderung aber möglichst sein. Daher meine Frage nach evtl. Nutzung der dcaconfig.

Hier ist der aktuelle Code meiner ce_comments Template-Datei:
iconCode:
<div class="<?php echo $this->class; ?> block"<?php echo $this->cssID; ?><?php if ($this->style): ?> style="<?php echo $this->style; ?>"<?php endif; ?>>
<?php if ($this->headline): ?>

<<?php echo $this->hl; ?>><?php echo $this->headline; ?></<?php echo $this->hl; ?>>
<?php endif; ?>

<?php if (!$this->protected): ?>

<!-- indexer::stop -->
<div class="form">
<div class="ce_accordion block" style="margin:0px;"
<div class="toggler">Einen neuen Kommentar schreiben</div>
<div class="accordion"><div>
<form action="<?php echo $this->action; ?>" method="post">
<div class="formbody">
<input type="hidden" name="FORM_SUBMIT" value="tl_comment" />
<?php foreach ($this->fields as $objWidget): ?>
<div class="widget">
  <?php echo $objWidget->generateWithError(); ?> <?php echo ($objWidget instanceof FormCaptcha) ? $objWidget->generateQuestion() : $objWidget->generateLabel(); ?><?php if ($objWidget->required): ?><span class="mandatory">*</span><?php endif; ?> 
</div>
<?php endforeach; ?>
<div class="submit_container">
  <input type="submit" class="submit" value="<?php echo $this->submit; ?>" />
</div>
</div>
</form>
</div>
</div>
<!-- indexer::continue -->
<?php endif; ?>

<?php foreach ($this->comments as $comment) echo $comment; ?>
<?php echo $this->pagination; ?>

</div>

Gruß
Peter
2008-10-22 12:16
Hallo Peter,

mach es wie folgt - alles in der ce_comments

alt:
iconCode:
<div class="toggler">Einen neuen Kommentar schreiben</div>
neu:
iconCode:
<div class="toggler">Einen neuen Beitrag schreiben</div>

alt:
iconCode:
<?php foreach ($this->fields as $objWidget): ?>
<div class="widget">
  <?php echo $objWidget->generateWithError(); ?> <?php echo ($objWidget instanceof FormCaptcha) ? $objWidget->generateQuestion() : $objWidget->generateLabel(); ?><?php if ($objWidget->required): ?><span class="mandatory">*</span><?php endif; ?> 
</div>
<?php endforeach; ?>
neu - versteckt Name+Mail:
iconCode:
<input type="hidden" name="name" value="{{user::username}} | {{user::firstname}} {{user::lastname}}" /> 
<input type="hidden" name="email" value="{{user::email}}" /> 
<div class="widget">
  <textarea name="comment" id="ctrl_comment" class="textarea" rows="4" cols="40"></textarea>  
</div>

alt:
iconCode:
  <input type="submit" class="submit" value="<?php echo $this->submit; ?>" />
neu:
iconCode:
<input type="submit" class="submit" value="Beitrag absenden" />

So, das sollte es sein, wenn ich nicht noch was übersehen hab :)

Aber ich muss dir leider widersprechen, mit kleinen Tricks kann ich trotzdem versteckte Felder (also Namen und E-Mail) verändert absenden! Du kannst also nicht 100% sicher sein, dass es wirklich der User war.


Gruss
2008-10-22 23:19
peter63
User
Avatar
Hallo maccs,

ganz herzlichen Dank für Deine konkreten Vorschläge. Ich werde sie ausprobieren und melde mich dann mit dem Ergebnis. Aber heute geht es leider zeitlich nicht. Daher bitte ich um etwas Geduld.

Erscheint bei Deiner Lösung in der Auflistung der Kommentare nicht immer noch "Kommentar von ..."?

Gruß
Peter
2008-10-23 10:41
Ja, da hast du Recht :blush:

Probier's so
alt:
iconCode:
<?php foreach ($this->comments as $comment) echo $comment; ?>

neu:
iconCode:
<?php foreach ($this->comments as $comment); $comment = str_replace("\">
Kommentar von","\">
Beitrag von",$comment); echo $comment; ?>
Wichtig sind die Zeilenumbrüche!

Es wird nun im kompletten Kommentar einfach "> Kommentar von ersetzt. "> ist wichtig, damit nicht im eigentlichen Kommentartext fälschlicherweise etwas ersetzt wird.

Gruss

Edit: Lösung ist nun sauberer
Zuletzt bearbeitet von maccs, 2008-10-23 11:37
2008-10-23 11:26