10. März 2010 - 20:48
Es gibt sehr viele Social Networks und ebenso viele verschiedene Webdienste welche diese teilweise unterstützen. Ich mache hier mal eine Liste der Netzwerke und Dienste die ich verwende. Das...
4. März 2010 - 15:51
Vor einigen Tagen/Wochen habe ich über Drupal 7 zwei Blogeinträge geschrieben (Drupal 7 Alpha 1 - Meine ersten Eindrücke und Drupal 7 Alpha 1 - Installation/Update von Modulen oder...
25. Februar 2010 - 22:11
Nach längerer Zeit habe ich wieder mal etwas kleines an meinem Drupal Theme gemacht. Die drei Blöcke oben mit den drei neusten Blogeinträge. Ich verwende das Theme Acquia Marina, da...

Das beinah perfekte Gästebuch mit Drupal

DruckversionSend to friendPDF Version

Nach dem ich vor einiger Zeit einen Post erstellt habe, in dem ich zeigte, wie einfach ein Blog mit Drupal aufgebaut werden kann, will ich dies nun weiterführen und zeigen, wie einfach man ein eigenes Gästebuch mit Drupal bauen kann. Klar, es gibt verschiedene Gästebuch-Module für Drupal, doch selber bauen ist nicht wirklich schwierig und der Lernfaktor ist um einiges grösser als mit der blossen Installation eines Modules.

Also zeige ich hier nun Schritt für Schritt, wie ein eigenes Gästebuch mit Drupal erstellt werden kann.

Wer das Gästebuch schon mal im voraus anschauen möchten, klicke doch bitte hier!

Folgender Code und Module werden für das Gästebuch verwendet.

  • Comment (Core)

Als Theme habe ich das sehr gute Acquia Marina Theme verwendet. Und zu guter letzt noch je ein Icon als Symbol für eine E-Mail Adresse Email Icon und eines für eine Webseite Icon für eine Website. Diese können natürlich nach belieben ausgetauscht werden. So nun aber genug der Vorbereitung, jetzt gehts los.

Als erstes erstellt man ein Formular, damit der Gast einen Eintrag machen kann. Ich habe dies mit CCK gelöst. So wird jeder Eintrag im Gästebuch als Node angelegt und man kann bequem per Views darauf zu greifen.
Man muss einen neuen Inhaltstyp anlegen mit Namen Gästebuch. Im gleich Fenster sollte man jetzt noch unter "Einstellungen für das Eingabeformular" das Tite-l und Textkörperfeld in "Betreff" und "Inhalt" umbenennen.
Inhaltstyp konfigurieren

Unter "Einstellungen für den Arbeitsablauf" sollte nur der Haken bei "Veröffentlicht" stehen. Wir wollen ja nicht gleich, allle Einträge auf der Startseite anzeigen lassen.
Veröffentlichen

Nun kann der Inhaltstyp ein erstes mal gespeichert werden.
Anschliessend müssen noch zusätzliche Felder hinzugefügt werden:
Felder hinzufügen

Hier gilt vorallem darauf zu achten, dass für das E-Mail und das Website-Feld den richtige Feldtyp ausgewählt wird. Um das Ganze noch ein wenig aufzulockern, habe ich die persönlichen Angaben noch gruppiert.
Nach dem Speichern des Inhaltstyps, sollte man gleich noch die Berechtigungen für die soeben erstellen Felder vergeben, ansonsten sieht der Gast ausser dem Betreff- und dem Inhaltsfeld nichts. Dies wird unter den Berechtigungen ⇒ content_permissions-Modul erledigt.
Berechtigungen richtig setzen

Jetzt kann man bereits unter /node/add/gaestebuch erste Gästebucheinträge hinzufügen.

Als nächstes machen wir uns nun daran, die eingetragenen Einträge schön darzustellen. Dazu müssen wir eine neue View und ein passendes Viewstemplate erstellen.
Die passende View zu erstellen ist kein Problem. Folgende Einstellungen müssen beachtet werden:

  • Filter
    • Node: Typ = Gästebuch
    • Node: Veröffentlicht Ja
      Views - Filter einstellenSo sollte es nun aussehen
  • Basiseinstellungen
    • Darstellung: unformatiert
    • Zeilendesign: Node
      • Darstellung für die Zeilen: Vollständiger Beitrag
        Views konfiguration
        Dies Einstellung ist sehr wichtig, da man damit die Möglichkeit hat, die View selber zu themen
    • Kopfbereich: Link zum Gästebuchformular erstellen
      Link zum Formular erstellen
  • Sortierkriterium: Node, Beitragsdatum absteigend

Jetzt muss noch eine Anzeige hinzugefügt werden und diese mit einem Pfad und einem Menüpunkt versehen. Schlussendlich sieht die komplette View so aus:
Ansicht der kompletten View

Nicht vergessen die View nun zu speichern!!

Jetzt gehen wir daran, die View zu themen. Keine Angst ist nicht schwierig. Kennt man die kleinen Details wird es sogar sehr einfach. Damit wir die View nach unseren Wünschen gestalten können, müssen wir eine neue tpl Datei anlegen. Diese muss einen ganz bestimmten Namen haben, damit wir später mit den Variablen aus dem Content Template arbeiten können. Also, gehe nun per FTP auf deinen Webserver in dein Verzeichnis mit dem verwendeten Theme und erstelle die Datei: node-view-gaestebuch.tpl.php. Der Teil "gaestebuch" bezieht sich auf den Namen der View.

Nach dem diese Datei erstellt wurde, öffnet man das Content Template. Dies ist über Inhaltverwaltung ⇒ Content Template zu finden.
Content Templates

Klicke nun auf "create template" ⇒ "Textkörper" ⇒ "Body Variables" ⇒ Jetzt erscheinen sämtliche Variablen des Nodes "Gästebuch"
Variablen des Nodes

Als erstes wollen wir den Betreff, also den Titel, des Eintrages ausgeben. Dazu muss die Variable $node->title;
 verwendet werden. Diese kann nun in die oben erstellte Datei eingefügt werden. Unsere tpl Datei sieht nun also folgendermassen aus:

<?php
     print $node->title;
?>

Wenn man jetzt wieder in die View geht und sich die Vorschau anzeigen lässt, erscheinen nur die Betreffzeilen der jeweiligen Einträge. So kann jetzt natürlich die ganze View nach belieben weiter entwickelt und mit HTML und CSS aufgepimpt werden.
Mein tpl File sieht schlussendlich so aus:

  <div class="border_gaestebuch">

    <div class="g_titel">
        <?php
            print $node->title;
        ?>
    </div>
    <div class='g_datum'>
        <?php
            print format_date($node->created);
        ?>
    </div>

    <div class="g_link">
        <?php   
            if($node->field_email[0]['safe'])
                {
                    print " <a href='mailto:".$node->field_email[0]['safe']."'><img src='sites/gaestebuch.redpanda.ch/files/icons/email.png' border='0'></a> ";
                }
            if($node->field_website[0]['url'])
                {
                    print " <a target=_blank rel='nofollow' href='".$node->field_website[0]['url']."'><img src='sites/gaestebuch.redpanda.ch/files/icons/world.png' border='0'></a> ";
                }
        ?>
    </div>
    <div class="g_name">
        <?php
            print $node->field_vorname[0]['value'] ." ". $node->field_name[0]['value'];
        ?>
    </div>
    <br style="clear:both;" />
    <div class="g_text">
        <?php
            print $node->content['body']['#value'] ;
        ?>
    </div>
   
    <?php
    if($comm)
        {
            print "<div class='g_comment'>Der Admin meint:<br>". $comm ."</div>";
        }
    ?>
   
</div>

Und das dazu gehörige CSS File:

.border_gaestebuch {
    background-color: #ffffff;
    border: 1px solid #144A6E;
    -moz-border-radius:8px;
    -khtml-border-radius:8px;
    margin: 0 0 10px 0;
    padding: 10px 0 10px 0;
}

.g_titel{
    background-color:#94CE18;
    text-transform:uppercase;
    text-shadow:1px 1px #545454;
    font-size:150%;
    color:#ffffff;
    margin: 5px 0 5px 0;
    padding: 5px 5px 5px 10px;
}

.g_datum {
    text-shadow:1px 1px #545454;
    font-size:10px;
    color:#fff;
    text-align: right;
    margin: -29px 10px 10px 0;
    font-weight: bold;
}

.g_name {
    font-size:1.2em;
    color:#144A6E;
    text-transform:capitalize;
    padding:3px 0 0 10px;
    float:left;
    margin:0 0 5px;
}

.g_link {
    text-align:right;
    padding: 0 10px 0 0;
    float:right;
    margin:3px 0;  
}

.g_text{
    background-color: #94CE18;
    border: 1px solid #94CE18;
    -moz-border-radius:8px;
    -khtml-border-radius:8px;
    margin: 3px 10px 5px 10px;
    padding: 0 10px 0 10px;
    color:#ffffff;   
}

.g_comment{
    background-color: #144A6E;
    border: 1px solid #144A6E;
    -moz-border-radius:8px;
    -khtml-border-radius:8px;
    margin: 10px 10px 5px 10px;
    padding: 10px;
    color:#ffffff;      
}

 

Die Views sollte jetzt in etwa so aussehen:
Gäsetbuch View

Die Icons für die Webseite oder die E-Mail Adresse erscheinen nur wenn auch wirklich etwas eingegeben wurde.

Und schon haben wir ein kleines aber feines, selbstgemachtes Gästebuch mit wenig Aufwand erstellt. Wer das Gästebuch mal live anschauen möchten, klicke doch bitte hier!

Was jetzt noch fehlt, ist ein Administationsansicht mit der Möglichkeit, die Einträge zu kommentieren. Dazu mehr aber im zweiten Teil vom "Das beinah perfekte Gästebuch".

Noch keine Bewertungen

Kommentare

Split summary at Cursor / Anzeige des Eintrages

Hi,
ich hätte mal noch 2 Fragen zum Gästebuch.
 
1.) Wenn man einen Eintrag im Gästebuch macht, hat man beim Inhalt noch den Optiosbutton (Split summary at Cursor). Tut der User dies und gibt Text in den dadurch entstandenen teaser ein, wird der nachher nicht angezeigt. Die Option das überhaupr machen zu können halte ich an dieser Stelle für Überflüssig. Gibt es eine Möglichkeit den Button für den Inhaltstyp rauszunehemen??
 
