Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Zdravím vývojáře v PHP, v minisoutěži na tento týden o placku "Machr na PHP" a samolepky budeme programovat jednoduchý měsíční kalendář. Navrhněte komponentu, které zadáte datum a ona vykreslí měsíční kalendář (to samé, jako když kliknete ve Windows myší na hodiny :) ). Kalendář stačí opravdu jen vykreslit (vypsat HTML tabulku), nemusí být nijak aktivní. Komponenta by měla být objektová a jednoduchá k použití. Zadání není složité a dá se to napsat v podstatě za chvíli, určitě si procvičíte práci s datem a časem a objektový návrh. Pokud budete rychle hotoví, můžete se zamyslet i nad tím, jak v kalendáři zobrazovat nějaké události. Váš projekt se jistě bude hodit i ostatním, mohu poté přispět i se svým řešením.

Deadline jako obvykle v neděli 17.11. v 18:00.
Podrobnější pravidla soutěží: http://www.itnetwork.cz/…outezi-machr

Editováno 12.11.2013 11:19
Odpovědět  +2 12.11.2013 11:02
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Ještě ilustrační obrázek, jak může výsledek vypadat.

Nahoru Odpovědět 12.11.2013 11:32
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Filip Pýrek
Redaktor
Avatar
Odpovídá na David Čápka
Filip Pýrek:

:D Říkal jsem si "Jó, to bude v klidu". Sotva jsem na tom začal dělat: :o .
:D :D ;)

Nahoru Odpovědět 12.11.2013 19:44
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Fredep
Redaktor
Avatar
Odpovídá na Filip Pýrek
Fredep:

Já už stihl na chlup okopírovat ten sdracův vzhled :D :D

Nahoru Odpovědět  +1 12.11.2013 19:49
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
Milan Gallas
Redaktor
Avatar
Odpovídá na David Čápka
Milan Gallas:

a když bude komponenta aktivní a bude pracovat s databází, přidá mi to body?
Nebo je naprosto zbytečné se tímto zabývat a nijak mi to nepřidá?

 
Nahoru Odpovědět 12.11.2013 21:02
Avatar
Filip Pýrek
Redaktor
Avatar
Nahoru Odpovědět 12.11.2013 21:09
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Odpovídá na Filip Pýrek
Ondřej Štorc:

Nevím jak tobě ale mně u tebe funguje jenom přepnutí měsíců

Nahoru Odpovědět 12.11.2013 21:13
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Filip Pýrek
Zdeněk Pavlátka:

Nemáš ošetřené chybné zadání datumu.

Nahoru Odpovědět 12.11.2013 21:16
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Filip Pýrek
Redaktor
Avatar
Nahoru Odpovědět 12.11.2013 21:17
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Filip Pýrek
Redaktor
Avatar
Odpovídá na Ondřej Štorc
Filip Pýrek:

Vlastně ten den je úplně nepodstatný , takže jsem ho odstranil :D

Nahoru Odpovědět 12.11.2013 21:22
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Milan Gallas
David Čápka:

Hlavní je jak to navrhneš a jak to bude fungovat. Když se třída kalendáře bude jmenovat Zobrazit, tak ti ani databáze nepomůže. Vždy je lepší vzít si menší sousto a to dobře zpracovat. Dobrým kompromisem je neřešit databázi, ale vyřešit zobrazování dat třeba jen z pole.

Nahoru Odpovědět 13.11.2013 11:12
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Poláček (johny881):

Přidávám zatím svou ukázku http://os-cedr.cz/kalendar/
Přemýšlím ještě nad nějakými vychytávkami, uvidím, co se z toho vyklube

Nahoru Odpovědět 14.11.2013 2:12
Instrukce na adrese 0x77104f29 odkazovala na adresu paměti 0x00000014. S pamětí nelze provést operaci: written.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Jan Poláček (johny881)
Zdeněk Pavlátka:

Nezobrazuje se šipka zpět. Když na její místo kliknu, funguje to, jako by tam byla.

Nahoru Odpovědět 14.11.2013 6:36
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Jan Poláček (johny881):

