Seite 1 von 3

Artikel bewerten

Verfasst: Mi 4. Nov 2009, 11:30
von _wiewo_
Tagchen :)

So heute schmeiß ich gleich mal noch nen Modul hinterher. :)

Gestern gabs ja mein "Anwesensheitsmodul" und heute gibts etwas was man so aus WordPress kennt, unzwar die Artikelbewertung. :)

Einstellen braucht Ihr nur Zeile 13 und 14

Code: Alles auswählen

$iSperrzeit = 24*60*60;
$iMaxSterne = 5;
Dort gebt Ihr an, wieviel Sterne maximal vergeben werden dürfen, und wie lange eine IP davon ausgeschlossen ist den gleichen Artikel nochmal zu bewerten (in Sekunden).
Den Rest erledigt das Script ganz von alleine.

Hier mal der Code

Code: Alles auswählen

<?php
/*************************************************************
 * CONTENIDO MODUL - OUTPUT
 *
 * @name 		wtArtikelbewertung
 * @version 	1.0.1
 * @author 		Christian Kehres
 * @copyright 	webtischlerei.de <www.webtischlerei.de>
 * @license 	http://www.gnu.org/licenses/gpl-3.0.txt
 *************************************************************/

// Configuration
$iSperrzeit = 24*60*60;
$iMaxSterne = 5;

// neues Objekte zur Templateverwendung initialisieren
(!isset($oTemplate) ? $oTemplate = new Template() : $oTemplate->reset());

// Objekt zur Artikelbewertung initialisieren
$oArtikelbewertung = new wtArtikelbewertung($iSperrzeit, $iMaxSterne);

// dem Artikel eine Bewertung geben
$oArtikelbewertung->rate(Contenido_Security::toInteger($_GET['article_rate']));

// Sterne ausgeben
for ($i = 1; $i <= $oArtikelbewertung->getMaxSterne(); $i++) {
	$oTemplate->set('d', 'bewertungslink', 	Contenido_Url::getInstance()->build(array('idart' => $idart, 'lang' => $lang, 'client' => $client, 'article_rate' => $i)));
	$oTemplate->set('d', 'empty_full', 		($i <= $oArtikelbewertung->getGesamtbewertung() ? 'full' : 'empty'));
	$oTemplate->next();
}

// Anzahl der maximalen Sterneanzahl ans Template übergeben
$oTemplate->set('s', 'maxsterne', 			$iMaxSterne);

// Bewertung des Artikels an das Template übergeben
$oTemplate->set('s', 'gesamtbewertung', 	$oArtikelbewertung->getGesamtbewertung());

// das Template generieren und ausgeben
$oTemplate->generate('templates/artikelbewertung.html', false, true);


###############################
### die dazugehörige Klasse ###
###############################

class wtArtikelbewertung {

	private $_oArticle 		= null;
	private $_iSperrzeit 	= null;
	private $_sRemoteAddr 	= null;
	private $_iTimestamp 	= null;
	private $_iLastRate 	= null;
	private $_iMaxSterne 	= null;

	public function wtArtikelbewertung($iSperrzeit, $iMaxSterne) {
		$this->_setArticle();
		$this->_setSperrzeit($iSperrzeit);
		$this->_setRemoteAddr($_SERVER['REMOTE_ADDR']);
		$this->_setTimestamp();
		$this->_setMaxSterne($iMaxSterne);
	}

	private function _setArticle() {
		global $idart;

		$this->_oArticle = new cApiArticle($idart);
	}

	private function _getArticle() {
		return $this->_oArticle;
	}

	private function _setSperrzeit($iSperrzeit) {
		$this->_iSperrzeit = $iSperrzeit;
	}

	private function _getSperrzeit() {
		return $this->_iSperrzeit;
	}

	private function _setRemoteAddr($sRemoteAddr) {
		$this->_sRemoteAddr = $sRemoteAddr;
	}

	private function _getRemoteAddr() {
		return $this->_sRemoteAddr;
	}

	private function _setTimestamp() {
		$this->_iTimestamp = time();
	}

	private function _getTimestamp() {
		return $this->_iTimestamp;
	}

	private function _setBewerter() {
		$aBewerter = $this->_getBewerter();

		$aBewerter[$this->_getRemoteAddr()] = $this->_getTimestamp();

		$this->_getArticle()->setProperty('artikelbewertung', 'bewerter', base64_encode(serialize($aBewerter)));
	}

	private function _getBewerter() {
		return unserialize(base64_decode($this->_getArticle()->getProperty('artikelbewertung', 'bewerter')));
	}

	private function _setSterne($iSterne) {
		$this->_getArticle()->setProperty('artikelbewertung', 'sterne', $this->getSterne()+$iSterne);
	}

