54 Nachrichten unter 19 Themen von 27 Mitgliedern
[SilverStripe Roadmap][Changelog]

Einfacher Seiten Zähler

Seite: 1 3555 mal gelesen
  • Digga
    Digga Community Member
    11 Beiträge

    Einfacher Seiten Zähler

    Hallo

    Der Kopf ist dicht. Ich möchte einen einfachen Seitenzähler in mein Projekt integrieren auf der Basis von folgender Seite:
    http://www.sslearn.info/sslearn/creating-simple-page-counter/
    Der Zähler funktioniert ganz gut, nur möchte ich jetzt einen zusätzlichen Tab im Backend einfügen in dem der Zählerstand
    angezeigt wird und man ihn auch für die jeweilige Seite wieder nullen kann indem man den Wert auf Null setzt und speichert.
    Das mit dem Tab habe ich ja hinbekommen aber wie verknüpfe ich jetzt das Textfeld mit der Tabelle PageCounter->Counter?
    Vielleicht kann mir ja jemand helfen.
    Danke schonmal im vorraus.
  • keys71
    Community Member
    19 Beiträge

    Re: Einfacher Seiten Zähler

    Hi Digga,

    wenn Du das mit dem Tab hinbekommen hast, gehe ich davon aus, dass Du den Zählerstand anzeigen lassen kannst.

    Eine einfache Möglichkeit wäre auf dem Tab, der den Zählerstand anzeigt eine Checkbox einzublenden:
    Also in der Deiner Page-Klasse


    function getCMSFields()
    {
    $f = parent::getCMSFields();
    ...
    ...
    $f->addFieldToTab('Root.Content.DeinTabMitDemZaehler', new CheckboxField('ResetCounter', 'Zaehlerstand zurücksetzen?'));
    ...
    return $f;
    }


    function onBeforeWrite() {
    if( $this->ResetCounter==1 ) {
    if( $counter = DataObject::get_one("PageCounter","PageID='$this->ID'") ) {
    $counter->Counter = 0;
    $counter->write();
    }
    }
    parent::onBeforeWrite();
    }


    Es wird beim Speichern der Seite geschaut, ob die "Reset" Checkbox angehakt wird, und wenn ja, der Stand auf 0 gesetzt.

    Müsste eigentlich so funktionieren.

    Gruß,

    Robert
  • Digga
    Digga Community Member
    11 Beiträge

    Re: Einfacher Seiten Zähler

    Hallo Keys71

    Erstmal vielen Dank für die Hilfe. Es funktioniert so wie du geschrieben hast. Ich habe aber generell noch Probleme mit den Relationen zur Datenbank. Vielleicht kannst du mir nur zum Verständnis etwas helfen?
    Also, ich habe den Zähler ja wie beschrieben eingebaut und in meinem Template wird er wie folgt bearbeitet:


    <% if CurrentMember %>
    Bisher $pagecount x aufgerufen
    <% end_if %>


    Nur wenn ich angemeldet bin wird der Zähler angezeigt. Alles super....

    Jetzt aber meine Frage zur Anzeige des Zählers im Backend. Hier mein bisheriger Code:


    class Page extends SiteTree {
       
       public static $db = array(
       );
       
       public static $has_one = array(
    <-- Kann ich hierüber mein Counter-Textfield mit der DB Verbinden? evtl: 'PageCounter' => 'Counter',
       );

    function getCMSFields() {
    $fields = parent::getCMSFields();
          $pagecounter = DataObject::get_one("PageCounter","PageID='$this->ID'");
       if(!$pagecounter){
       $pagecounter->Counter = '0';
       }
    $fields->addFieldToTab('Root.Content.Aufrufe', new TextField('Counter','Seitenaufrufe',$pagecounter->Counter));
        $fields->addFieldToTab('Root.Content.Aufrufe', new CheckboxField('ResetCounter', 'Zaehlerstand zurücksetzen?'));
        return $fields;
    }


    Ich habe das mit den Relationen noch nicht verstanden...
    Es funktioniert ja auch so, aber für die Zukunft würde ich es gerne selber verstehen.

    Gruß Björn
  • keys71
    Community Member
    19 Beiträge

    Re: Einfacher Seiten Zähler

    Hi Björn,

    leider hast Du ein Tutorial erwischt, das einen Sonderfall behandelt.
    Die Relation zwischen Page und Counter ist 1:1.
    Eine Page hat genau einen Counter und genau so umgekehrt.
    Bei normaler DB-Normalisierung könnte man den Counter auch als Eigenschaft der Page Klasse definieren.

    static $db = array('Counter' => 'Int');

    Ich wäre auch fast darauf hereingefallen ....

    Folgendes Szenario:
    Eine Deiner Seiten hat irgendwann mal 1000 Klicks.
    Eine Woche später macht Dich ein freundlicher BEsucher auf einen kleinen Tippfehler aufmerksam.
    Du bedankst Dich, korrigierst das und veröffentlichst die Seite.

    Eine Woche später (Deine Klicks sind mittlerweile auf 2000 angewachsen) stellst Du fest:
    Mist, nach der "neuen" deutschen Rechtschreibung war das eigentlich richtig.

    Kein Problem, SS hat ja versionierte Seiten und stellst die Seite VOR Deiner Änderung wieder her.
    Was passiert ? Genau. Auch der alte Klickstand von 1000 wird mit wiederhergestellt.

    Um dieses Verhalten zu umgehen, macht man das in dem Fall so wie in dem Tutorial beschrieben.
    Aus diesem Grund halte ich das Tutorial nicht unbedingt für SS-Neulinge geeignet.

    Was ich Dir nur empfehlen kann ist das Buch hier. Es ist zwar nicht mehr ganz Aktuell, denn in den letzten Versionen hat sich bei SS Einiges getan, aber die Prinzipien und Herangehensweisen bleiben nach wie vor bestehen.


    Beste Grüße,
    Robert


  • Digga
    Digga Community Member
    11 Beiträge

    Re: Einfacher Seiten Zähler

    Hallo Robert

    Vielleicht habe ich mich nicht sehr gut ausgedrückt. Relationen von Datenbanken verstehe ich generell schon, nur die Verknüpfung Silverstripe zur Datenbank macht mir noch Schwierigkeiten. Wie und was ich wann wo eingeben muss hat sich noch nicht verinnerlicht.
    Mit Datenbanken arbeite ich schon lange, bin darin nicht unbedingt ein Ass, aber konnte bisher alles lösen. Nutze Datenbanken mit Delphi, Visual Basic und PHP. Doch die Arbeit mit einem Framework ist doch etwas anderes als wenn man alles selber programmiert hat.
    Das Buch habe ich übrigens vorliegen, ist aber teilweise harter Tobak.
    Trotzdem vielen Dank für deine Hilfe und die netten Antworten.
    Es funktioniert ja jetzt zufriedenstellend.

    Gruß und Danke Björn
  • keys71
    Community Member
    19 Beiträge

    Re: Einfacher Seiten Zähler

    Hi Björn,

    ein guter Anlauf für Info ist die Dokumentation mit guten Tutorials.

    http://doc.silverstripe.org/

    Speziell bei Deinen Fragen:
    http://doc.silverstripe.org/sapphire/en/topics/datamodel#relations

    und hier noch:
    http://www.ssbits.com

    Gruß,
    Robert

Zur Zeit online: Zur Zeit ist leider niemand online.

Wir begrüßen unsere neuen Mitglieder: besteschoenen