2.) Wenn ein Eintrag gemacht wurde wird man nicht auf das Gästebuch zurückgeleitet um den Eintrag zu sehen, sondern man bekommt die Node des Eintrages angezeigt. Dies finde ich auch recht unschön und wollte Fragen ob man hier irgendwie nach erstellen eines Gästebucheintrages direkt wieder in das selbige zurück springen kann.
 
Gruss Bastian

falsche Variable

so
ich hab mal bisl getestest und anscheinend ist die variable falsch.
weil, wenn man als gast liest steht kein benutzername
wenn man eingeloggt ist wird derjenige als benutzername angezeigt der eingeloggt ist.
zum beseren verständniss:
eingeloggt als Panbär, steht dann "Pandabär meint:" obwohl Dönertier den kommentar geschrieben hat *gg*
also geh ich mal davon aus das .$user->name. falsch ist.
nu müßte man wissen welches die richtige variable ist ???
 
 
 

Ach ja stimmt...

...das ist ja nur die Variable des angemeldeten Users, diese müsste nun natürlich in die DB gespeichert werden. Ich muss mal schauen, gibt sicher eine Lösung. Denke, es wir ja bekannt sein, wer den Kommentar schreibt, dann müsste man nur noch diesen Namen aus der DB auslesen und darstellen...ich schaue mal und melde mich wieder.