Tak to je zajímavé, zkoušel jsem to v Chrome, FF i IE a všude mi to zobrazuje správně ◄ i ►, schválně jsem použil jen ASCII znaky, abych nemusel používat obrázky

Nahoru Odpovědět 14.11.2013 6:40
Instrukce na adrese 0x77104f29 odkazovala na adresu paměti 0x00000014. S pamětí nelze provést operaci: written.
Avatar
Ori
Člen
Avatar
Ori:

http://devbook.sixfeetunder.cz/calendar/

prikladám môj výtvor, zdrojové kódy sem zverejním až v nedeľu

 
Nahoru Odpovědět  +1 14.11.2013 13:26
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Jan Poláček (johny881)
Zdeněk Pavlátka:

Já to zkoušel na androidech, na počítači se ukazuje.

Nahoru Odpovědět 14.11.2013 16:01
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Filip Pýrek
Redaktor
Avatar
Nahoru Odpovědět 16.11.2013 11:06
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Nahoru Odpovědět  +2 16.11.2013 11:44
2x piš, jednou debuguj
Avatar
Filip Pýrek
Redaktor
Avatar
Odpovídá na Josef Kuchař (Pepa489)
Filip Pýrek:

Cože? mě se tam zobrazuje listopad

Editováno 16.11.2013 12:25
Nahoru Odpovědět 16.11.2013 12:23
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Filip Pýrek
Redaktor
Avatar
Nahoru Odpovědět 16.11.2013 12:27
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
David Hynek
Redaktor
Avatar
Nahoru Odpovědět 16.11.2013 12:42
Čím víc vím, tím víc věcí nevím.
Avatar
Jan Poláček (johny881):

Takže dnes verze 0.52.3 beta -> http://os-cedr.cz/kalendar/

Nahoru Odpovědět 16.11.2013 13:30
Instrukce na adrese 0x77104f29 odkazovala na adresu paměti 0x00000014. S pamětí nelze provést operaci: written.
Avatar
Ori
Člen
Avatar
Ori:

tak trieda je nahrana tu: http://leteckaposta.cz/717925331

pouzitie: (samozrejme nic z nastaveni nieje povinne a maju defaultnu hodnotu)

require_once './calendar.class.php';

$config = array(
    'base_url'              => '',
    'show_navigation_links' => TRUE,
    'start_day'             => 'monday',
    'month_tag'             => 'month',
    'year_tag'              => 'year',
    'prev_link'             => '««',
    'next_link'             => '»»',
    'calendar_class'        => 'calendar',
    'event_class'           => 'event',
    'cur_day_class'         => 'current_day',
    'day_text'              => array('Ne','Po','Ut','St','Št','Pi','So'),
    'month_text'            => array(
                                '01' => 'Január',
                                '02' => 'Február',
                                '03' => 'Marec',
                                '04' => 'Apríl',
                                '05' => 'Máj',
                                '06' => 'Jún',
                                '07' => 'Júl',
                                '08' => 'August',
                                '09' => 'September',
                                '10' => 'Október',
                                '11' => 'November',
                                '12' => 'December'
                               )

);


$calendar = new Calendar($config);

$data = array(
    7 => array(
        'title' => 'Zubar',
        'url'   => $calendar->base_url()
    ),
    13 => array(
        'title' => 'Zapocet z matiky',
        'url'   => $calendar->base_url()
    ),
);
$month = (isset($_GET['month'])) ? $_GET['month'] : date("m", time()) ;
$year  = (isset($_GET['year'])) ? $_GET['year'] : date("Y", time()) ;

echo $calendar->generate($month, $year, $data);
Editováno 17.11.2013 17:17
 
