Nějaký star rating do Nette 2?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Radimorous
Člen | 30
+
0
-

Chci si nechat zobrazit galerii obrázků s tím, že u každého obrázku bych chtěl star-rating třeba v rozmezí 1–5 se zapisováním hodnocení do databáze. Co jsem se díval na komponenty, tak jediný rating, co tu je, nefunguje pro Nette 2. Neřešil někdo něco podobného v poslední době? Jestli jo, tak podle kterého návodu? Za nějaký odkaz na tutorial bych byl vděčný – google sice vyhledá dost řešení, ale pokud někdo má nějaký funkční a vhodný do Nette 2, budu rád.

EDIT: Případně by stačilo i hodnocení +/-, když by nebyl star rating.

Editoval Radimorous (10. 1. 2012 17:45)

redhead
Člen | 1313
+
0
-

romiix.org napsal

Nejdřív si přečti celý post než něco napíšeš

Radimorous napsal

Odpovídal jsem ti ve vlákně s RatingControlem, jiný Rating pro Nette ale neznám.

romiix.org
Člen | 343
+
0
-

Ou, mea culpa:(

Radimorous
Člen | 30
+
0
-

No je to pech, že RatingControl pro Nette 2 nefunguje a jiná alternativa není. Třeba někdy někdo RatingControl aktualizuje, když ho bude sám potřebovat :)

iguana007
Člen | 970
+
0
-

Třeba ty, když ho potřebuješ? :)

Michal Vyšinský
Člen | 608
+
0
-

Já bych se na to klidně podíval – ale moc se nevyznám v licencích – můžu ten kód upravovat?
Tak jsem si našel že můžu :)
Tak tady je demo (na nejnovější betě)
A tady je samotný „control“: http://cherryboss.php5.cz/…gControl.zip

Použití je stejné jako původní, akorát je zde jedna změna:

$rating->setRatingModel(new RatingModel);

Změnit na:

$rating->setRatingModel(new RatingModel($this->getService("session")));

Respektive předat modelu službu session

Editoval CherryBoss (12. 1. 2012 11:50)

redhead
Člen | 1313
+
0
-

Škoda toho ajaxu. Ty dynamické snippety by se měly fakt vyřešit. :(

Editoval redhead (12. 1. 2012 13:27)

Radimorous
Člen | 30
+
0
-

iguana007: Bylo by to bohužel nad moje síly… :)

CherryBoss: Díky díky! Dnes se na Tvé řešení podívám a zkusím si ho naimplementovat.

redhead: Pokud to bude fungovat, tak je mi vcelku jedno jak :-)

Radimorous
Člen | 30
+
0
-

CherryBoss: Ještě dotaz než se pustím do změn kódu, půjde těch star ratingů mít na stránce víc? Potřeboval bych jich třeba deset, nebude to problém?

Michal Vyšinský
Člen | 608
+
0
-

Ano funguje to (přidal jsem to do dema). Můžeš mít více ratingů. Použiješ na to jedinou továrničku:

protected function createComponentRating($name) {
    $rating = new RatingControl($this, $name);
    $rating->setRatingModel(new RatingModel($this->getService("session")));
}

A v šabloně:

{control rating testRating}
{control rating testRatingTwo}

A máš dva různé rating.

Ad model: Ten si musíš udělat vlastní (resp. upravit RatingModel) – ten jsem neupravoval – nyní vrací statické hodnoty.

Editoval CherryBoss (14. 1. 2012 13:16)

Radimorous
Člen | 30
+
0
-

CherryBoss: Díky za úpravu, má to jen menší vadu, že když mám na stránce více ratingů, odhlasuji první, tak vyskočí „thank you for voting!“. Když pak odhlasuji druhý, tak to „thank you for voting!“ zmizí u prvního ratingu. Ale to je jen detail, funkčnosti to neubližuje, takže to nevadí.

Michal Vyšinský
Člen | 608
+
0
-

Upraveno: přesunul jsem poslání flash zprávičky do render metody – kdy bylo hlasováno → pošle se zprávička (thank you…). Tím pádem bude „thank you…“ vidět po celou dobu (až do vymazání cookies v prohlížeči)

Editoval CherryBoss (15. 1. 2012 11:24)

Radimorous
Člen | 30
+
0
-

CherryBoss: Teď to funguje výborně, díky za úpravy! Takže už „jen“ musím zprovoznit připojení do databáze, aby mi nefungovalo jen v app\Models\Model.php, ale i v app\controls\RatingModel.php

Sice offtopic dotaz, ale nechci zakládat zbytečně nový vlákno. V app\Models\Model.php pracuji s databazí jednoduše takto:

<?php
class Model extends \Nette\Object
{
  public $database;

  public function __construct(Nette\Database\Connection $database)
  {
    $this->database = $database;
  }

  public function getOdkazy()
  {
    return $this->database->query('select .........');
  }
?>

Jak co nejjednodušeji zprovozním databázový připojení i do app\controls\RatingModel.php abych mohl zase jedním řádkem kódu přes sql dotaz přistoupit k datům?

Editoval Radimorous (15. 1. 2012 22:44)

Michal Vyšinský
Člen | 608
+
0
-

Modelu přidej privátní proměnnou $database;

Kontruktor modelu uprav takto:

public function __construct($session_service, Nette\Database\Connection $database) {
	$this->session = $session_service;
	$this->database = $database;
}

A pak změň v továrničce toto:

$rating->setRatingModel(new RatingModel($this->getService("session")));

na toto:

$rating->setRatingModel(new RatingModel($this->getService("session"), $this->getService("database")));
masterr
Začátečník | 141
+
0
-

můžete sem pls dát aktuální odkazy ke stažení?