	public function getSterne() {
		return $this->_getArticle()->getProperty('artikelbewertung', 'sterne');
	}

	private function _setBewertungen() {
		$this->_getArticle()->setProperty('artikelbewertung', 'bewertungen', $this->getBewertungen()+1);
	}

	public function getBewertungen() {
		return $this->_getArticle()->getProperty('artikelbewertung', 'bewertungen');
	}

	private function _setGesamtbewertung() {
		$this->_getArticle()->setProperty('artikelbewertung', 'gesamtbewertung', round(bcdiv($this->getSterne(), $this->getBewertungen(), 2), 0));
	}

	public function getGesamtbewertung() {
		$iGesamtbewertung = $this->_getArticle()->getProperty('artikelbewertung', 'gesamtbewertung');
		
		return ($iGesamtbewertung >= 1 ? $iGesamtbewertung : 0);
	}

	private function _setMaxSterne($iMaxSterne) {
		$this->_iMaxSterne = $iMaxSterne;
	}

	public function getMaxSterne() {
		return $this->_iMaxSterne;
	}

	private function _checkSperre() {
		// Bewerter dieses Artikels auslesen
		$aBewerter = $this->_getBewerter();

		return (bcadd($aBewerter[$this->_getRemoteAddr()], $this->_getSperrzeit()) < $this->_getTimestamp() ? true : false);
	}

	private function _checkSterne($iSterne) {
		return ($iSterne > 0 && $iSterne <= $this->getMaxSterne() ? true : false);
	}

	public function rate($iSterne) {
		// überprüfen ob ein zugelassener Wert übergeben wurde
		if ($this->_checkSterne($iSterne)) {
			// überprüfen ob die letzte Wertung mehr als x Sekunden her ist
			if ($this->_checkSperre()) {

				$this->_setBewerter();
				$this->_setSterne($iSterne);
				$this->_setBewertungen();
				$this->_setGesamtbewertung();

			}
		}
	}

}
?>
Was noch auf meiner Liste steht als Features
  • Bewertung nur für angemeldeten FrontendUser
  • nicht nur die IP 24 Stunden zb sperren, sondern auch einen Cookie setzen
  • wenn es FrontendUser sind Artikelbewertung nur ein einziges mal möglich
  • bewertung per Ajax
passendes Modul-Template

Code: Alles auswählen

<div id="bewertung">
<h2>Bewertung</h2>
<div id="sterne">{gesamtbewertung} von {maxsterne}
<!-- BEGIN:BLOCK -->
	<a href="{bewertungslink}" class="stern_{empty_full}">rate</a>
<!-- END:BLOCK -->
</div>
<div style="clear: both;"></div>
</div>
passendes CSS (Beispiel von meiner Seite)

Code: Alles auswählen

#bewertung #sterne {
	height: 17px;
	width: 65%;
	display: block;
	line-height: 17px;
	font-size: 12px;
	float: right;
	text-align: right;
}

#bewertung #sterne a {
	width: 17px;
	height: 17px;
	display: block;
	float: left;
	margin-right: 3px;
	text-indent: -8000px;
	text-align: justify;
	background-image: url(../images/stars.png);
}

#bewertung #sterne a.stern_full {
	background-position: 0 0;
}

#bewertung #sterne a.stern_empty {
	background-position: 0 17px;
}

#bewertung #sterne a:hover {
	background-position: 0 34px;
}
Die Grafik für die Sterne bekommt ihr hier !

Bei Kritik bitte bedenken, Version 1 :)

Re: Artikel bewerten

Verfasst: Fr 22. Jan 2010, 14:33
von Thomas Steger
Ersteinmal Danke für diese Modul. Es läuft auch absolut problemlos.

Jetzt habe ich nur eine Frage: lässt sich irgendwo auslesen, wieviele Besucher eine Bewertung für den Artikel abgegeben haben?

Danke

Thomas

Re: Artikel bewerten

Verfasst: Fr 22. Jan 2010, 17:46
von _wiewo_
in der klasse findest du folgende 3 Zeilen

Code: Alles auswählen

public function getBewertungen() {
    return $this->_getArticle()->getProperty('artikelbewertung', 'bewertungen');
}
also machst du im modul

Code: Alles auswählen

$oArtikelbewertung = new wtArtikelbewertung($iSperrzeit, $iMaxSterne);
$iBewertungen = $oArtikelbewertung->getBewertungen();

Re: Artikel bewerten

Verfasst: Fr 22. Jan 2010, 19:11
von Thomas Steger
Vielen Dank - hat funktioniert.

LG

Thomas

Re: Artikel bewerten

Verfasst: Do 18. Mär 2010, 19:43
von dosenbrot
Hallo Christian,