Nahoru Odpovědět 17.11.2013 17:13
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:
  1. Milan Gallas (90 bodů) - Chválím pokus o MVC architekturu. Ověřování GETu, které máš v index.php, by měly správně dělat kontrolery, právě ty mají na starost zpracování parametrů od uživatele. Návrh má nějaké mouchy v pojmenování, např. metoda vypisUdalosti události nevypisuje, ale vrací, mělo by to tedy být vratUdalosti. Při výpisu kalendáře se dny s událostmi nezobrazují jinou barvou, takže není vidět kde nějaké jsou. Vzal sis docela velké sousto, k ukládání dat používáš databázi, ale popral jsi se s tím, placka je tvoje :)
  2. Michal Martinek (90 bodů) - Po spuštění se vyrojí Notice: Undefined index: mesic in Kalendar\MM8\Ka­lendar.php on line 12, platí to samé jako pro johny881. Jsi první, koho napadlo použít select na měsíc a také zobrazit dny z minulého a nadcházejícího měsíce! :) Z kódu poznávám své tutoriály, jsem rád, že jsou užitečné. Jinak to funguje docela hezky, kód generování je přehledný, škoda, že jsi nezkusil události. Na placku to stejně je, gratuluji :)
  3. Ori (80 bodů) - Chválím širokou nastavitelnost a události. Nikdy ale neprogramuj vlastní funkce na triviální věci, které jsou součástí jazyka. Mám na mysli hlavně get_days, kterou můžeš nahradit php funkcí cal_days_in_month.
  4. FilipPyrek (80 bodů) - Ten index jsi tedy dost nakombil, ale OK, je to machr na PHP :) Chválím nastavitelnost celé komponenty. Metoda vykresli je dost hustá s těmi cykly, myslím, že kdybys v tom měl za pár měsíců něco opravit, už by se ti to asi nepodařilo. Koukal jsem na svou implementaci a mám tam 4 cykly (umí to i eventy), ty jich máš 8.
  5. mayo505 (80 bodů) - Soubor s měsíce by se určitě neměl jmenovat trida :) Řešení je minimalistické a docela se mi líbí, škoda, že jsi nezkusil implementovat události.
  6. deiv19 (70 bodů) - Funkčně to není špatné, ale návrh je dost divný. Místo v těch globálních funkcích bys měl mít validaci dat ve třídě Calendar, místo die() by to mělo vyhodit výjimku :) Místo setVars by měl být konstruktor, právě ten je zodpovědný za nastavení proměnných. Create by se měla jemnovat render(), protože vypisuje. Programovat umíš, ale ta úprava a návrh by chtěly zlepšit, koukni na zdejší objektový seriál v PHP.
  7. johny881 (70 bodů) - Řešní mi hned po spuštění vypsalo: "Notice: Undefined variable: je in Kalendar\johny881\ka­lendar.php on line 60". Zřejmě jsi aplikaci ladil někde na freehostingu, kde jsou vypnuté chyby, což je samozřejmě špatně, ladit se má na localu. Soubory určitě nejsou dobrou volbou pro ukládání událostí, protože musíš např. řešit souběžný zápis, využij databázi. Pokud je někde v kódu blok:
return TRUE;
else
return FALSE;

je zbytečný. Můžeš vrátit přímo logickou hodnotu výrazu, který je v podmínce. Stejně je v podmínkách zbytečné ==TRUE. Chválím nápad se svátky. Metody vratMinuly a vratPristi jsou IMHO zbytečné, kdybys používal třídu DateTime, tak ta se dá jednoduše posouvat a datum formátovat. Metoda pro výpis kalendáře je docela kompaktní, to je dobře.

Dnes jsem hodnotil asi historicky nejdéle, tak snad vám ty komentáře k něčemu budou. Vítěze prosím aby publikovali svá díla a poslali x adresu. Na ostatní se těším příští týden :)

Editováno 17.11.2013 20:21
Nahoru Odpovědět  +2 17.11.2013 20:17
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Ori
Člen
Avatar
Ori:

dík za info, v php robim dlho ale o tej funkcii som nevedel :D, asi zacnem googlit ci uz dana funkcia neexistuje predtym ako ju naprogramujem :D

 
Nahoru Odpovědět 18.11.2013 6:28
Avatar
Filip Pýrek
Redaktor
Avatar
Filip Pýrek:

Kdyby se někdo chtěl mrknout - http://leteckaposta.cz/552470706 :)

Nahoru Odpovědět 18.11.2013 14:28
„The best way to predict the future is to invent it.“ — Alan Kay
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 27 zpráv z 27.