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;
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();
}
}
}
}
?>
- 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
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>
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;
}
Bei Kritik bitte bedenken, Version 1