deine Subdomain ist derzeit nicht erreichbar bzw. scheint nicht mehr zu existieren?
Könntest du deine Sterchengrafik bitte noch einmal irgendwo zum Download parat stellen, da ich das Modul sehr gerne ausprobieren möchte?

Gibt es zudem die Möglichkeit, aus den Bewertungen Charts zu erstellen?
Also wir nehmen an, es gibt die Rubrik XY mit einem Startartikel, in dem die Charts (Top 10) der am besten bewerteten Artikel erscheinen soll aus den Artikeln, die alle in der Kategorie liegen. Hast du das zufällig für eigene Werke schon umgesetzt und magst es der Community zur Verfügung stellen?

Danke und Grüße
Felix

Re: Artikel bewerten

Verfasst: Fr 19. Mär 2010, 14:30
von _wiewo_
Hey,

also die Klasse/das Modul bekommt bald nochmal nen dickes update,
hatte bisher alles als Propertys gespeichert, von dem weg bin ich jetzt weg, machte die sache zwar relativ simpel, aber schränkt den funktionsumfang dann doch ein

denke mitte april steht v2,

damit sind dann auch solche listen wie "top10" aller kategorien, dieser kategorie oder von kategorie 1,2 und 3, mit / ohne unterkategorien etc möglich

Re: Artikel bewerten

Verfasst: Mo 28. Feb 2011, 18:13
von Spider IT
Hey _wiewo_,

meintest du Mitte April 2010, 2011 oder noch später für die Version 2? :D

Aber mal im Ernst, hast du da schon was fertig? Ich brauche nicht unbedingt die Auswertungsseiten, muss aber die Geschichte mit den Frontend-Usern umsetzen und baue natürlich lieber auf die bessere Version auf. Den Frontend-User Scheiß kann ich dir dann auch zuschicken, dann musst du das nicht selbst nochmal entwickeln :)

Gruß
René

Re: Artikel bewerten

Verfasst: So 13. Mär 2011, 13:50
von MakD42
Hallo Christian

Versuche gerade das Modul zu Installieren. Dabei bekomme ich folgende Fehlermeldung angezeigt:

Code: Alles auswählen

Fatal error: Class 'cApiArticle' not found in /kunden/domain.de/contenido/external/backendedit/front_content.php(981) : eval()'d code on line 447
Was könnte das sein? Freue mich von Dir zu hören.

Re: Artikel bewerten

Verfasst: Mo 11. Mär 2013, 20:07
von derSteffen
Hallo,

ich nutze auch das Modul mit aktivierter IP-Sperre. Dummerweise ist es doch jetzt so, dass ich auch keine anderen Artikel mehr bewerten kann, oder?

Vielen Dank

MfG Steffen

PS: Eine Cookie-Funktin wäre natürlich auch noch eine schöne Ergänzung.

Re: Artikel bewerten

Verfasst: Di 12. Mär 2013, 07:55
von McHubi
Moin,

ich kenne das Modul zwar nicht, hätte aber eine Idee zur IP-Problematik. Wenn die IP irgendwo hinterlegt wird, und immer nur nach der IP geprüft wird, kann es ja zwangsläufig nur zu einer "Generalsperrung" kommen. Wie wäre es, wenn Du einfach die idart mit an die IP dranpappst? statt 123.456.789.0 würde dann 123.456.789.0-123 gespeichert und Du hättest ein Blocken weiterer Bewertungen nur für einen bestimmten Artikel. Frage mich allerdings beim Querlesen des Moduls, wo die IP überhaupt hinterlegt wird... Evtl. nur "temporär"? Sozusagen wenn die die Seite verlassen oder der Browsercache gelöscht oder ... wie auch immer ist eine neue Bewertung möglich? Sehe auch nirgends eine Abfrage wie denn überhaupt die IP lautet... Hm... :|

Re: Artikel bewerten

Verfasst: Di 12. Mär 2013, 08:29
von derSteffen
Hallo,

also es scheintzu funktioniern mit der IP im Modul. Ach ich kann versuchen einfach die idcatart ranzuhängen und dann ist schon für die IP der Artiekl gesperrt?

MfG Steffen

Re: Artikel bewerten

Verfasst: Do 14. Mär 2013, 11:22
von McHubi
Wie schon geschrieben, habe ich bislang nicht entdeckt wo und wie die ip gespeichert wird. Nehmen wir einmal an - ich meine es ist nicht so aber als Beispiel zum Erläutern - die IP wird in einer DB hinterlegt. Dann erfolgt bei jedem Seitenaufruf die Prüfung "ist die IP schon in der DB drin oder nicht?". Wenn nicht -> Bewertung zugelassen / Wenn ja -> Bewertung geblockt. Da immer nur ausschließlich auf die IP geprüft wird, gilt diese Aussage generell für alle aufgerufenen Seiten auch wenn nur eine von ihnen bewertet wurde. Packst Du einfach die idart oder ähnliches dran, kannst Du nach IP und dem eindeutigen Schlüssel pro Einzelseite prüfen.