moin und? hat jemand mal ne

moin
und? hat jemand mal ne lösung gefunden?
wer den kommentar schreibt wird ja inner tabelle gespeichert, bloß wie setz ich das das ers auch ausgibt?

Leider noch nicht

...aber ich gebe zu, habe es irgendwie vergessen. Hoffe komme diese Woche noch dazu.

hi erstmal großes lob ist

hi
erstmal großes lob
ist echt ein cooles teil
 
aber ich hab da mal ne frage :)
und zwar, wenn man nun mehere admins hat die berechtigung haben kommentare zu schreiben, wie mach ich das am besten das statt "kommentar vom admin" dann der benutzername ausgegeben wird, der den kommentar geschrieben hat.
also z.b. kommentar von redpanda, oder so ???
 
 

Dankeschön

Vielen Dank für dein Lob...hört bzw. liest man immer gerne.

So, jetzt weiss ich auch, was du meinst...nach dreimal lesen ;-) Bin nicht mehr der hellste.
Du meinst ja wahrscheinlich, diese Zeile hier:

if($comm)
        {
            print "<div class='g_comment'>Der Admin meint:<br>". $comm ."</div>";
        }
    ?>

Anstelle von Admin, möchtest du den Usernamen stehen haben.
Ohne es getestet zu haben, sollte dies hier eigentlich funktionieren:

if($comm)
        {
             global $user;
             print "<div class='g_comment'>". $user->name ." meint:<br>". $comm ."</div>";
        }
    ?>

Hoffe mit den Punkten und Anführungszeichen stimmt so.
Würde mich über ein kleines Feedback freuen, wenn es funktioniert.

Danke und Gruss
redpanda

joar, das funzt cool, tausend

joar, das funzt
cool, tausend und ein dank :)
 
mit $user->name hat ich auch schon rumprobiert, aber wollte nicht so ^^
so wie ich das jez sehe lags an der fehlenden global $user; zeile
 
 

im IE wird dadurch irgendwie

im IE wird dadurch irgendwie kein kommenatr mehr angezeigt und google crome gibt benutzername nicht aus.
is auch zum kotzen, das man immer auf 800 browsern alles testen muß *lol*
gibts dafür ne lösung?
aber firefox funzt prima :)
 

sollte ja kein meckern sein

sollte ja kein meckern sein :)
is mir auch nur aufgefallen, als ich von nem anderen rechner mal drauf bin der "tatsächlich" noch mit ie arbeitet ^^
 
sollte nur ne info sein, wußte ja nicht obs bekannt ist oder nicht und so ;)
 
 

Kein Problem

...bin ja für jeden Input dankbar! Auch für weniger schöne wie solche IE Geschichten ;-)

IE Problem

hi
ist eigentlich mal jemaden aufgefallen das das gb im ie nicht richtig angezeigt wird ??
 
lg
 
 

Runde Ecken

So schlimm sieht es ja gar nicht aus im IE. Die runden Ecken sind nicht vorhanden, dass ist aber klar, da der IE nichts mit diesen CSS Befehlen anfangen kann. Ansonsten ist es aber gar nicht so schlimm. Was hast du sonst noch gesehen, was nicht schön dargestellt wird.

Ist durchaus möglich

Tut mir natürlich leid, wenn das Gästebuch im IE nicht schön angezeigt wird. Da ich aber kein grosser Designer bin und nach einer weile keine Geduld mehr habe mit CSS und irgendwelchen komischen Browsern nehme ich das mal auf mich.

Es soll ja auch mehr um die Technik von Drupal gehen und weniger das Design.

Aber danke für deine Info, vielleicht schaue ich mir das ganze mal an im IE.

mit admin freischalten :-)

hallo :-) erstmal geilo teilo^^ dickes lob !
 
nun aber meine frage besteht die möglichkeit es so einzustellen das der admin erst die einträge freischalten muss?
das wäre dolll^^ wennd as irgendwie funzt...
 
 
lg
sili
 

Sollte kein Problem sein

Hi

Ziemlich weit oben steht der folgende Satz:
Unter "Einstellungen für den Arbeitsablauf" sollte nur der Haken bei "Veröffentlicht" stehen. Wir wollen ja nicht gleich, allle Einträge auf der Startseite anzeigen lassen.

Wenn du dort jetzt nun auch den Haken bei "Veröffentlicht" wegnimmst, dann werden die Einträge nicht automatisch veröffentlicht. Nun musst du dir einfach noch eine Benachrichtigung einrichten (mit Actions und Trigger) und du erhälst eine Mail.

Viel Erfolg!
Gruss
redpanda

Veröffentlich/Nicht Veröffentlich

hallo zusammen,

ich habe das Gästebuch so aufgebaut, dass der Admin veröffentlichen muss. Schreibt jetzt ein Gast einen Eintrag, bekommt er "... wurde erzeugt" und darunter die Fehlermeldung, dass der Zugriff verweigert wäre..

hat da jemand eine idee zu ?

Vielen Dank schon vorab.
Steffen

Nur mit der Option

Hallo Steffen
Hast du dieses Problem nur, wenn du die Option einstellst, dass der Admin veröffentlichen muss und sonst nicht?
Gruss
Michi 

Nachfrage wegen Gästebuch

Hallo, die Anleitung ist große Klasse! Obwohl ich m.W. alles genauso gemacht habe, bleibt ein kleines Problem: in meinem Gästebuch erscheint der Betreff doppelt, einmal über dem Kasten für den Gästebucheintrag in Form eines Links und einmal in dem Kasten, so wie bei Dir. Was mache ich falsch?
Gruß, Hans

Vielen Dank

Hallo Hans, bitte sende mir doch mal dein tpl File, dann kann ich nachschauen, was evtl. nicht ganz richtig ist.

Danke und Gruss
redpanda