MODx starrating
2 September 2011 - door: Joren van BeekOnlangs hebben we gebruik gemaakt van de CSS Star Rating 2.0.0-rc1 MODx revo extra / plugin voor de beoordeling van artikelen. Het gaat dus om deze extra: http://modx.com/extras/package/starrating
De plugin werkt goed en heeft al een aantal opties, alleen zodra je de snippet ergens aanroept kan een bezoeker altijd stemmen. Wij wilden graag het stemmen beperken en alleen toe staan op de artikel pagina zelf en niet in een blog 'overview' (wat we opbouwen met getResources). Om dit te bereiken hebben we de bestaande function allowVote aangepast en een extra property voor de snippet call aangemaakt.
Als de plugin geïnstalleerd is via de MODx manager moet de volgende file worden gewijzigd: core/component/star_rating/model/star_rating/starrating.class.php
Voeg op regel 29 toe aan function initialize:
‘canVote’ => ‘canVote’,Resultaat ziet er uit als dit :
public function initialize() {
$this->config = array(
'useSession' => false,
'sessionName' => 'starrating',
'useCookie' => false,
'cookieName' => 'starrating',
'cookieExpiry' => 608400,
'theme' => 'default',
'maxStars' => 5,
'imgWidth' => 20,
'cssFile' => 'star',
'urlPrefix' => '',
'starTpl' => 'starTpl',
'canVote' => 'canVote',
);
}
In hetzelfde bestand voegen we code toe op regel 165 om de function allowVote uit te breiden met de snippet call property / optie.
Dit zijn de regels die we aan de function toevoegen:
/* check if people can vote or not, set in snippet call variable */
if ($this->config['canVote'] == false) {
return false;
}
return true;
}
De complete function ziet er dan als volgt uit:
/**
* Check that the vote is allowed (cookie, session, user permissions)
*
* @return boolean
*/
public function allowVote() {
$uniqueId = ($this->get('group_id') != '' ? $this->get('group_id').'-' : '') . $this->get('star_id');
/* session */
if ($this->config['useSession'] == true
&& array_key_exists($this->config['sessionName'],$_SESSION)) {
$sessionArray = $_SESSION[$this->config['sessionName']];
if (!empty($sessionArray) && in_array($uniqueId, $sessionArray)) {
return false;
}
}
/* cookie */
if ($this->config['useCookie'] == true) {
if (isset ($_COOKIE[$this->config['cookieName'] . $uniqueId])) {
return false;
}
}
/* check if people can vote or not, set in snippet call variable */
if ($this->config['canVote'] == false) {
return false;
}
return true;
}
Nu zijn we klaar met de wijzigingen in de class php file. Nu moeten we alleen nog de default property bepalen voor onze nieuwe snippet call property / option. Hiervoor bewerken we de starRating snippet te vinden in de Elements.
Zoek de volgende regels:
$starId = isset($starId) ? $starId : null; $groupId = isset($groupId) ? $groupId : '';
Voeg deze regel toe
$canVote = !empty($canVote) ? $canVote : '1';
Het totaal geeft als resultaat:
$starId = isset($starId) ? $starId : null; $groupId = isset($groupId) ? $groupId : ''; $canVote = !empty($canVote) ? $canVote : '1';
Sla de wijzigingen op, door de snippet te saven.
Nu zijn we klaar en kan je tijdens de snippet call property / option canVote="0" gebruiken om stemmen niet toe te staan. Default staat ingesteld op 1, dus TRUE dus stemmen toegestaan. Dit kan je uiteraard omdraaien door de default waarde op 0 te zetten. De snippet call kan er nu als volgt uit zien:
starRating? &starId=`66` &canVote=`0`

Reacties (0)