Kategorie bewerten

Verfasst: Mi 26. Jun 2013, 19:26
von derSteffen
Hallo,

also die IP-Sperre des Moduls funktioniert! Auch wenn ich nicht weiß wo das abgespeichert wird und wo die Ergebnisse gespeichert werden?

Ich habe das Modul jetzt so umgebaut, dass man damit nicht einen einzelnen Artikel bewertet, sondern ganze Kategorien. Das macht sich z.B. ganz gut, wenn man eine Kategorie Geschäft XY hat und in der Kategorie sich alle Seiten für dieses Geschäft befinden, kann man auf jeder Seite für dieses Geschäft seine Stimme abgeben (natürlich nur wenn die IP-Sperre abgelaufen ist):

KATEGORIE-BEWERTUNG

Code: Alles auswählen

<?php
    /*************************************************************
    * CONTENIDO MODUL - OUTPUT
    *
    * @name       wtKategoriebewertung
    * @version    1.0.1
    * @author       Christian Kehres
    * @copyright    webtischlerei.de <www.webtischlerei.de>
    * @license    http://www.gnu.org/licenses/gpl-3.0.txt
    *************************************************************/

    // Configuration
    // $iSperrzeit = 24*60*60;
	$iSperrzeit = 60;
    $iMaxSterne = 5;

    // neues Objekte zur Templateverwendung initialisieren
    (!isset($oTemplate) ? $oTemplate = new Template() : $oTemplate->reset());

    // Objekt zur Kategoriebewertung initialisieren
    $oKategoriebewertung = new wtKategoriebewertung($iSperrzeit, $iMaxSterne);

    // dem Artikel eine Bewertung geben
    $oKategoriebewertung->rate(Contenido_Security::toInteger($_GET['category_rate']));

    // Sterne ausgeben
    for ($i = 1; $i <= $oKategoriebewertung->getMaxSterne(); $i++) {
       $oTemplate->set('d', 'bewertungslink',    Contenido_Url::getInstance()->build(array('idcat' => $idcat, 'lang' => $lang, 'client' => $client, 'category_rate' => $i)));
       $oTemplate->set('d', 'empty_full',       ($i <= $oKategoriebewertung->getGesamtbewertung() ? 'full' : 'empty'));
       $oTemplate->next();
    }
	
	// 
	$iBewertungen = $oKategoriebewertung->getBewertungen();
    $oTemplate->set('s', 'bewerteranzahl',          $iBewertungen);

    // Anzahl der maximalen Sterneanzahl ans Template übergeben
    $oTemplate->set('s', 'maxsterne',          $iMaxSterne);

    // Bewertung des Artikels an das Template übergeben
    $oTemplate->set('s', 'gesamtbewertung',    $oKategoriebewertung->getGesamtbewertung());

    // das Template generieren und ausgeben
    $oTemplate->generate('templates/bewertung.html', false, true);


    ###############################
    ### die dazugehörige Klasse ###
    ###############################

    class wtKategoriebewertung {

       private $_oCategory       = null;
       private $_iSperrzeit    = null;
       private $_sRemoteAddr    = null;
       private $_iTimestamp    = null;
       private $_iLastRate    = null;
       private $_iMaxSterne    = null;

       public function wtKategoriebewertung($iSperrzeit, $iMaxSterne) {
          $this->_seCategory();
          $this->_setSperrzeit($iSperrzeit);
          $this->_setRemoteAddr($_SERVER['REMOTE_ADDR']);
          $this->_setTimestamp();
          $this->_setMaxSterne($iMaxSterne);
       }

       private function _seCategory() {
          global $idcat;

          $this->_oCategory = new cApiCategory($idcat);
       }

       private function _getCategory() {
          return $this->_oCategory;
       }

       private function _setSperrzeit($iSperrzeit) {
          $this->_iSperrzeit = $iSperrzeit;
       }

       private function _getSperrzeit() {
          return $this->_iSperrzeit;
       }

       private function _setRemoteAddr($sRemoteAddr) {
          $this->_sRemoteAddr = $sRemoteAddr;
       }

       private function _getRemoteAddr() {
          return $this->_sRemoteAddr;
       }

       private function _setTimestamp() {
          $this->_iTimestamp = time();
       }

       private function _getTimestamp() {
          return $this->_iTimestamp;
       }

       private function _setBewerter() {
          $aBewerter = $this->_getBewerter();

          $aBewerter[$this->_getRemoteAddr()] = $this->_getTimestamp();

          $this->_getCategory()->setProperty('Kategoriebewertung', 'bewerter', base64_encode(serialize($aBewerter)));
       }

       private function _getBewerter() {
          return unserialize(base64_decode($this->_getCategory()->getProperty('Kategoriebewertung', 'bewerter')));
       }

       private function _setSterne($iSterne) {
          $this->_getCategory()->setProperty('Kategoriebewertung', 'sterne', $this->getSterne()+$iSterne);
       }

       public function getSterne() {
          return $this->_getCategory()->getProperty('Kategoriebewertung', 'sterne');
       }

       private function _setBewertungen() {
          $this->_getCategory()->setProperty('Kategoriebewertung', 'bewertungen', $this->getBewertungen()+1);
       }

       public function getBewertungen() {
          return $this->_getCategory()->getProperty('Kategoriebewertung', 'bewertungen');		  
       }

       private function _setGesamtbewertung() {
          $this->_getCategory()->setProperty('Kategoriebewertung', 'gesamtbewertung', round(bcdiv($this->getSterne(), $this->getBewertungen(), 2), 0));
       }

       public function getGesamtbewertung() {
          $iGesamtbewertung = $this->_getCategory()->getProperty('Kategoriebewertung', 'gesamtbewertung');
          
          return ($iGesamtbewertung >= 1 ? $iGesamtbewertung : 0);
       }

       private function _setMaxSterne($iMaxSterne) {
          $this->_iMaxSterne = $iMaxSterne;
       }

       public function getMaxSterne() {
          return $this->_iMaxSterne;
       }

       private function _checkSperre() {
          // Bewerter dieses Artikels auslesen
          $aBewerter = $this->_getBewerter();

          return (bcadd($aBewerter[$this->_getRemoteAddr()], $this->_getSperrzeit()) < $this->_getTimestamp() ? true : false);
       }

       private function _checkSterne($iSterne) {
          return ($iSterne > 0 && $iSterne <= $this->getMaxSterne() ? true : false);
       }

       public function rate($iSterne) {
          // überprüfen ob ein zugelassener Wert übergeben wurde
          if ($this->_checkSterne($iSterne)) {
             // überprüfen ob die letzte Wertung mehr als x Sekunden her ist
             if ($this->_checkSperre()) {

                $this->_setBewerter();
                $this->_setSterne($iSterne);
                $this->_setBewertungen();
                $this->_setGesamtbewertung();

             }
          }
       }

    }
	echo $aBewerter;
