Nová kalendářová komponenta
- darkweaver
- Člen | 18
Zdravím,
co jsem se díval, tak je tu v addonech pouze jedna komponenta, která je poměrně stará a na fóru jsem toho také moc nenašel, tak jsem se rozhodl, že dám dohromady další kalendář :-).
Rád bych znal Váš názor na komponentu, hlavně tedy na kód a zda-li si myslíte, že je to použitelné v nějakém reálném projektu?
Zde je odkaz na Github, kde v readme naleznete odkaz na wiki, kde jsem k tomu sepsal pár věcí.
Snažil jsem se to udělat poměrně univerzálně. V základu s úpravou bloků v šabloně se dá dělat poměrně dost věcí a dokonce se na to dá celkem dobře naroubovat práce s databází, takže nad tim postavit nějaký kalendář s podporou Eventů apod. by neměl být problém.
- darkweaver
- Člen | 18
Ahoj, lepší by možná bylo použít rovnou nějaký javascriptový datepicker, co jsem tak pochopil z tvého popisu. Pokud máš na mysli něco jiného, zkus lépe popsat, jak by sis zhruba představoval, jak by to mělo fungovat.
- Karlito
- Člen | 18
Přesněji řečeno mám formulář kde vkládám datumy OD kdy a DO kdy, ale
místo abych to vypisoval ručně, tak by se mi hodilo, aby při kliknutí do
inputu se zobrazil kalendář, kde bych vybral datum a ten se mi vložil do
daného inputu.
S nette začínám.
Pokud nepůjde tento kalendář a měl bych se zaměřit na nějaký jiný, mohl
by jsi nějaký doporučit?
Děkuji
- darkweaver
- Člen | 18
Na tohle by se ti spíš hodil javascriptový datepicker. Pokud už na webu používáš jquery, tak koukni na tohle https://jqueryui.com/datepicker/#… .
- darkweaver
- Člen | 18
drick napsal(a):
Vyzera to dobre. Da sa aj niekde stiahnut ten example?
Ahoj, demo můžeš stáhnout tady. others.alestichava.cz/calendardemo.zip
Jen si composerem nainstaluješ závislosti a mělo by to běžet. Upravená komponenta je v app/lib. Ty eventy tam mám řešený dost na hulváta přes pole jenom pro funkční demo, tak se toho nezhroz.
Editoval darkweaver (19. 3. 2016 9:15)
- drick
- Člen | 61
Prepac, ale mam s tym este problem, mozno mi budes vediet poradit. Skusam si rozbehat to demo vo svojom projekte, ale nedari sa mi.
Dostavam Error:
Nette\MemberAccessException
Call to undefined method blitzik\Calendar\Entities\Day::hasEvents().
v subore eventsBlockTemplate.latte – tam je problem na riadku 66, kde premenna $day nepozna metodu hasEvents. $day pritom obsauje cisla daneho mesiaca. Class Day neobsahuje takuto metodu, takze kde sa ma nachadzat?
Nevies mi povedat, kde mam chybu? Dik :)
- darkweaver
- Člen | 18
drick napsal(a):
v subore eventsBlockTemplate.latte – tam je problem na riadku 66, kde premenna $day nepozna metodu hasEvents. $day pritom obsauje cisla daneho mesiaca. Class Day neobsahuje takuto metodu, takze kde sa ma nachadzat?
Ahoj, mohl by jsi někam nahrát, jak to máš teďka řešený? Ta proměnná $day má obsahovat instanci třídy, která dědí z \blitzik\Calendar\Entities\Day a ta už obsahuje metodu hasEvents().
- drick
- Člen | 61
darkweaver napsal(a):
drick napsal(a):
v subore eventsBlockTemplate.latte – tam je problem na riadku 66, kde premenna $day nepozna metodu hasEvents. $day pritom obsauje cisla daneho mesiaca. Class Day neobsahuje takuto metodu, takze kde sa ma nachadzat?
Ahoj, mohl by jsi někam nahrát, jak to máš teďka řešený? Ta proměnná $day má obsahovat instanci třídy, která dědí z \blitzik\Calendar\Entities\Day a ta už obsahuje metodu hasEvents().
No teraz to mam riesene rovnako ako ty, ibaze ja to nemam
v HomepagePresentery, ale v CalendarPresentery. Ziadna ina zmena.
Uz vidim, kde sa nachadza metoda hasEvents(). Priznam sa, ze mam trosku problem
to pochopit. V eventsBlocksTemplate.latte sa nachadza tento riadok {var
$day = $cell->getDay()} . Metoda getDay() vrati int. Ako si teda
nasledne z tohto mozem pytat $day->hasEvents()? Nemala by metoda getDay()
v namespace blitzik\Calendar\Entities vracat objekt? Toto mi pripada ako moj
problem.
Momentalne to nemam tento projekt nikde uploadnuty. Ak by si mi ale nevedel poradit a bol ochotny sa hrabat v kode, tak ho niekam hodim. Ale nechcem Ta tym privelmi otravovat.
- darkweaver
- Člen | 18
drick napsal(a):
V eventsBlocksTemplate.latte sa nachadza tento riadok {var $day = $cell->getDay()} . Metoda getDay() vrati int. Ako si teda nasledne z tohto mozem pytat $day->hasEvents()? Nemala by metoda getDay() v namespace blitzik\Calendar\Entities vracat objekt?
Ta metoda by skutečně měla vracet objekt dne. Pokud vycházíš přímo z toho dema, tak to má vracet konkrétně CalendarDemo\Day a ne integer.
Zkusil sem si stáhnout to demo co jsem uploadnul a funguje to jak má. Zkus někam nahrát ten kód co máš a pošli mi to třeba na email [ales.tichava@gmail.com], ať to tu nespammujeme.
Editoval darkweaver (14. 3. 2016 12:57)
- Neo-Mike
- Člen | 22
Ahoj, snažím se implementovat kalendář do projektu. Zatím chci zobrazit
jen čistý kalendář. Narážím na problém, že laděnka mi hlásí
chybu:
syntax error, unexpected ‚.‘, expecting ‚,‘ or ‚;‘
v souboru Calendar.php
problém je na řádku – private $calendarBlocksTemplate = __DIR__ .
‚/calendarBlocks.latte‘;
Editoval Neo-Mike (15. 3. 2016 14:49)
- David Matějka
- Moderator | 6445
@Neo-Mike : Tahle syntaxe je podporovana az od php 5.6, takze autor by to mel opravit, nebo zvysit pozadavky. Ale i tak ti doporucuju aktualizovat na php 5.6
- darkweaver
- Člen | 18
@Neo-Mike : Ahoj, omlouvám se za nepříjemnosti. Projel jsem to a problém byl pouze v téhle jedné věci. Nainstaloval jsem si i wamp s php5.4 a funguje.
- drick
- Člen | 61
Snazim sa si tento kalendar napojit na databazu. Naraz vsak na problem, ze pri zmene mesiaca sa mi nezobrazia udalosti pre dany mesiac. Teda funguje to iba pre aktualny mesiac. Teda neviem nikde najst, ktore akcie sa vykonaju pri ajaxovom zmene mesiaca (sipka dolava alebo doprava).
Toto je moj upraveny kod v classe SimpleEventCalendarGenerator, metoda findEvents($year, $month)
// current date
$y = date('Y');
$m = date('n');
$allItems = $this->database->table('events')->fetchAll();
foreach ($allItems as $item) {
if (date("Y", strtotime($item['date_time'])) == $y and date("m", strtotime($item['date_time'])) == $m) {
$results[] = $item;
}
}
$finalResult = array();
if ($year == $y and $month == $m) {
foreach ($results as $result) {
$finalResult[] = new Event(new \DateTime(
date("Y", strtotime($result['date_time'])) . "-" .
date("m", strtotime($result['date_time'])) . "-" .
date("d", strtotime($result['date_time'])) . " " .
date("H", strtotime($result['date_time'])) . ":" .
date("i", strtotime($result['date_time']))
),
$result['title']
);
}
} elseif ($year == $y and ( $month == ($m + 1))) {
$this->findEvents($year, $month + 1);
} elseif ($year == $y and ( $month == ($m - 1))) {
$this->findEvents($year, $month - 1);
}
return $finalResult;
return [];
Teda do tych vetiev elseif sa mi aplikacia nikdy nedostane – ten pri ajaxovom zmene mesiaca sa tato metoda uz nezavola. Viete mi poradit ako to fixnut?
- darkweaver
- Člen | 18
drick napsal(a):
Snazim sa si tento kalendar napojit na databazu. Naraz vsak na problem, ze pri zmene mesiaca sa mi nezobrazia udalosti pre dany mesiac. Teda funguje to iba pre aktualny mesiac. Teda neviem nikde najst, ktore akcie sa vykonaju pri ajaxovom zmene mesiaca (sipka dolava alebo doprava)…
Ahoj, koukám, že vycházíš z dema. V té ukázkové aplikaci jsou ty eventy řešený natvrdo a tak, aby se zobrazovali pro předchozí měsíc, aktuální měsíc a následující měsíc, abych to nemusel pokaždé měnit pro nové měsíce a používat na to databázi, takže si to budeš muset upravit dle sebe, tu implementaci z dema nepoužívej.
V podstatě by ti mělo stačit si vytáhnout z databáze eventy. Nějaký dotaz tam máš, ale taháš všechny, což je zbytečný. Ve třídě SimpleEventCalendarGenerator je přetížená metoda getCalendarData(), které se předávají parametry $year a $month, takže je použij v dotazu do databáze na eventy. No a pak už ti stačí jen ty eventy projet a přiřadit správnému dnu.