?>
MfG Steffen

Kategorie bewerten - die Zweite

Verfasst: Mi 26. Jun 2013, 21:32
von derSteffen
Hallo,

jetzt noch mal das Kategorie-Bewertungsmodul, wo bei aktiver IP-Sperre ein anderes Template aufgerufen wird und somit das "nicht nochmal voten" besser verdeutlicht wird (mit einer JS-Alert-Ausgabe), außderm wird auch die Anzahl der abgegebenen Stimmen angezeigt und der aktuelle Kategoriename im Modul-Template ausgegeben.

Modul

Code: Alles auswählen

<?php
    /*************************************************************
    * CONTENIDO MODUL - OUTPUT
    *
    * @name       wtKategoriebewertung
    * @version    1.0.1
    * @author       Christian Kehres
    * @copyright    webtischlerei.de <www.webtischlerei.de>
    * @license    http://www.gnu.org/licenses/gpl-3.0.txt
    *************************************************************/

// Kategorienamen erfahren
cInclude('classes', 'class.cat.php');
$ct = new Cat();
$selcatname = $ct -> getCatName($idcat, $lang);

    // Configuration
     $iSperrzeit = 24*60*60; /* Ein Tag */
    // $iSperrzeit = 60; /* Eine Minute */
       $iMaxSterne = 5;

    // neues Objekte zur Templateverwendung initialisieren
    (!isset($oTemplate) ? $oTemplate = new Template() : $oTemplate->reset());

    // Objekt zur Kategoriebewertung initialisieren
    $oKategoriebewertung = new wtKategoriebewertung($iSperrzeit, $iMaxSterne);

    // dem Artikel eine Bewertung geben
    $oKategoriebewertung->rate(Contenido_Security::toInteger($_GET['category_rate']));

    // Sterne ausgeben
    for ($i = 1; $i <= $oKategoriebewertung->getMaxSterne(); $i++) {
       $oTemplate->set('d', 'bewertungslink',    Contenido_Url::getInstance()->build(array('idcat' => $idcat, 'lang' => $lang, 'client' => $client, 'category_rate' => $i)));
       $oTemplate->set('d', 'empty_full',       ($i <= $oKategoriebewertung->getGesamtbewertung() ? 'full' : 'empty'));
       $oTemplate->next();
    }
	
	// Anzahl der Stimmen
	$iBewertungen = $oKategoriebewertung->getBewertungen();
    $oTemplate->set('s', 'bewerteranzahl',          $iBewertungen);

	// Kategorienamen ausgeben
	$oTemplate->set('s', 'kategorie', $selcatname);

    // Anzahl der maximalen Sterneanzahl ans Template übergeben
    $oTemplate->set('s', 'maxsterne',          $iMaxSterne);

    // Bewertung des Artikels an das Template übergeben
    $oTemplate->set('s', 'gesamtbewertung',    $oKategoriebewertung->getGesamtbewertung());
	
	// Überprüfung ob IP-Sperre aktiv ist
	$ipsperreaktiv = $oKategoriebewertung->getcheckSperre();

	if ($ipsperreaktiv == "1") {
	// echo "keine Sperre";
	// Template zum Bewerten
    $oTemplate->generate('templates/bewertung.html', false, true);
	} else {
	// echo "Sperre aktiv";
	// Template - Bewertung nicht möglich
    $oTemplate->generate('templates/bewertung-empty.html', false, true);
	}

    ###############################
    ### die dazugehörige Klasse ###
    ###############################

    class wtKategoriebewertung {

       private $_oCategory       = null;
       private $_iSperrzeit    = null;
       private $_sRemoteAddr    = null;
       private $_iTimestamp    = null;
       private $_iLastRate    = null;
       private $_iMaxSterne    = null;

       public function wtKategoriebewertung($iSperrzeit, $iMaxSterne) {
          $this->_seCategory();
          $this->_setSperrzeit($iSperrzeit);
          $this->_setRemoteAddr($_SERVER['REMOTE_ADDR']);
          $this->_setTimestamp();
          $this->_setMaxSterne($iMaxSterne);
       }

       private function _seCategory() {
          global $idcat;

          $this->_oCategory = new cApiCategory($idcat);
       }

       private function _getCategory() {
          return $this->_oCategory;
       }

       private function _setSperrzeit($iSperrzeit) {
          $this->_iSperrzeit = $iSperrzeit;
       }

       private function _getSperrzeit() {
          return $this->_iSperrzeit;
       }

       private function _setRemoteAddr($sRemoteAddr) {
          $this->_sRemoteAddr = $sRemoteAddr;
       }

       private function _getRemoteAddr() {
          return $this->_sRemoteAddr;
       }

       private function _setTimestamp() {
          $this->_iTimestamp = time();
       }

       private function _getTimestamp() {
          return $this->_iTimestamp;
       }

       private function _setBewerter() {
          $aBewerter = $this->_getBewerter();

          $aBewerter[$this->_getRemoteAddr()] = $this->_getTimestamp();

          $this->_getCategory()->setProperty('Kategoriebewertung', 'bewerter', base64_encode(serialize($aBewerter)));
       }

       private function _getBewerter() {
          return unserialize(base64_decode($this->_getCategory()->getProperty('Kategoriebewertung', 'bewerter')));
       }

       private function _setSterne($iSterne) {
          $this->_getCategory()->setProperty('Kategoriebewertung', 'sterne', $this->getSterne()+$iSterne);
       }

       public function getSterne() {
          return $this->_getCategory()->getProperty('Kategoriebewertung', 'sterne');
       }

       private function _setBewertungen() {
          $this->_getCategory()->setProperty('Kategoriebewertung', 'bewertungen', $this->getBewertungen()+1);
       }

       public function getBewertungen() {
          return $this->_getCategory()->getProperty('Kategoriebewertung', 'bewertungen');		  
       }

       private function _setGesamtbewertung() {
          $this->_getCategory()->setProperty('Kategoriebewertung', 'gesamtbewertung', round(bcdiv($this->getSterne(), $this->getBewertungen(), 2), 0));
       }

       public function getGesamtbewertung() {
          $iGesamtbewertung = $this->_getCategory()->getProperty('Kategoriebewertung', 'gesamtbewertung');
          
          return ($iGesamtbewertung >= 1 ? $iGesamtbewertung : 0);
       }

       private function _setMaxSterne($iMaxSterne) {
          $this->_iMaxSterne = $iMaxSterne;
       }

       public function getMaxSterne() {
          return $this->_iMaxSterne;
       }

       private function _checkSperre() {
          // Bewerter dieses Artikels auslesen
          $aBewerter = $this->_getBewerter();

          return (bcadd($aBewerter[$this->_getRemoteAddr()], $this->_getSperrzeit()) < $this->_getTimestamp() ? true : false);
       }
	   
	   public function getcheckSperre() {
          $aBewerter = $this->_getBewerter();
          return (bcadd($aBewerter[$this->_getRemoteAddr()], $this->_getSperrzeit()) < $this->_getTimestamp() ? true : false);
       }

       private function _checkSterne($iSterne) {
          return ($iSterne > 0 && $iSterne <= $this->getMaxSterne() ? true : false);
       }

       public function rate($iSterne) {
          // überprüfen ob ein zugelassener Wert übergeben wurde
          if ($this->_checkSterne($iSterne)) {
             // überprüfen ob die letzte Wertung mehr als x Sekunden her ist
             if ($this->_checkSperre()) {

                $this->_setBewerter();
                $this->_setSterne($iSterne);
                $this->_setBewertungen();
                $this->_setGesamtbewertung();

             }
          }
       }

    }
?>
Modul-Template bewertung.html

Code: Alles auswählen

<div id="bewertung">
<h2>Bewertung "{kategorie}"</h2>
<div id="sterne">{gesamtbewertung} von {maxsterne}  von {bewerteranzahl} Stimmen.
<!-- BEGIN:BLOCK -->
   <a href="{bewertungslink}" class="stern_{empty_full}">rate</a>
<!-- END:BLOCK -->
</div>
<div style="clear: both;"></div>
</div>
Modul-Template bewertung-empty.html

Code: Alles auswählen

<div id="bewertung">
<h2>Bewertung "{kategorie}"</h2>
<div id="sterne">{gesamtbewertung} von {maxsterne} von {bewerteranzahl} Stimmen.
<!-- BEGIN:BLOCK -->
   <a class="stern_{empty_full}" onClick="alert('Sie haben bereits hier f&uuml;r gewertet. Sie k&ouml;nnen erst in 24h wieder eine Wertung abgeben.')" title="Sie haben bereits hier f&uuml;r gewertet!">rate</a>
<!-- END:BLOCK -->
</div>
<div style="clear: both;"></div>
</div>
MfG Steffen

PS: Um das Modul wieder für Artikl-Bewertungen zu verwenden einfach folgenden Code nehmen:

Code: Alles auswählen

<?php
    /*************************************************************
    * CONTENIDO MODUL - OUTPUT
    *
    * @name       wtArtikelbewertung
    * @version    1.0.1
    * @author       Christian Kehres
    * @copyright    webtischlerei.de <www.webtischlerei.de>
    * @license    http://www.gnu.org/licenses/gpl-3.0.txt
    *************************************************************/

    // Configuration
    // $iSperrzeit = 24*60*60; /* 1 Tag */
	$iSperrzeit = 60; /* 1 Minute */
    $iMaxSterne = 5;

    // neues Objekte zur Templateverwendung initialisieren
    (!isset($oTemplate) ? $oTemplate = new Template() : $oTemplate->reset());

    // Objekt zur Artikelbewertung initialisieren
    $oArtikelbewertung = new wtArtikelbewertung($iSperrzeit, $iMaxSterne);

    // dem Artikel eine Bewertung geben
    $oArtikelbewertung->rate(Contenido_Security::toInteger($_GET['article_rate']));

    // Sterne ausgeben
    for ($i = 1; $i <= $oArtikelbewertung->getMaxSterne(); $i++) {
       $oTemplate->set('d', 'bewertungslink',    Contenido_Url::getInstance()->build(array('idart' => $idart, 'lang' => $lang, 'client' => $client, 'article_rate' => $i)));
       $oTemplate->set('d', 'empty_full',       ($i <= $oArtikelbewertung->getGesamtbewertung() ? 'full' : 'empty'));
       $oTemplate->next();
    }
	
// Anzahl der Stimmen
	$iBewertungen = $oArtikelbewertung->getBewertungen();
    $oTemplate->set('s', 'bewerteranzahl',          $iBewertungen);

// Namen ausgeben
	$headlinedesartikel = "CMS_HTMLHEAD[1]";	
	$oTemplate->set('s', 'kategorie', strip_tags($headlinedesartikel));

    // Anzahl der maximalen Sterneanzahl ans Template übergeben
    $oTemplate->set('s', 'maxsterne',          $iMaxSterne);

    // Bewertung des Artikels an das Template übergeben
    $oTemplate->set('s', 'gesamtbewertung',    $oArtikelbewertung->getGesamtbewertung());
	
	// Überprüfung ob IP-Sperre aktiv ist
	$ipsperreaktiv = $oArtikelbewertung->getcheckSperre();
	// echo $sperresache;	
	if ($ipsperreaktiv == "1") {
	// echo "keine Speere";
	// Template zum Bewerten
    $oTemplate->generate('templates/bewertung.html', false, true);
	} else {
	// echo "Speere aktiv";
	// Template - Bewertung nicht möglich
    $oTemplate->generate('templates/bewertung-empty.html', false, true);
	}

    ###############################
    ### die dazugehörige Klasse ###
    ###############################

    class wtArtikelbewertung {

       private $_oArticle       = null;
       private $_iSperrzeit    = null;
       private $_sRemoteAddr    = null;
       private $_iTimestamp    = null;
       private $_iLastRate    = null;
       private $_iMaxSterne    = null;

       public function wtArtikelbewertung($iSperrzeit, $iMaxSterne) {
          $this->_seArticle();
          $this->_setSperrzeit($iSperrzeit);
          $this->_setRemoteAddr($_SERVER['REMOTE_ADDR']);
          $this->_setTimestamp();
          $this->_setMaxSterne($iMaxSterne);
       }

       private function _seArticle() {
          global $idart;

          $this->_oArticle = new cApiArticle($idart);
       }

       private function _getArticle() {
          return $this->_oArticle;
       }

       private function _setSperrzeit($iSperrzeit) {
          $this->_iSperrzeit = $iSperrzeit;
       }

       private function _getSperrzeit() {
          return $this->_iSperrzeit;
       }

       private function _setRemoteAddr($sRemoteAddr) {
          $this->_sRemoteAddr = $sRemoteAddr;
       }

       private function _getRemoteAddr() {
          return $this->_sRemoteAddr;
       }

       private function _setTimestamp() {
          $this->_iTimestamp = time();
       }

       private function _getTimestamp() {
          return $this->_iTimestamp;
       }

       private function _setBewerter() {
          $aBewerter = $this->_getBewerter();

          $aBewerter[$this->_getRemoteAddr()] = $this->_getTimestamp();

          $this->_getArticle()->setProperty('Artikelbewertung', 'bewerter', base64_encode(serialize($aBewerter)));
       }

       private function _getBewerter() {
          return unserialize(base64_decode($this->_getArticle()->getProperty('Artikelbewertung', 'bewerter')));
       }

       private function _setSterne($iSterne) {
          $this->_getArticle()->setProperty('Artikelbewertung', 'sterne', $this->getSterne()+$iSterne);
       }

       public function getSterne() {
          return $this->_getArticle()->getProperty('Artikelbewertung', 'sterne');
       }

       private function _setBewertungen() {
          $this->_getArticle()->setProperty('Artikelbewertung', 'bewertungen', $this->getBewertungen()+1);
       }

       public function getBewertungen() {
          return $this->_getArticle()->getProperty('Artikelbewertung', 'bewertungen');		  
       }

       private function _setGesamtbewertung() {
          $this->_getArticle()->setProperty('Artikelbewertung', 'gesamtbewertung', round(bcdiv($this->getSterne(), $this->getBewertungen(), 2), 0));
       }

       public function getGesamtbewertung() {
          $iGesamtbewertung = $this->_getArticle()->getProperty('Artikelbewertung', 'gesamtbewertung');
          
          return ($iGesamtbewertung >= 1 ? $iGesamtbewertung : 0);
       }

       private function _setMaxSterne($iMaxSterne) {
          $this->_iMaxSterne = $iMaxSterne;
       }

       public function getMaxSterne() {
          return $this->_iMaxSterne;
       }

       private function _checkSperre() {
          // Bewerter dieses Artikels auslesen
          $aBewerter = $this->_getBewerter();

          return (bcadd($aBewerter[$this->_getRemoteAddr()], $this->_getSperrzeit()) < $this->_getTimestamp() ? true : false);
       }
	   
	   public function getcheckSperre() {
          $aBewerter = $this->_getBewerter();
          return (bcadd($aBewerter[$this->_getRemoteAddr()], $this->_getSperrzeit()) < $this->_getTimestamp() ? true : false);
       }

       private function _checkSterne($iSterne) {
          return ($iSterne > 0 && $iSterne <= $this->getMaxSterne() ? true : false);
       }

       public function rate($iSterne) {
          // überprüfen ob ein zugelassener Wert übergeben wurde
          if ($this->_checkSterne($iSterne)) {
             // überprüfen ob die letzte Wertung mehr als x Sekunden her ist
             if ($this->_checkSperre()) {

                $this->_setBewerter();
                $this->_setSterne($iSterne);
                $this->_setBewertungen();
                $this->_setGesamtbewertung();

             }
          }
       }

    }
?>

Re: Artikel bewerten

Verfasst: Di 17. Feb 2015, 21:56
von stefkey
Hallo,

ich habe das Modul auch mal eingebaut.
Wenn ich nun auf einem Computer 3 Sterne vergebe und schaue auf einem anderen Computer (auch andere IP) stehen dort auch die 3 Sterne. Sollte es nicht so sein das jeder Besucher den Artikel bewerten kann und er nur SEINE Sterne sieht? So ist es ja verwirrend wend jemand 2 Sterne setzt und ein anderer überschreibt diese 2 Sterne mit 5 Sternen oder umgekehrt.
Ich nutze Contenido 4.8.12

Wenn das klappen würde wäre es doch ein Hammermodul, oder?

Danke und grüße,
stefkey