<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Piotr Olaszewski</title>
	<atom:link href="http://piotrooo.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://piotrooo.com</link>
	<description></description>
	<lastBuildDate>Fri, 27 Aug 2010 11:43:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Timing zapytań PostgreSQL</title>
		<link>http://piotrooo.com/2010/08/timing-zapytan-postgresql/</link>
		<comments>http://piotrooo.com/2010/08/timing-zapytan-postgresql/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 11:43:44 +0000</pubDate>
		<dc:creator>piotrooo89</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[postgre]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[timing]]></category>
		<category><![CDATA[timing postgresql]]></category>
		<category><![CDATA[timing sql]]></category>

		<guid isPermaLink="false">http://piotrooo.com/?p=251</guid>
		<description><![CDATA[Dziś krótki tutorial jak włączyć (na stałe) timing (czas wykonywania) zapytań w konsoli Postgre. Do włączenia tej funkcjonalności służy polecenie \timing. Jednak nie jest ono zbyt wydajnym rozwiązaniem. Dlaczego? Ponieważ za każdym razem po wyłączeniu i ponownym włączeniu konsoli trzeba wykonywać to polecenie. Rozwiązanie jest banalnie proste. Wystarczy stworzyć odpowiedni plik konfiguracyjny psqlrc w katalogu [...]]]></description>
			<content:encoded><![CDATA[<p>Dziś krótki tutorial jak włączyć (na stałe) timing (czas wykonywania) zapytań w konsoli Postgre. Do włączenia tej funkcjonalności służy polecenie <em>\timing</em>. Jednak nie jest ono zbyt wydajnym rozwiązaniem. Dlaczego? Ponieważ za każdym razem po wyłączeniu i ponownym włączeniu konsoli trzeba wykonywać to polecenie. Rozwiązanie jest banalnie proste. Wystarczy stworzyć odpowiedni plik konfiguracyjny <em>psqlrc</em> w katalogu domowym użytkownika i dodać do niego odpowiedni wpis, który zostanie wywołany po uruchomieniu konsoli PostgreSQL. Dość teorii, jako że najlepiej uczy się na przykładach zobaczmy jak to wygląda.</p>
<p>Tworzymy plik <em>.psqlrc</em>:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="Bash"><div class="devcodeoverflow">piotroo:~<span style="color: #666666; font-style: italic;"># touch $HOME/.psqlrc</div></pre><!--END_DEVFMTCODE--></p>
<p>Teraz wystarczy otworzyć nasz plik dowolnym edytorem i dodajemy do niego odpowiedni wpis, w naszym wypadku <em>\timing</em>.</p>
<p>To tyle.</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrooo.com/2010/08/timing-zapytan-postgresql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struktury drzewiaste</title>
		<link>http://piotrooo.com/2010/08/struktury-drzewiaste/</link>
		<comments>http://piotrooo.com/2010/08/struktury-drzewiaste/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 18:09:58 +0000</pubDate>
		<dc:creator>piotrooo89</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[deep]]></category>
		<category><![CDATA[drzewa]]></category>
		<category><![CDATA[drzewa sql]]></category>
		<category><![CDATA[plpgsql]]></category>
		<category><![CDATA[postrgres]]></category>
		<category><![CDATA[tree]]></category>
		<category><![CDATA[tree sql]]></category>

		<guid isPermaLink="false">http://piotrooo.com/?p=239</guid>
		<description><![CDATA[Ostatnio spotkałem się z problemem generowania struktur zagnieżdżonych. W internecie znalazłem tyle rozwiązań co programistów, jednak szczególnie do gustu przypadło mi jedno i postanowiłem je zaimplementować. Zobaczcie co z tego wyszło. 1. Struktura tabeli Myślę, że podstawową rzeczą jest przedstawienie tabeli w której będziemy trzymać nasze dane: CREATE TABLE dzialy &#40;id_dzial serial PRIMARY KEY, nazwa [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio spotkałem się z problemem generowania struktur zagnieżdżonych. W internecie znalazłem tyle rozwiązań co programistów, jednak szczególnie do gustu przypadło mi jedno i postanowiłem je zaimplementować. Zobaczcie co z tego wyszło.<br />
<span id="more-239"></span></p>
<p>1. Struktura tabeli</p>
<p>Myślę, że podstawową rzeczą jest przedstawienie tabeli w której będziemy trzymać nasze dane:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="SQL"><div class="devcodeoverflow"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> dzialy <span style="color: #66cc66;">&#40;</span>id_dzial serial <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">,</span> nazwa text<span style="color: #66cc66;">,</span> id_parent integer <span style="color: #993333; font-weight: bold;">REFERENCES</span> dzialy<span style="color: #66cc66;">&#41;</span>;</div></pre><!--END_DEVFMTCODE--></p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="SQL"><div class="devcodeoverflow">piotro<span style="color: #66cc66;">=</span><span style="color: #808080; font-style: italic;"># \d dzialy</span>
                              <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #ff0000;">&quot;public.dzialy&quot;</span>
  <span style="color: #993333; font-weight: bold;">COLUMN</span>   <span style="color: #66cc66;">|</span>  Type   <span style="color: #66cc66;">|</span>                         Modifiers                         
<span style="color: #808080; font-style: italic;">-----------+---------+-----------------------------------------------------------</span>
 id_dzial  <span style="color: #66cc66;">|</span> integer <span style="color: #66cc66;">|</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NEXTVAL</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'dzialy_id_dzial_seq'</span>::regclass<span style="color: #66cc66;">&#41;</span>
 nazwa     <span style="color: #66cc66;">|</span> text    <span style="color: #66cc66;">|</span> 
 id_parent <span style="color: #66cc66;">|</span> integer <span style="color: #66cc66;">|</span> 
Indexes:
    <span style="color: #ff0000;">&quot;dzialy_pkey&quot;</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">,</span> btree <span style="color: #66cc66;">&#40;</span>id_dzial<span style="color: #66cc66;">&#41;</span>
Foreign<span style="color: #66cc66;">-</span><span style="color: #993333; font-weight: bold;">KEY</span> constraints:
    <span style="color: #ff0000;">&quot;dzialy_id_parent_fkey&quot;</span> <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>id_parent<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> dzialy<span style="color: #66cc66;">&#40;</span>id_dzial<span style="color: #66cc66;">&#41;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>Może kilka słów wyjaśnienia. Tworzymy tabelę w której będziemy gromadzić nazwy naszych działów, jak wiadomo każdy dział może mieć kilka poddziałów, a z kolei te poddziały swoje poddziały, więc widzimy jednoznacznie że musimy w jakiś sposób rozróżnić gdzie dokładnie się znajdujemy, lub &#8222;narysować&#8221; użytkownikowi ścieżkę w jakiej się znajduje. Ważnym elementem konstrukcji naszej tabeli jest <em>KLUCZ OBCY</em> (FOREIGN KEY), który ma za zadanie stworzenie relacji między działem a jego rodzicem. Dlaczego? Wyobraźmy sobie sytuacje, w której mając do danego rodzica przypisane dzieci, usuwamy rodzica i nasze dzieci stają sie osierocone, zupełnie niepożądana akcja, trzeba się w jakiś sposób zabezpieczyć i właśnie do tego jest potrzebny klucz obcy, który będzie niejako wymuszał więzy integralności. Klucz obcy zabezpieczy nas również przed dodawaniem dziecka do nieistniejącego działu.</p>
<p>Tak będą wyglądały nasze dane na których będziemy pracować.<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="SQL"><div class="devcodeoverflow">piotro<span style="color: #66cc66;">=</span><span style="color: #808080; font-style: italic;"># SELECT * from dzialy;</span>
 id_dzial <span style="color: #66cc66;">|</span>    nazwa    <span style="color: #66cc66;">|</span> id_parent 
<span style="color: #808080; font-style: italic;">----------+-------------+-----------</span>
        1 <span style="color: #66cc66;">|</span> dzial_1     <span style="color: #66cc66;">|</span>          
        2 <span style="color: #66cc66;">|</span> dzial_1_1   <span style="color: #66cc66;">|</span>         1
        3 <span style="color: #66cc66;">|</span> dzial_1_2   <span style="color: #66cc66;">|</span>         1
        4 <span style="color: #66cc66;">|</span> dzial_1_3   <span style="color: #66cc66;">|</span>         1
        5 <span style="color: #66cc66;">|</span> dzial_1_3_1 <span style="color: #66cc66;">|</span>         4
        6 <span style="color: #66cc66;">|</span> dzial_2     <span style="color: #66cc66;">|</span>          
        7 <span style="color: #66cc66;">|</span> dzial_2_1   <span style="color: #66cc66;">|</span>         6
        8 <span style="color: #66cc66;">|</span> dzial_2_2   <span style="color: #66cc66;">|</span>         6
        9 <span style="color: #66cc66;">|</span> dzial_2_2_1 <span style="color: #66cc66;">|</span>         8
       10 <span style="color: #66cc66;">|</span> dzial_2_3   <span style="color: #66cc66;">|</span>         6
       11 <span style="color: #66cc66;">|</span> dzial_3     <span style="color: #66cc66;">|</span>          
<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">11</span> rows<span style="color: #66cc66;">&#41;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>2. Funkcja drukująca ścieżkę</p>
<p>Skoro mamy już zdefiniowane dane trzeba się po nich w jakiś sposób poruszać. Pierwszą rzeczą, którą będziemy chcieli zobaczyć to ścieżka w jakiej się znajdujemy. Odpowiedzialna za tą funkcjonalność będzie funkcja <em>path_dzialy</em>, której argumentem będzie <em>id_dzial</em> i na podstawie tego ID będziemy drukować stopień zagłębienia.</p>
<p>Nasza funkcja wygląda następująco:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="SQL"><div class="devcodeoverflow"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">OR</span> <span style="color: #993333; font-weight: bold;">REPLACE</span> <span style="color: #993333; font-weight: bold;">FUNCTION</span> path_dzialy <span style="color: #66cc66;">&#40;</span>integer<span style="color: #66cc66;">&#41;</span> RETURNS text <span style="color: #993333; font-weight: bold;">AS</span>
$BODY$
    DECLARE
        u_id_dzial alias <span style="color: #993333; font-weight: bold;">FOR</span> $<span style="color: #cc66cc;">1</span>;
&nbsp;
        path_dzial text;
        v_deep integer;
        v_id_dzial integer;
        v_id_parent integer;
        v_nazwa text;
    BEGIN
        v_id_dzial <span style="color: #66cc66;">=</span> u_id_dzial;
        path_dzial :<span style="color: #66cc66;">=</span> <span style="color: #ff0000;">''</span>;
        LOOP
            <span style="color: #993333; font-weight: bold;">SELECT</span> id_parent<span style="color: #66cc66;">,</span> nazwa <span style="color: #993333; font-weight: bold;">INTO</span> v_id_parent<span style="color: #66cc66;">,</span> v_nazwa <span style="color: #993333; font-weight: bold;">FROM</span> dzialy <span style="color: #993333; font-weight: bold;">WHERE</span> id_dzial<span style="color: #66cc66;">=</span>v_id_dzial;
&nbsp;
            <span style="color: #993333; font-weight: bold;">IF</span> v_id_parent <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span> then
                <span style="color: #993333; font-weight: bold;">IF</span> path_dzial <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">''</span> then
                    path_dzial :<span style="color: #66cc66;">=</span> v_nazwa;
                else
                    path_dzial :<span style="color: #66cc66;">=</span> v_nazwa <span style="color: #66cc66;">||</span><span style="color: #ff0000;">' -&gt; '</span><span style="color: #66cc66;">||</span> path_dzial;
                end <span style="color: #993333; font-weight: bold;">IF</span>;
                <span style="color: #993333; font-weight: bold;">RETURN</span> path_dzial;
            else
                <span style="color: #993333; font-weight: bold;">IF</span> path_dzial <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">''</span> then
                    path_dzial :<span style="color: #66cc66;">=</span> v_nazwa;
                else
                    path_dzial :<span style="color: #66cc66;">=</span> v_nazwa <span style="color: #66cc66;">||</span><span style="color: #ff0000;">' -&gt; '</span><span style="color: #66cc66;">||</span> path_dzial;
                end <span style="color: #993333; font-weight: bold;">IF</span>;
                v_id_dzial <span style="color: #66cc66;">=</span> v_id_parent;
            end <span style="color: #993333; font-weight: bold;">IF</span>;
        END LOOP;
    END;
$BODY$ <span style="color: #993333; font-weight: bold;">LANGUAGE</span> <span style="color: #ff0000;">'plpgsql'</span>;</div></pre><!--END_DEVFMTCODE--></p>
<p>Myślę, że nie ma za bardzo co do tłumaczenia, jest to zwyczajna funkcja iteracyjna która wypisze nam daną ścieżkę, wspomnę jest jeszcze oczywiście możliwość zrealizowania tego rekurencyjnie, co dla wielu programistów jest sposobem bardziej profesjonalnym, jednak moim zdaniem obie metody są równorzędne.</p>
<p>Po wywołaniu funkcji, zwracane są następujące dane:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="SQL"><div class="devcodeoverflow">piotro<span style="color: #66cc66;">=</span><span style="color: #808080; font-style: italic;"># SELECT path_dzialy(5);</span>
             path_dzialy             
<span style="color: #808080; font-style: italic;">-------------------------------------</span>
 dzial_1 <span style="color: #66cc66;">-&gt;</span> dzial_1_3 <span style="color: #66cc66;">-&gt;</span> dzial_1_3_1
<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span> row<span style="color: #66cc66;">&#41;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>Otrzymaliśmy dokładną ścieżkę dla działu o ID 5.</p>
<p>3. Generowanie struktury drzewiastej</p>
<p>Po tym jak już otrzymaliśmy ścieżkę ładnie będzie wyświetlić naszą strukturę jako drzewko. Potrzebne nam będą dwie dodatkowe funkcje, które wykonają całą robotę za nas.</p>
<p>Pierwsza funkcja <em>deep_dzialy</em>:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="SQL"><div class="devcodeoverflow"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">OR</span> <span style="color: #993333; font-weight: bold;">REPLACE</span> <span style="color: #993333; font-weight: bold;">FUNCTION</span> deep_dzialy<span style="color: #66cc66;">&#40;</span>integer<span style="color: #66cc66;">&#41;</span> RETURNS integer <span style="color: #993333; font-weight: bold;">AS</span>
$BODY$
    DECLARE
        u_id_dzial alias <span style="color: #993333; font-weight: bold;">FOR</span> $<span style="color: #cc66cc;">1</span>;
&nbsp;
        v_deep integer;
        v_id_dzial integer;
        v_id_parent integer;
    BEGIN
        v_id_dzial <span style="color: #66cc66;">=</span> u_id_dzial;
        v_deep :<span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>; 
        LOOP
            <span style="color: #993333; font-weight: bold;">SELECT</span> id_parent<span style="color: #66cc66;">,</span> nazwa <span style="color: #993333; font-weight: bold;">INTO</span> v_id_parent<span style="color: #66cc66;">,</span> v_nazwa <span style="color: #993333; font-weight: bold;">FROM</span> dzialy <span style="color: #993333; font-weight: bold;">WHERE</span> id_dzial<span style="color: #66cc66;">=</span>v_id_dzial;
&nbsp;
            <span style="color: #993333; font-weight: bold;">IF</span> v_id_parent <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span> then
                <span style="color: #993333; font-weight: bold;">RETURN</span> v_deep;
            else
                v_deep :<span style="color: #66cc66;">=</span> v_deep <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span>;
                v_id_dzial <span style="color: #66cc66;">=</span> v_id_parent;
            end <span style="color: #993333; font-weight: bold;">IF</span>;
        END LOOP;
    END;
$BODY$ <span style="color: #993333; font-weight: bold;">LANGUAGE</span> <span style="color: #ff0000;">'plpgsql'</span>;</div></pre><!--END_DEVFMTCODE--></p>
<p>Funkcja praktycznie siostrzana jak wcześniejsza (drukująca ścieżkę) z tym wyjątkiem że zwraca nam na jakim poziomie zagłębienia się znajdujemy.</p>
<p>Mamy już funkcje która dla danego ID pokaże nam poziom zagłębienia, możemy spróbować wyświetlić nasze drzewko.</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="SQL"><div class="devcodeoverflow"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">OR</span> <span style="color: #993333; font-weight: bold;">REPLACE</span> <span style="color: #993333; font-weight: bold;">FUNCTION</span> tree_dzialy <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> RETURNS SETOF dzialy <span style="color: #993333; font-weight: bold;">AS</span>
$BODY$
    DECLARE
        r dzialy%rowtype;
&nbsp;
        v_deep integer;
        v_tmp text;
        i integer;
    BEGIN
        <span style="color: #993333; font-weight: bold;">FOR</span> r <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> dzialy
        LOOP
            <span style="color: #993333; font-weight: bold;">IF</span> r<span style="color: #66cc66;">.</span>id_parent <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span> then
                r<span style="color: #66cc66;">.</span>nazwa :<span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'|'</span> <span style="color: #66cc66;">||</span> r<span style="color: #66cc66;">.</span>nazwa;
            end <span style="color: #993333; font-weight: bold;">IF</span>;
&nbsp;
            <span style="color: #993333; font-weight: bold;">IF</span> r<span style="color: #66cc66;">.</span>id_parent <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> then
                v_deep :<span style="color: #66cc66;">=</span> deep_dzialy<span style="color: #66cc66;">&#40;</span>r<span style="color: #66cc66;">.</span>id_dzial<span style="color: #66cc66;">&#41;</span>;
                v_tmp :<span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'|'</span>;
                <span style="color: #993333; font-weight: bold;">FOR</span> i <span style="color: #993333; font-weight: bold;">IN</span> 1<span style="color: #66cc66;">..</span>v_deep
                LOOP
                    v_tmp :<span style="color: #66cc66;">=</span> v_tmp <span style="color: #66cc66;">||</span> <span style="color: #ff0000;">'-'</span>;
                END LOOP;
&nbsp;
                r<span style="color: #66cc66;">.</span>nazwa :<span style="color: #66cc66;">=</span> v_tmp <span style="color: #66cc66;">||</span> <span style="color: #ff0000;">' '</span><span style="color: #66cc66;">||</span> r<span style="color: #66cc66;">.</span>nazwa;
&nbsp;
            end <span style="color: #993333; font-weight: bold;">IF</span>;
            <span style="color: #993333; font-weight: bold;">RETURN</span> NEXT r;
        END LOOP;
        <span style="color: #993333; font-weight: bold;">RETURN</span>;
    END;
$BODY$ <span style="color: #993333; font-weight: bold;">LANGUAGE</span> <span style="color: #ff0000;">'plpgsql'</span>;</div></pre><!--END_DEVFMTCODE--></p>
<p>Kolejna iteracyjna funkcja rysująca nam zagłębienie dla danych poddziałów. Co warte zauważenia to typ zwracany prze tę funkcję mianowicie: <em>RETURNS SETOF dzialy</em> i <em>RETURN NEXT</em></p>
<p><em>RETURNS SETOF dzialy</em> &#8211; zwraca nam niejako całą kolekcję rekordów, czyli wszystkie rekordy z ostatniego polecenia.<br />
<em>RETURN NEXT</em> &#8211; nie zwraca aktualnej wartości funkcji można powiedzieć, że zwraca ono aktualne wykonywane wyrażenie. Dopiero napisane samego RETURN pozwoli nam zakończyć i wyświetlić dane.</p>
<p>Zobaczmy co otrzymaliśmy z naszych funkcji:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="SQL"><div class="devcodeoverflow"> piotro<span style="color: #66cc66;">=</span><span style="color: #808080; font-style: italic;"># SELECT nazwa FROM tree_dzialy();</span>
      nazwa      
<span style="color: #808080; font-style: italic;">-----------------</span>
 <span style="color: #66cc66;">|</span>dzial_1
 <span style="color: #66cc66;">|-</span> dzial_1_1
 <span style="color: #66cc66;">|-</span> dzial_1_2
 <span style="color: #66cc66;">|-</span> dzial_1_3
 <span style="color: #66cc66;">|</span><span style="color: #808080; font-style: italic;">-- dzial_1_3_1</span>
 <span style="color: #66cc66;">|</span>dzial_2
 <span style="color: #66cc66;">|-</span> dzial_2_1
 <span style="color: #66cc66;">|-</span> dzial_2_2
 <span style="color: #66cc66;">|</span><span style="color: #808080; font-style: italic;">-- dzial_2_2_1</span>
 <span style="color: #66cc66;">|-</span> dzial_2_3
 <span style="color: #66cc66;">|</span>dzial_3
<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">11</span> rows<span style="color: #66cc66;">&#41;</span></div></pre><!--END_DEVFMTCODE--></p>
<blockquote><p>
Do naszej struktury możemy również dodać kolumny w których będziemy trzymać kolejność i grupę danego działu, jednak ja nie chciałem zaciemniać całego przesłania. <img src='http://piotrooo.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p></blockquote>
<p>To chyba na tyle, teraz wasze opinie, czy taka funkcjonalność jest dobra a może totalnie zła?</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrooo.com/2010/08/struktury-drzewiaste/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Zależne od siebie select listy &#8211; jQuery</title>
		<link>http://piotrooo.com/2010/07/zalezne-od-siebie-select-listy-jquery/</link>
		<comments>http://piotrooo.com/2010/07/zalezne-od-siebie-select-listy-jquery/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 19:48:46 +0000</pubDate>
		<dc:creator>piotrooo89</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[javascript select list]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[select jquery]]></category>
		<category><![CDATA[select list]]></category>
		<category><![CDATA[select list jquery]]></category>

		<guid isPermaLink="false">http://piotrooo.com/?p=235</guid>
		<description><![CDATA[Dosyć dawno napisałem artykuł &#8211; http://piotrooo.com/2009/12/zalezne-od-siebie-select-listy/ &#8211; na temat wybierania na podstawie zależności w select list&#8217;ach. Pojawiły się komentarze, że fajnie by było oprzeć to o jakiś JS&#8216;owy framework, więc obecnie miałem projekt, który wymagał zrobienia owej funkcjonalności to dobrym pomysłem będzie pokazanie jak to wygląda za pomocą (IMHO) najlepszego z dostępnych FW do JS&#8216;a [...]]]></description>
			<content:encoded><![CDATA[<p>Dosyć dawno napisałem artykuł &#8211; <a href="http://piotrooo.com/2009/12/zalezne-od-siebie-select-listy/">http://piotrooo.com/2009/12/zalezne-od-siebie-select-listy/</a> &#8211; na temat wybierania na podstawie zależności w select list&#8217;ach. Pojawiły się komentarze, że fajnie by było oprzeć to o jakiś <abbr title="JavaScript">JS</abbr>&#8216;owy framework, więc obecnie miałem projekt, który wymagał zrobienia owej funkcjonalności to dobrym pomysłem będzie pokazanie jak to wygląda za pomocą (<abbr title="Moim Skromnym Zdaniem">IMHO</abbr>) najlepszego z dostępnych FW do <abbr title="JavaScript">JS</abbr>&#8216;a &#8211; <a href="http://jquery.com">jQuery</a>. Zobaczcie, co? jak? dlaczego?<br />
<span id="more-235"></span></p>
<p>1. <a name="wprowadzenie">Wprowadzenie</a><br />
Pozwólcie, że posłużę się przykładem tabel stworzonych we wcześniej wspomnianym artykule. W ramach przypomnienia:</p>
<p>Posiadamy tabelę <strong>list1</strong> i <strong>list2</strong>:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="MySQL"><div class="devcodeoverflow"><span style="color: #990099; font-weight: bold;">CREATE</span> <span style="color: #990099; font-weight: bold;">TABLE</span> <span style="color: #990099; font-weight: bold;">IF <span style="color: #CC0099; font-weight: bold;">NOT</span> EXISTS</span> <span style="color: #008000;">`list1`</span> <span style="color: #FF00FF;">&#40;</span>
  <span style="color: #008000;">`id`</span> <span style="color: #999900; font-weight: bold;">int</span><span style="color: #FF00FF;">&#40;</span>11<span style="color: #FF00FF;">&#41;</span> <span style="color: #CC0099; font-weight: bold;">NOT</span> <span style="color: #9900FF; font-weight: bold;">NULL</span> <span style="color: #FF9900; font-weight: bold;">AUTO_INCREMENT</span><span style="color: #000033;">,</span>
  <span style="color: #008000;">`nazwa`</span> <span style="color: #999900; font-weight: bold;">varchar</span><span style="color: #FF00FF;">&#40;</span>100<span style="color: #FF00FF;">&#41;</span> CHARACTER <span style="color: #990099; font-weight: bold;">SET</span> utf8 <span style="color: #CC0099; font-weight: bold;">COLLATE</span> utf8_polish_ci <span style="color: #CC0099; font-weight: bold;">NOT</span> <span style="color: #9900FF; font-weight: bold;">NULL</span><span style="color: #000033;">,</span>
  <span style="color: #990099; font-weight: bold;">PRIMARY KEY</span> <span style="color: #FF00FF;">&#40;</span><span style="color: #008000;">`id`</span><span style="color: #FF00FF;">&#41;</span>
<span style="color: #FF00FF;">&#41;</span> <span style="color: #990099; font-weight: bold;">ENGINE</span><span style="color: #CC0099;">=</span>MyISAM  <span style="color: #990099; font-weight: bold;">DEFAULT</span> <span style="color: #FF9900; font-weight: bold;">CHARSET</span><span style="color: #CC0099;">=</span>utf8_polish_ci <span style="color: #FF9900; font-weight: bold;">AUTO_INCREMENT</span><span style="color: #CC0099;">=</span><span style="color: #008080;">1</span><span style="color: #000033;">;</span></div></pre><!--END_DEVFMTCODE--><br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="MySQL"><div class="devcodeoverflow"><span style="color: #990099; font-weight: bold;">CREATE</span> <span style="color: #990099; font-weight: bold;">TABLE</span> <span style="color: #990099; font-weight: bold;">IF <span style="color: #CC0099; font-weight: bold;">NOT</span> EXISTS</span> <span style="color: #008000;">`list2`</span> <span style="color: #FF00FF;">&#40;</span>
  <span style="color: #008000;">`id`</span> <span style="color: #999900; font-weight: bold;">int</span><span style="color: #FF00FF;">&#40;</span>11<span style="color: #FF00FF;">&#41;</span> <span style="color: #CC0099; font-weight: bold;">NOT</span> <span style="color: #9900FF; font-weight: bold;">NULL</span> <span style="color: #FF9900; font-weight: bold;">AUTO_INCREMENT</span><span style="color: #000033;">,</span>
  <span style="color: #008000;">`nazwa<span style="color: #008080; font-weight: bold;">_</span>list2`</span> <span style="color: #999900; font-weight: bold;">varchar</span><span style="color: #FF00FF;">&#40;</span>100<span style="color: #FF00FF;">&#41;</span> CHARACTER <span style="color: #990099; font-weight: bold;">SET</span> utf8 <span style="color: #CC0099; font-weight: bold;">COLLATE</span> utf8_polish_ci <span style="color: #CC0099; font-weight: bold;">NOT</span> <span style="color: #9900FF; font-weight: bold;">NULL</span><span style="color: #000033;">,</span>
  <span style="color: #008000;">`id<span style="color: #008080; font-weight: bold;">_</span>list1`</span> <span style="color: #999900; font-weight: bold;">int</span><span style="color: #FF00FF;">&#40;</span>11<span style="color: #FF00FF;">&#41;</span> <span style="color: #CC0099; font-weight: bold;">NOT</span> <span style="color: #9900FF; font-weight: bold;">NULL</span><span style="color: #000033;">,</span>
  <span style="color: #990099; font-weight: bold;">PRIMARY KEY</span> <span style="color: #FF00FF;">&#40;</span><span style="color: #008000;">`id`</span><span style="color: #FF00FF;">&#41;</span>
<span style="color: #FF00FF;">&#41;</span> <span style="color: #990099; font-weight: bold;">ENGINE</span><span style="color: #CC0099;">=</span>MyISAM  <span style="color: #990099; font-weight: bold;">DEFAULT</span> <span style="color: #FF9900; font-weight: bold;">CHARSET</span><span style="color: #CC0099;">=</span>utf8_polish_ci <span style="color: #FF9900; font-weight: bold;">AUTO_INCREMENT</span><span style="color: #CC0099;">=</span>1 <span style="color: #000033;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>Wylistowanie ich wygląda następująco:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="MySQL"><div class="devcodeoverflow">mysql<span style="color: #CC0099;">&gt;</span> <span style="color: #990099; font-weight: bold;">SELECT</span> <span style="color: #CC0099;">*</span> <span style="color: #990099; font-weight: bold;">FROM</span> list1<span style="color: #000033;">;</span>
<span style="color: #CC0099;">+----+---------+</span>
<span style="color: #CC0099;">|</span> id <span style="color: #CC0099;">|</span> nazwa   <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">+----+---------+</span>
<span style="color: #CC0099;">|</span>  1 <span style="color: #CC0099;">|</span> wybór_1 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">|</span>  2 <span style="color: #CC0099;">|</span> wybór_2 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">|</span>  3 <span style="color: #CC0099;">|</span> wybór_3 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">|</span>  4 <span style="color: #CC0099;">|</span> wybór_4 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">+----+---------+</span></div></pre><!--END_DEVFMTCODE--></p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="MySQL"><div class="devcodeoverflow">mysql<span style="color: #CC0099;">&gt;</span> <span style="color: #990099; font-weight: bold;">SELECT</span> <span style="color: #CC0099;">*</span> <span style="color: #990099; font-weight: bold;">FROM</span> list2<span style="color: #000033;">;</span>
<span style="color: #CC0099;">+----+-------------+----------+</span>
<span style="color: #CC0099;">|</span> id <span style="color: #CC0099;">|</span> nazwa_list2 <span style="color: #CC0099;">|</span> id_list1 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">+----+-------------+----------+</span>
<span style="color: #CC0099;">|</span>  1 <span style="color: #CC0099;">|</span> wybór_1_1   <span style="color: #CC0099;">|</span>        1 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">|</span>  2 <span style="color: #CC0099;">|</span> wybór_1_2   <span style="color: #CC0099;">|</span>        1 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">|</span>  3 <span style="color: #CC0099;">|</span> wybór_1_3   <span style="color: #CC0099;">|</span>        1 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">|</span>  4 <span style="color: #CC0099;">|</span> wybór_2_1   <span style="color: #CC0099;">|</span>        2 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">|</span>  5 <span style="color: #CC0099;">|</span> wybór_2_2   <span style="color: #CC0099;">|</span>        2 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">|</span>  6 <span style="color: #CC0099;">|</span> wybór_3_1   <span style="color: #CC0099;">|</span>        3 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">|</span>  7 <span style="color: #CC0099;">|</span> wybór_3_2   <span style="color: #CC0099;">|</span>        3 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">|</span>  8 <span style="color: #CC0099;">|</span> wybór_3_3   <span style="color: #CC0099;">|</span>        3 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">|</span>  9 <span style="color: #CC0099;">|</span> wybór_4_1   <span style="color: #CC0099;">|</span>        4 <span style="color: #CC0099;">|</span>
<span style="color: #CC0099;">+----+-------------+----------+</span></div></pre><!--END_DEVFMTCODE--></p>
<p>Relacje są tworzone na podstawie <strong>list1.id=list2.id_list1</strong>. Chyba wszystko jasne. Przejdźmy dalej.</p>
<p>2. <a name="ajax_jquery"><abbr title="Asynchroniczny JavaScript i XML">AJAX</abbr> w jQuery</a><br />
Do realizacji zapytań ajax&#8217;owych jQuery używa odpowiedniej metody: <a href="http://api.jquery.com/jQuery.ajax/">$.ajax({})</a>. W dokumentacji wszystkie parametry jakie można wykorzystywać, nie będę się na ten temat rozpisywał. Pożądaną własnością jest używanie metody <a href="http://api.jquery.com/live/">.live()</a>, która będzie nam &#8222;przypinać&#8221; zdarzenia do nowo stworzonego selektora (kiedyś jak byłem młody i piękny nie znałem tej wspaniałej opcji do czasu aż zostałem oświecony przez <a href="http://nospor.pl">nospor</a>&#8216;a &#8211; pozdrowienia <img src='http://piotrooo.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  &#8211; i od tego czasu używam jej wszędzie gdzie tylko widzę słowa AJAX i jQuery <img src='http://piotrooo.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). Dość teorii, czas na kod.</p>
<p>3. <a name="">&#8222;Serce&#8221; naszego algorytmu</a><br />
Zacznijmy od wyświetlenia naszych list:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #b1b100;">include</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mysql.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$list1_query</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT * FROM list1'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;select name=&quot;list1&quot; id=&quot;list1&quot;&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row_list1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$list1_query</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;option value=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$row_list1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;&gt;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$row_list1</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nazwa'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/option&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/select&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;pokaz&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #000088;">$list2_query</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT * FROM list2'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;select name=&quot;list2&quot; id=&quot;list2&quot;&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row_list2</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$list2_query</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;option value=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$row_list2</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;&gt;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$row_list2</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nazwa'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/option&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/select&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>W ten sposób mamy wyświetlone wszystkie opcje z naszych list. Kolejnym krokiem jest stworzenie pliku, w którym będziemy sobie tworzyć naszą listę już z odpowiednim warunkiem wyświetlania. </p>
<p>Nasz plik nazwiemy <em>ajax_funkcje.php</em>. W nim znajdować będzie się znajdować include do pliku z połączeniem bazy i dane które będziemy wyświetlać użytkownikowi po wybraniu odpowiednich opcji. </p>
<p>Przejdźmy już do request&#8217;ów (zapytań) generowanych przez AJAX. Jak już wspomniałem jQuery korzysta z funkcji <strong>$.ajax()</strong>. Jak to może wyglądać, zobaczmy:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Javascript"><div class="devcodeoverflow">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#list1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">live</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'change'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">//1</span>
	<span style="color: #003366; font-weight: bold;">var</span> value <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #006600; font-style: italic;">//2</span>
	$.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">//3</span>
		type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'GET'</span><span style="color: #339933;">,</span><span style="color: #006600; font-style: italic;">//4</span>
		url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'ajax_funkcje.php'</span><span style="color: #339933;">,</span><span style="color: #006600; font-style: italic;">//5</span>
		data<span style="color: #339933;">:</span> <span style="color: #3366CC;">'show_list2=1&amp;id='</span><span style="color: #339933;">+</span>value<span style="color: #339933;">+</span><span style="color: #3366CC;">''</span><span style="color: #339933;">,</span><span style="color: #006600; font-style: italic;">//6</span>
		success<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">//7a</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#pokaz'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #006600; font-style: italic;">//7b</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<blockquote><p>Zakładam, że czytający ma podstawową znajomość używania selektorów w jQuery. Jeśli nie zapraszam do dokumentacjo <a href="http://api.jquery.com/">API jQuery</a></p></blockquote>
<p>Omówmy po kolei co znaczy każda linia.</p>
<ol>
<li>Odwołanie się do pierwszej select listy na podstawie, której będziemy wyświetlać dane w drugiej, używamy tu event&#8217;u change (Ci co nie wiedzą zapraszam do <a href="http://api.jquery.com/change/">dokumentacji</a>)</li>
<li>Do zmiennej <em>value</em> dodajemy wartość na podstawie której chcemy wyświetlić dane w drugiej select liście, w naszym przypadku &#8211; ID</li>
<li>Odwołujemy się do metody $.ajax()</li>
<li>Typ przesyłania request&#8217;ów via AJAX (GET/POST)</li>
<li>Plik w którym następuje &#8222;obróbka&#8221; danych wysłanych przez AJAX</li>
<li>Dane przesyłane do naszego pliku z obróbką zapytań</li>
<li>Funkcja zwracająca nam &#8211; w chwili poprawnego otrzymania odpowiedzi od AJAX&#8217;a &#8211; danych i wyświetlenie ich w odpowiednim miejscu, w naszym przypadku w div&#8217;ie o id <em>pokaz</em></li>
</ol>
<p>Tak to wygląda po stronie <abbr title="JavaScript">JS</abbr>, zobaczmy jak należy sformatować dane w pliku <strong>ajax_funkcje.php</strong>:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'show_list2'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$id_list1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_real_escape_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$list2_query</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT * FROM list2 WHERE id_list1=$id_list1'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;select name=&quot;list2&quot; id=&quot;list2&quot;&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row_list2</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$list2_query</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;option value=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$row_list2</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;&gt;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$row_list2</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nazwa'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/option&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/select&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>W tym momencie dane (select lista) zostaje wysłana do AJAX&#8217;a jako odpowiedź, którą za pomocą funkcji <em>success</em>, wyświetlamy w odpowiednim linku.</p>
<p>4. <a name="">Epilog</a><br />
Czym różni się sposób opisany w tym artykule od sposobu z poprzedniego? Na pewno wizualnie krótszy, przejrzysty, czytelny. Jest to sposób elegancki, bo właśnie w ten sposób trzeba napisać mówiąc o programowaniu za pomocą frameworków. Kod ten jest skalowalny na wszelkie przeglądarki więc nie musimy się zamartwiać o to czy tu będzie działać, a tam już nie.</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrooo.com/2010/07/zalezne-od-siebie-select-listy-jquery/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wyłączenie okienka automatycznych aktualizacji Ubuntu</title>
		<link>http://piotrooo.com/2010/06/wylaczenie-okienka-automatycznych-aktualizacji-ubuntu/</link>
		<comments>http://piotrooo.com/2010/06/wylaczenie-okienka-automatycznych-aktualizacji-ubuntu/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 07:42:31 +0000</pubDate>
		<dc:creator>piotrooo89</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Wyłączenie okienka automatycznych aktualizacji Ubuntu]]></category>

		<guid isPermaLink="false">http://piotrooo.com/?p=232</guid>
		<description><![CDATA[Kolejny fajny &#8222;ficzerek&#8221; pokazany mi przez kolegę. Jeśli drażni Cię wyskakujące okienko z aktualizacjami, jest prosta rada jak zrobić powiadamianie wystarczy wklepać w linki komend następującą linię: gconftool -s --type bool /apps/update-notifier/auto_launch false Od teraz nasz ukochany system będzie nas powiadamiał o aktualizacjach wyświetlając ikonkę w tray&#8217;u po kliknięciu której wyświetli się Menedżer aktualizacji .]]></description>
			<content:encoded><![CDATA[<p>Kolejny fajny &#8222;ficzerek&#8221; pokazany mi przez kolegę. Jeśli drażni Cię wyskakujące okienko z aktualizacjami, jest prosta rada jak zrobić powiadamianie wystarczy wklepać w linki komend następującą linię:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Bash"><div class="devcodeoverflow">gconftool <span style="color: #660033;">-s</span> <span style="color: #660033;">--type</span> bool <span style="color: #000000; font-weight: bold;">/</span>apps<span style="color: #000000; font-weight: bold;">/</span>update-notifier<span style="color: #000000; font-weight: bold;">/</span>auto_launch <span style="color: #c20cb9; font-weight: bold;">false</span></div></pre><!--END_DEVFMTCODE--></p>
<p>Od teraz nasz ukochany system będzie nas powiadamiał o aktualizacjach wyświetlając ikonkę w tray&#8217;u po kliknięciu której wyświetli się Menedżer aktualizacji <img src='http://piotrooo.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrooo.com/2010/06/wylaczenie-okienka-automatycznych-aktualizacji-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zmiana hasła w Wiki</title>
		<link>http://piotrooo.com/2010/06/zmiana-hasla-w-wiki/</link>
		<comments>http://piotrooo.com/2010/06/zmiana-hasla-w-wiki/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 08:27:33 +0000</pubDate>
		<dc:creator>piotrooo89</dc:creator>
				<category><![CDATA[Inne]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[media wiki]]></category>
		<category><![CDATA[wiki]]></category>
		<category><![CDATA[wiki hasło]]></category>
		<category><![CDATA[wikipedia]]></category>
		<category><![CDATA[wikipednia użytkownik]]></category>
		<category><![CDATA[zmiana hasła użytkownika]]></category>
		<category><![CDATA[zmiana hasła wiki]]></category>

		<guid isPermaLink="false">http://piotrooo.com/?p=229</guid>
		<description><![CDATA[Ostatnio miałem pewien mały problem ze zmianą hasła w systemie Wikipedii. Myślałem, że będąc Administratorem będzie to możliwe z panelu za pomocą GUI, nic bardziej mylnego. Możemy to rozwiązać na trzy sposoby: 1. Jeśli zmienna $wgPasswordSalt jest ustawiona na true (domyślnie). Wywołujemy jedno zapytanie do bazy danych: UPDATE user SET user_password = MD5&#40;CONCAT&#40;user_id, '-', MD5&#40;'nowe_haslo'&#41;&#41;&#41; [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio miałem pewien mały problem ze zmianą hasła w systemie Wikipedii. Myślałem, że będąc Administratorem będzie to możliwe z panelu za pomocą <abbr title="Graphical User Interface">GUI</abbr>, nic bardziej mylnego. Możemy to rozwiązać na trzy sposoby:</p>
<p><a name="jeden">1. Jeśli zmienna <em>$wgPasswordSalt</em> jest ustawiona na true (domyślnie).</a><br />
Wywołujemy jedno zapytanie do bazy danych:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="MySQL"><div class="devcodeoverflow"><span style="color: #990099; font-weight: bold;">UPDATE</span> <span style="color: #000099;">user</span> <span style="color: #990099; font-weight: bold;">SET</span> user_password <span style="color: #CC0099;">=</span> <span style="color: #000099;">MD5</span><span style="color: #FF00FF;">&#40;</span><span style="color: #000099;">CONCAT</span><span style="color: #FF00FF;">&#40;</span>user_id<span style="color: #000033;">,</span> <span style="color: #008000;">'-'</span><span style="color: #000033;">,</span> <span style="color: #000099;">MD5</span><span style="color: #FF00FF;">&#40;</span><span style="color: #008000;">'nowe<span style="color: #008080; font-weight: bold;">_</span>haslo'</span><span style="color: #FF00FF;">&#41;</span><span style="color: #FF00FF;">&#41;</span><span style="color: #FF00FF;">&#41;</span> <span style="color: #990099; font-weight: bold;">WHERE</span> user_name <span style="color: #CC0099;">=</span> <span style="color: #008000;">'nazwa<span style="color: #008080; font-weight: bold;">_</span>usera'</span><span style="color: #000033;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p><a name="dwa">2. Jeśli zmienna <em>$wgPasswordSalt</em> jest ustawiona na false.</a></p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="MySQL"><div class="devcodeoverflow"><span style="color: #990099; font-weight: bold;">UPDATE</span> <span style="color: #000099;">user</span> <span style="color: #990099; font-weight: bold;">SET</span> user_password <span style="color: #CC0099;">=</span> <span style="color: #000099;">MD5</span><span style="color: #FF00FF;">&#40;</span><span style="color: #008000;">'nowe<span style="color: #008080; font-weight: bold;">_</span>haslo'</span><span style="color: #FF00FF;">&#41;</span> <span style="color: #990099; font-weight: bold;">WHERE</span> user_name <span style="color: #CC0099;">=</span> <span style="color: #008000;">'nazwa<span style="color: #008080; font-weight: bold;">_</span>usera'</span><span style="color: #000033;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p><a name="trzy">3. Wywołanie odpowiedniego skryptu <abbr title="Hypertext Preprocessor" lang="en">PHP</abbr>.</a></p>
<p>Ostatnią, IMHO, najlepszą metodą jest wywołanie skryptu odpowiedzialnego za zmianę hasła i podanie jej odpowiednich parametrów.</p>
<blockquote><p>
UWAGA! Opcja ta będzie działać tylko po &#8222;odpaleniu&#8221; skryptu przez konsolę (Unix&#8217;ową).</p></blockquote>
<p>Plik o którym mowa znajduję się w lokalizacji: <em>maintenance/changePassword.php</em>, a wywołujemy go z parametrami: <code>--user</code> i <code>--password</code>.</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Bash"><div class="devcodeoverflow"> php maintenance<span style="color: #000000; font-weight: bold;">/</span>changePassword.php <span style="color: #660033;">--user</span>=nazwa_usera <span style="color: #660033;">--password</span>=nowe_haslo</div></pre><!--END_DEVFMTCODE--></p>
<p>To tyle jeśli chodzi o zmianę haseł w Wiki.</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrooo.com/2010/06/zmiana-hasla-w-wiki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brak infromacji o automatycznych aktualizacjach &#8211; Ubuntu 10.04</title>
		<link>http://piotrooo.com/2010/05/brak-infromacji-o-automatycznych-aktualizacjach-ubuntu-10-04/</link>
		<comments>http://piotrooo.com/2010/05/brak-infromacji-o-automatycznych-aktualizacjach-ubuntu-10-04/#comments</comments>
		<pubDate>Wed, 19 May 2010 07:31:21 +0000</pubDate>
		<dc:creator>piotrooo89</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[aktualizacje]]></category>
		<category><![CDATA[aktualizacje lucid]]></category>
		<category><![CDATA[automatyczne]]></category>
		<category><![CDATA[automatyczne aktualizacje ubuntu]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[ubuntu 10.04]]></category>
		<category><![CDATA[ununtu aktualizacje]]></category>

		<guid isPermaLink="false">http://piotrooo.com/?p=227</guid>
		<description><![CDATA[Po zainstalowaniu najnowszego dziecka Canonical nowego Ubuntu, miałem pewien mały problem z powiadamianiem o automatycznych aktualizacja. Nie dostawałem żadnego komunikatu, że takowe są i sam musiałem sprawdzać w menedżerze aktualizacji. Było to dla mnie troszkę mało wygodne, do czasu aż kolega powiedział mi jak rozwiązać ten problem. Rozwiązaniem jest odnalezienie klucza regular_auto_launch_interval za pomocą edytora [...]]]></description>
			<content:encoded><![CDATA[<p>Po zainstalowaniu najnowszego dziecka <a href="http://http://www.canonical.com/">Canonical</a> nowego Ubuntu, miałem pewien mały problem z powiadamianiem o automatycznych aktualizacja. Nie dostawałem żadnego komunikatu, że takowe są i sam musiałem sprawdzać w menedżerze aktualizacji. Było to dla mnie troszkę mało wygodne, do czasu aż kolega powiedział mi jak rozwiązać ten problem. Rozwiązaniem jest odnalezienie klucza <code>regular_auto_launch_interval</code> za pomocą edytora konfiguracji (gconf-editor). Co należy zrobić?</p>
<ol>
<li>Otwieramy gconf-editor (Alt + F2, wpisujemy nazwę programu)</li>
<li>Przechodzimy do gałęzi: <strong>/apps/update_notifier</strong></li>
<li>Odnajdujemy wpis: <code>regular_auto_launch_interval</code> i jego wartość ustawiamy na 0</li>
</ol>
<p>Po tym zmianach będziemy informowani na bieżąco o nowych aktualizacjach.</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrooo.com/2010/05/brak-infromacji-o-automatycznych-aktualizacjach-ubuntu-10-04/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kalendarz Google w jQuery cz. 2</title>
		<link>http://piotrooo.com/2010/01/kalendarz-google-w-jquery-cz-2/</link>
		<comments>http://piotrooo.com/2010/01/kalendarz-google-w-jquery-cz-2/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 21:15:23 +0000</pubDate>
		<dc:creator>piotrooo89</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[baza danych]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[dane]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google calendar]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery database]]></category>
		<category><![CDATA[jquery week calendar]]></category>
		<category><![CDATA[kalendarz]]></category>
		<category><![CDATA[week]]></category>
		<category><![CDATA[week calendar]]></category>
		<category><![CDATA[week database]]></category>

		<guid isPermaLink="false">http://piotrooo.com/?p=207</guid>
		<description><![CDATA[W pierwszej części poradnika http://piotrooo.com/2010/01/kalendarz-google-w-jquery-cz-1/ pokazałem jak generować kalendarz, jak dodawać nowe zdarzenia i wyświetlać je w kalendarzu czas na pozostałą obsługę zdarzeń mianowicie zmiana rozmiaru zdarzenia (czyli zmiana czasu), edycja i usuwanie. Zapraszam do lektury. 1. Zmiana godzin zlecenia &#8211; czyli rozszerzamy i przenosimy zdarzenia To zmian rozmiarów (czasów, aczkolwiek dla uproszczenia będę używał [...]]]></description>
			<content:encoded><![CDATA[<p>W pierwszej części poradnika <a href="http://piotrooo.com/2010/01/kalendarz-google-w-jquery-cz-1/">http://piotrooo.com/2010/01/kalendarz-google-w-jquery-cz-1/</a> pokazałem jak generować kalendarz, jak dodawać nowe zdarzenia i wyświetlać je w kalendarzu czas na pozostałą obsługę zdarzeń mianowicie zmiana rozmiaru zdarzenia (czyli zmiana czasu), edycja i usuwanie. Zapraszam do lektury.</p>
<p><span id="more-207"></span></p>
<p><a name="">1. Zmiana godzin zlecenia &#8211; czyli rozszerzamy i przenosimy zdarzenia</a></p>
<p>To zmian rozmiarów (czasów, aczkolwiek dla uproszczenia będę używał słów zmian rozmiarów) zdarzenia odpowiedzialna jest metoda <code>eventResize</code>. A do zmiany całych dni za pomocą <abbr title="Przeciągnij i upuść">Drag &#8216;n Drop</abbr> odpowiedzialna jest funkcja <code>eventDrop</code>. Oczywiście do zmiany będą nam potrzebne dane które przechwycimy w pliku <strong>kalnedarz_do.php</strong>. Obsłużenie tych metod po strobie jQuery wygląda następująco:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Javascript"><div class="devcodeoverflow"><ol><li>eventDrop <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>calEvent<span style="color: #339933;">,</span> $event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>	$.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span></li><li>		type <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span></li><li>		url<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;kalendarz_do.php?co=resize&amp;id=&quot;</span><span style="color: #339933;">+</span>calEvent.<span style="color: #660066;">id</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span></li><li>		data<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>start<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">start</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>1000<span style="color: #339933;">,</span> end<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">end</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>1000<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></li><li>	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>eventResize <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>calEvent<span style="color: #339933;">,</span> $event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>	$.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span></li><li>		type <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span></li><li>		url<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;kalendarz_do.php?co=resize&amp;id=&quot;</span><span style="color: #339933;">+</span>calEvent.<span style="color: #660066;">id</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span></li><li>		data<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>start<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">start</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>1000<span style="color: #339933;">,</span> end<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">end</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>1000<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></li><li><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>I teraz obsługa tych zdarzeń po stronie serwera aby w naszej bazie coś się zmieniło. Jak pewnie zauważyliście przekazuje również ID tego zdarzenia aby można było jednoznacznie określić co ma być edytowane, plik <strong>kalendarz_do.php</strong>:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'co'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #0000ff;">'resize'</span><span style="color: #009900;">&#41;</span></li><li><span style="color: #009900;">&#123;</span></li><li>	<span style="color: #000088;">$baza</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">quick_sel</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UPDATE kalendarz SET start=('1970-01-01 00:00'::timestamp + interval '<span style="color: #006699; font-weight: bold;">{$_GET['start']}</span>')::timestamp at time zone 'GMT',</span></li><li><span style="color: #0000ff;">			koniec=('1970-01-01 00:00'::timestamp + interval '<span style="color: #006699; font-weight: bold;">{$_GET['end']}</span>')::timestamp at time zone 'GMT'</span></li><li><span style="color: #0000ff;">			WHERE id=<span style="color: #006699; font-weight: bold;">{$_GET['id']}</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li><span style="color: #009900;">&#125;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>I teraz po zmianie rozmiaru (czasu), przeciągnięciu i upuszczeniu na inny dzień możemy zaobserwować zmiany.</p>
<p><a name="">2. Edytowanie i usuwanie zdarzeń</a></p>
<p>Umiemy już dodać, wyświetlić, zmienić dane to teraz czas na edycję i usuwanie. Można powiedzieć że jest to najbardziej skomplikowana część naszego kalendarza. Aby zrealizować tą funkcjonalność należy obsłużyć metodę <code>eventClick</code>. Obsługa tej metody wygląda następująco: </p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Javascript"><div class="devcodeoverflow"><ol><li>eventClick <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>calEvent<span style="color: #339933;">,</span> $event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">readOnly</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>		<span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span></li><li>	<span style="color: #009900;">&#125;</span></li><li>&nbsp;</li><li>	<span style="color: #003366; font-weight: bold;">var</span> $dialogContent <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#event_edit_container&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	resetForm<span style="color: #009900;">&#40;</span>$dialogContent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #003366; font-weight: bold;">var</span> startField <span style="color: #339933;">=</span> $dialogContent.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;select[name='start']&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">start</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #003366; font-weight: bold;">var</span> endField <span style="color: #339933;">=</span> $dialogContent.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;select[name='end']&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">end</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #003366; font-weight: bold;">var</span> titleField <span style="color: #339933;">=</span> $dialogContent.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;input[name='title']&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #003366; font-weight: bold;">var</span> bodyField <span style="color: #339933;">=</span> $dialogContent.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;textarea[name='body']&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	bodyField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">body</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li>	$dialogContent.<span style="color: #660066;">dialog</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span></li><li>		modal<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span></li><li>		height<span style="color: #339933;">:</span> <span style="color: #CC0000;">260</span><span style="color: #339933;">,</span></li><li>		width<span style="color: #339933;">:</span> <span style="color: #CC0000;">400</span><span style="color: #339933;">,</span></li><li>		title<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Edytuj zlecenie - &quot;</span> <span style="color: #339933;">+</span> calEvent.<span style="color: #660066;">title</span><span style="color: #339933;">,</span></li><li>		<span style="color: #000066;">close</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>			$dialogContent.<span style="color: #660066;">dialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;destroy&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>			$dialogContent.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#calendar'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;removeUnsavedEvents&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>		buttons<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span></li><li>			Zamknij <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>				$dialogContent.<span style="color: #660066;">dialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;close&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>			<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>			Usuń <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>				$calendar.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;removeEvent&quot;</span><span style="color: #339933;">,</span> calEvent.<span style="color: #660066;">id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>				$.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span></li><li>				type <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span></li><li>				url<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;kalendarz_do.php?co=del&amp;id=&quot;</span><span style="color: #339933;">+</span>calEvent.<span style="color: #660066;">id</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;&quot;</span></li><li>				<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>				$dialogContent.<span style="color: #660066;">dialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;close&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>			<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>			Zapisz <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>				calEvent.<span style="color: #660066;">start</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>startField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>				calEvent.<span style="color: #660066;">end</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>endField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>				calEvent.<span style="color: #660066;">title</span> <span style="color: #339933;">=</span> titleField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>				calEvent.<span style="color: #660066;">body</span> <span style="color: #339933;">=</span> bodyField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li>				$calendar.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;updateEvent&quot;</span><span style="color: #339933;">,</span> calEvent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>				<span style="color: #003366; font-weight: bold;">var</span> $this<span style="color: #339933;">=</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> </li><li>				$.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span></li><li>					type <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span></li><li>					url<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;kalendarz_do.php?co=edit&amp;id=&quot;</span><span style="color: #339933;">+</span> calEvent.<span style="color: #660066;">id</span> <span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span></li><li>					data<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>start<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>startField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>1000<span style="color: #339933;">,</span> end<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>endField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>1000<span style="color: #339933;">,</span> title<span style="color: #339933;">:</span> titleField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> body<span style="color: #339933;">:</span> bodyField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></li><li>				<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>				$dialogContent.<span style="color: #660066;">dialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;close&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>			<span style="color: #009900;">&#125;</span></li><li>		<span style="color: #009900;">&#125;</span></li><li>	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li>	<span style="color: #003366; font-weight: bold;">var</span> startField <span style="color: #339933;">=</span> $dialogContent.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;select[name='start']&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">start</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #003366; font-weight: bold;">var</span> endField <span style="color: #339933;">=</span> $dialogContent.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;select[name='end']&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">end</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	$dialogContent.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.date_holder&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span>$calendar.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;formatDate&quot;</span><span style="color: #339933;">,</span> calEvent.<span style="color: #660066;">start</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	setupStartAndEndTimeFields<span style="color: #009900;">&#40;</span>startField<span style="color: #339933;">,</span> endField<span style="color: #339933;">,</span> calEvent<span style="color: #339933;">,</span> $calendar.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;getTimeslotTimes&quot;</span><span style="color: #339933;">,</span> calEvent.<span style="color: #660066;">start</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	$<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">resize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">resize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li><span style="color: #009900;">&#125;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Najważniejszymi elementami tej metody jest stworzenie okienka dialogowego w którym umieścimy dwie select listy z możliwością wyboru godzin i zaznaczoną godziną zdarzenia i polami tekstowymi z danymi. Po raz kolejny widzimy wywołanie funkcji <code>setupStartAndEndTimeFields</code>, wyglądającą:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Javascript"><div class="devcodeoverflow"><ol><li><span style="color: #003366; font-weight: bold;">function</span> setupStartAndEndTimeFields<span style="color: #009900;">&#40;</span>$startTimeField<span style="color: #339933;">,</span> $endTimeField<span style="color: #339933;">,</span> calEvent<span style="color: #339933;">,</span> timeslotTimes<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li> </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> timeslotTimes.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #003366; font-weight: bold;">var</span> startTime <span style="color: #339933;">=</span> timeslotTimes<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">start</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #003366; font-weight: bold;">var</span> endTime <span style="color: #339933;">=</span> timeslotTimes<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">end</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #003366; font-weight: bold;">var</span> startSelected <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>startTime.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> calEvent.<span style="color: #660066;">start</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startSelected <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;selected=<span style="color: #000099; font-weight: bold;">\&quot;</span>selected<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #009900;">&#125;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #003366; font-weight: bold;">var</span> endSelected <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>endTime.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> calEvent.<span style="color: #660066;">end</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endSelected <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;selected=<span style="color: #000099; font-weight: bold;">\&quot;</span>selected<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #009900;">&#125;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $startTimeField.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;option value=<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933;">+</span> startTime <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> &quot;</span> <span style="color: #339933;">+</span> startSelected <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&gt;&quot;</span> <span style="color: #339933;">+</span> timeslotTimes<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">startFormatted</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/option&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $endTimeField.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;option value=<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933;">+</span> endTime <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> &quot;</span> <span style="color: #339933;">+</span> endSelected <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&gt;&quot;</span> <span style="color: #339933;">+</span> timeslotTimes<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">endFormatted</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/option&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li> </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;">&#125;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$endTimeOptions <span style="color: #339933;">=</span> $endTimeField.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;option&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$startTimeField.<span style="color: #660066;">trigger</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;change&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp; <span style="color: #009900;">&#125;</span></li><li> </li><li>&nbsp;&nbsp; <span style="color: #003366; font-weight: bold;">var</span> $endTimeField <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;select[name='end']&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp; <span style="color: #003366; font-weight: bold;">var</span> $endTimeOptions <span style="color: #339933;">=</span> $endTimeField.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;option&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>To ona odpowiada za poprawne wyświetlenie czasów zdarzeń. Przyjrzyjmy się teraz przyciskom <strong>Usuń</strong> i <strong>Zapisz</strong>.</p>
<p>Przycisk <strong>Usuń</strong></p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Javascript"><div class="devcodeoverflow">Usuń <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	$calendar.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;removeEvent&quot;</span><span style="color: #339933;">,</span> calEvent.<span style="color: #660066;">id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
		type <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span>
		url<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;kalendarz_do.php?co=del&amp;id=&quot;</span><span style="color: #339933;">+</span>calEvent.<span style="color: #660066;">id</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;&quot;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$dialogContent.<span style="color: #660066;">dialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;close&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>Ten przycisk przekazuje nam do pliku <strong>kalendarz_do.php</strong> akcje jaka ma być wykonana na tym zdarzeniu, czyli w tym wypadku del (usunięcie) i ID rekordu (zdarzenia) które ma być usunięte. I teraz kod który wykonany zostanie po stronie serwera, czyli samo usunięcie z bazy:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'co'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #0000ff;">'del'</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #0000ff;">&quot;DELETE FROM kalnedarz WHERE id=<span style="color: #006699; font-weight: bold;">{$_GET['id']}</span>&quot;</span>
<span style="color: #009900;">&#125;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>Przycisk <strong>Zapisz</strong></p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Javascript"><div class="devcodeoverflow">Zapisz <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	calEvent.<span style="color: #660066;">start</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>startField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	calEvent.<span style="color: #660066;">end</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>endField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	calEvent.<span style="color: #660066;">title</span> <span style="color: #339933;">=</span> titleField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	calEvent.<span style="color: #660066;">body</span> <span style="color: #339933;">=</span> bodyField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	$calendar.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;updateEvent&quot;</span><span style="color: #339933;">,</span> calEvent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> $this<span style="color: #339933;">=</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
	$.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
		type <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span>
		url<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;kalendarz_do.php?co=edit&amp;id=&quot;</span><span style="color: #339933;">+</span> calEvent.<span style="color: #660066;">id</span> <span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span>
		data<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>start<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>startField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>1000<span style="color: #339933;">,</span> end<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>endField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>1000<span style="color: #339933;">,</span> title<span style="color: #339933;">:</span> titleField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> body<span style="color: #339933;">:</span> bodyField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$dialogContent.<span style="color: #660066;">dialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;close&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>Po naćiśnięciu tego przycisku do pliku <strong>kalendarz_do.php</strong> przekazane zostają dwie zmienne jaka akcja ma być wykonywana &#8211; edit (edycja) i ID rekordu do zmiany. Teraz czas na obsługę tego zdarzenia po stronie serwera.</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #0000ff;">'edit'</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #0000ff;">&quot;UPDATE kalendarz SET start=('1970-01-01 00:00'::timestamp + interval '<span style="color: #006699; font-weight: bold;">{$_GET['start']}</span>')::timestamp at time zone 'GMT',</span>
<span style="color: #0000ff;">		koniec=('1970-01-01 00:00'::timestamp + interval '<span style="color: #006699; font-weight: bold;">{$_GET['end']}</span>')::timestamp at time zone 'GMT',</span>
<span style="color: #0000ff;">		title='<span style="color: #006699; font-weight: bold;">{$_GET['title']}</span>', body='<span style="color: #006699; font-weight: bold;">{$_GET['body']}</span>' WHERE id=<span style="color: #006699; font-weight: bold;">{$_GET['id']}</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></div></pre><!--END_DEVFMTCODE--></p>
<p><a name="">4. Epilog</a></p>
<p>Teraz już mamy w pełni obsłużone dodawanie, edycję, usuwanie i pokazywanie zdarzeń za pomocą kalendarza jQuery i dynamicznych danych pobieranych z bazy <abbr title="Structured Query Language" lang="en">SQL</abbr>.</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrooo.com/2010/01/kalendarz-google-w-jquery-cz-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Kalendarz Google w jQuery cz. 1</title>
		<link>http://piotrooo.com/2010/01/kalendarz-google-w-jquery-cz-1/</link>
		<comments>http://piotrooo.com/2010/01/kalendarz-google-w-jquery-cz-1/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 21:07:44 +0000</pubDate>
		<dc:creator>piotrooo89</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[baza danych]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[dane]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google calendar]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery database]]></category>
		<category><![CDATA[jquery week calendar]]></category>
		<category><![CDATA[kalendarz]]></category>
		<category><![CDATA[week]]></category>
		<category><![CDATA[week calendar]]></category>
		<category><![CDATA[week database]]></category>

		<guid isPermaLink="false">http://piotrooo.com/?p=183</guid>
		<description><![CDATA[Chcąc stworzyć funkcjonalny kalendarz, należy popatrzeć jak robią to mistrzowie w dziedzinie użyteczności i ilości użytkowników korzystających z ich produktów &#8211; mianowicie Google. Mowa tutaj o w pełni funkcjonalnym i bardzo użytko-przyjaznym narzędziu jakim jest Kalendarz giganta z Mountain View. Mnie obecnie była potrzeba tylko funkcjonalność całego tygodnia. Zacząłem wertować stronice internetu i w końcu [...]]]></description>
			<content:encoded><![CDATA[<p>Chcąc stworzyć funkcjonalny kalendarz, należy popatrzeć jak robią to mistrzowie w dziedzinie użyteczności i ilości użytkowników korzystających z ich produktów &#8211; mianowicie Google. Mowa tutaj o w pełni funkcjonalnym i bardzo użytko-przyjaznym narzędziu jakim jest Kalendarz giganta z Mountain View. Mnie obecnie była potrzeba tylko funkcjonalność całego tygodnia. Zacząłem wertować stronice internetu i w końcu trafiłem na kilka pozycji które mnie zaciekawiły. Pierwszym było rozwiązanie proponowane przez dhtmlx a mianowicie &#8211; <a href="http://dhtmlx.com/docs/products/dhtmlxScheduler/">dhtmlxScheduler</a>, jednak lekko przeraziło mnie <abbr title="Application Programming Interface">API</abbr> jak i sam ciężar tej aplikacji, nie chciałem jakiegoś monstrum tylko coś lekkiego. Po kliku chwilach znalazłem coś co okazało się naprawdę fajne, był to strzał w dziesiątkę. Znalazłem aplikacje napisaną w jQuery a mianowicie <a href="http://www.redredred.com.au/projects/jquery-week-calendar/">jQuery Week Calendar</a>. Po krótszym przyglądnięciu się postanowiłem że to będzie to, rozbuduje dodam dynamiczną obsługę zdarzeń i będzie hulać. W pierwszej części tego poradnika pokaże podstawowe rzeczy związane z właśnie tą aplikacją.<br />
<span id="more-183"></span></p>
<blockquote><p>Na stronie: <a href="http://www.redredred.com.au/projects/jquery-week-calendar/">http://www.redredred.com.au/projects/jquery-week-calendar/</a>, mamy w pełni opisane <abbr title="Application Programming Interface">API</abbr>, więc w razie wątpliwości odsyłam właśnie do tej strony, są tam opisane wszystkie metody jakimi dysponuje ta biblioteka. Do prawidłowego posługiwania się ta biblioteką jest potrzeba podstawowa znajomość frameworka jQuery, jeśli jej nie posiadasz odsyłam do <a href="http://docs.jquery.com/Main_Page">dokumentacji jQuery</a>.
</p></blockquote>
<p><a name="wprowadzenie">1. Wprowadzenie</a><br />
Na samym początku musimy wyświetlić nasz kalendarz. Do poprawnego generowania kalendarza będa nam potrzebne m. in.:</p>
<ul>
<li><a href="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">jQuery w wersji większej niż 1.3.2</a></li>
<li><a href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js">jQuery UI</a></li>
<li>oczywiście plik z samą biblioteką kalendarza czyli <a href="http://code.google.com/p/jquery-week-calendar/">jQuery Week Calendar</a></li>
<li>dodatkowo możemy potrzebować plików ze stylami zarówno do UI jak i kalendarza <a href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/smoothness/jquery-ui.css">UI CSS</a></li>
</ul>
<p>Teraz w sekcji <code>&lt;head&gt;</code> dodajemy wszytstkie biblioteki:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="HTML"><div class="devcodeoverflow"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'stylesheet'</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'text/css'</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/smoothness/jquery-ui.css'</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'stylesheet'</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'text/css'</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'jquery.weekcalendar.css'</span> <span style="color: #66cc66;">/</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'text/javascript'</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'</span>&gt;</span><span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'text/javascript'</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js'</span>&gt;</span><span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'text/javascript'</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'jquery.weekcalendar.js'</span>&gt;</span><span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
</div></pre><!--END_DEVFMTCODE--></p>
<p>W ciele naszego strony umieszczamy kontener:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="HTML"><div class="devcodeoverflow"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'calendar'</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>to właśnie w nim będzie wyświetlany nasz kalendarz.</p>
<p><a name="generujemy-kalendarz">2. Generujemy kalendarz</a><br />
&#8222;Serce&#8221; naszego kalendarza to ta jedna linijka <code>$('#calendar').weekCalendar</code>. To właśnie do tej funkcji będziemy dopisywać kolejne metody i personalizować nasz kalendarz. Standardowe uruchomienie:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Javascript"><div class="devcodeoverflow"><ol><li><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">'text/javascript'</span><span style="color: #339933;">&gt;</span></li><li>	<span style="color: #003366; font-weight: bold;">var</span> year <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getFullYear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #003366; font-weight: bold;">var</span> month <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getMonth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #003366; font-weight: bold;">var</span> day <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getDate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #003366; font-weight: bold;">var</span> eventData <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span></li><li>	events <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span></li><li>			<span style="color: #009900;">&#123;</span><span style="color: #3366CC;">&quot;id&quot;</span><span style="color: #339933;">:</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;start&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>year<span style="color: #339933;">,</span> month<span style="color: #339933;">,</span> day<span style="color: #339933;">,</span> <span style="color: #CC0000;">12</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;end&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>year<span style="color: #339933;">,</span> month<span style="color: #339933;">,</span> day<span style="color: #339933;">,</span> <span style="color: #CC0000;">13</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">35</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;title&quot;</span><span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;Zdarzenie jeden&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>			<span style="color: #009900;">&#123;</span><span style="color: #3366CC;">&quot;id&quot;</span><span style="color: #339933;">:</span><span style="color: #CC0000;">2</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;start&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>year<span style="color: #339933;">,</span> month<span style="color: #339933;">,</span> day<span style="color: #339933;">,</span> <span style="color: #CC0000;">14</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;end&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>year<span style="color: #339933;">,</span> month<span style="color: #339933;">,</span> day<span style="color: #339933;">,</span> <span style="color: #CC0000;">14</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">45</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;title&quot;</span><span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;Kolokwium z algebry&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>			<span style="color: #009900;">&#123;</span><span style="color: #3366CC;">&quot;id&quot;</span><span style="color: #339933;">:</span><span style="color: #CC0000;">3</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;start&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>year<span style="color: #339933;">,</span> month<span style="color: #339933;">,</span> day <span style="color: #339933;">+</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">18</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;end&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>year<span style="color: #339933;">,</span> month<span style="color: #339933;">,</span> day <span style="color: #339933;">+</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">18</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">45</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;title&quot;</span><span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;Impreza u Kuby&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>			<span style="color: #009900;">&#123;</span><span style="color: #3366CC;">&quot;id&quot;</span><span style="color: #339933;">:</span><span style="color: #CC0000;">4</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;start&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>year<span style="color: #339933;">,</span> month<span style="color: #339933;">,</span> day <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;end&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>year<span style="color: #339933;">,</span> month<span style="color: #339933;">,</span> day <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">9</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">30</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;title&quot;</span><span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;Narty z kolegami&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>			<span style="color: #009900;">&#123;</span><span style="color: #3366CC;">&quot;id&quot;</span><span style="color: #339933;">:</span><span style="color: #CC0000;">5</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;start&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>year<span style="color: #339933;">,</span> month<span style="color: #339933;">,</span> day <span style="color: #339933;">+</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">14</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;end&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>year<span style="color: #339933;">,</span> month<span style="color: #339933;">,</span> day <span style="color: #339933;">+</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;title&quot;</span><span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;Gramy w chinczyka&quot;</span><span style="color: #009900;">&#125;</span></li><li>		<span style="color: #009900;">&#93;</span></li><li>		<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li>$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#calendar'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span></li><li>			timeslotsPerHour <span style="color: #339933;">:</span> 2<span style="color: #339933;">,</span></li><li>			allowCalEventOverlap <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span></li><li>			overlapEventsSeparate<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span></li><li>			firstDayOfWeek <span style="color: #339933;">:</span> 1<span style="color: #339933;">,</span></li><li>			businessHours <span style="color: #339933;">:</span><span style="color: #009900;">&#123;</span>start<span style="color: #339933;">:</span> 8<span style="color: #339933;">,</span> end<span style="color: #339933;">:</span> 18<span style="color: #339933;">,</span> limitDisplay<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>			daysToShow <span style="color: #339933;">:</span> <span style="color: #CC0000;">7</span><span style="color: #339933;">,</span></li><li>			longDays <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Niedziela'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Poniedziałek'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Wtorek'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Śoda'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Czwartek'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Piatek'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Sobota'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span></li><li>			shortMonths <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Sty'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Luty'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Marz'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Kwie'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Czerw'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Lip'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Sierp'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Wrze'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Paźdz'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'List'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Gru'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span></li><li>			timeFormat <span style="color: #339933;">:</span> <span style="color: #3366CC;">'G:i'</span><span style="color: #339933;">,</span></li><li>			timeSeparator<span style="color: #339933;">:</span> <span style="color: #3366CC;">' - '</span><span style="color: #339933;">,</span></li><li>			use24Hour<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span></li><li>			height<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$calendar<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span></li><li>				<span style="color: #000066; font-weight: bold;">return</span> $<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;h1&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">outerHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>			<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>			eventRender <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>calEvent<span style="color: #339933;">,</span> $event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>				<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">end</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>					$event.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;backgroundColor&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#aaa&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>					$event.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.time&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><span style="color: #3366CC;">&quot;backgroundColor&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;#999&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;border&quot;</span><span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;1px solid #888&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>				<span style="color: #009900;">&#125;</span></li><li>			<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>			data<span style="color: #339933;">:</span>eventData</li><li>		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li><span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Oto wygenerowany kalendarz: <a href="http://piotrooo.com/przyklady/kalendarz/kalendarz1.php">kalendarz-1</a>.</p>
<p>Teraz opiszmy co robimy dokładnie. W pierwszych 13 liniach definiujemy sobie jakieś przykładowe zdarzenia. To co dzieje się w funkcji <strong>weekCalendar</strong>, to już sprawa API, no i tego jak użyjemy odpowiednich funkcji. </p>
<p>Można się zgodzić że takie dodawanie nowych zdarzeń, poprzez wpisywanie ich w formacie <a href="http://pl.wikipedia.org/wiki/JSON">JSON</a> jest bardzo niewygodne i bardzo uciążliwe. Dobrym pomysłem będzie zintegrować cały kalendarz z bazą danych, podniesie to jego funkcjonalność i przydatność podczas implementacji różnego rodzaju aplikacjach.</p>
<p><a name="nowe">3. Dodawanie nowych zdarzeń</a></p>
<p>Tworzymy sobie tabelkę w której będziemy trzymać nasze zdarzenia:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="MySQL"><div class="devcodeoverflow"><span style="color: #990099; font-weight: bold;">CREATE</span> <span style="color: #990099; font-weight: bold;">TABLE</span> kalendarz <span style="color: #FF00FF;">&#40;</span>
    id <span style="color: #999900; font-weight: bold;">serial</span> <span style="color: #CC0099; font-weight: bold;">NOT</span> <span style="color: #9900FF; font-weight: bold;">NULL</span><span style="color: #000033;">,</span>
    <span style="color: #990099; font-weight: bold;">start</span> <span style="color: #999900; font-weight: bold;">timestamp</span> without <span style="color: #999900; font-weight: bold;">time</span> zone<span style="color: #000033;">,</span>
    koniec <span style="color: #999900; font-weight: bold;">timestamp</span> without <span style="color: #999900; font-weight: bold;">time</span> zone<span style="color: #000033;">,</span>
    title <span style="color: #999900; font-weight: bold;">text</span><span style="color: #000033;">,</span>
    body <span style="color: #999900; font-weight: bold;">text</span>
<span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>W poszczególnych kolumnach będziemy trzymać kolejno ID danego zdarzenia, datę rozpoczęcia, datę zakończenia, nagłówek i treść danego zdarzenia. </p>
<p>Funkcja która odpowiedzialna jest za dodawanie nowego zdarzenia to <code>eventNew</code>:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Javascript"><div class="devcodeoverflow">eventNew <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>calEvent<span style="color: #339933;">,</span> $event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003366; font-weight: bold;">var</span> $dialogContent <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#event_edit_container&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         resetForm<span style="color: #009900;">&#40;</span>$dialogContent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #003366; font-weight: bold;">var</span> startField <span style="color: #339933;">=</span> $dialogContent.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;select[name='start']&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">start</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #003366; font-weight: bold;">var</span> endField <span style="color: #339933;">=</span> $dialogContent.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;select[name='end']&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>calEvent.<span style="color: #660066;">end</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #003366; font-weight: bold;">var</span> titleField <span style="color: #339933;">=</span> $dialogContent.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;input[name='title']&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #003366; font-weight: bold;">var</span> bodyField <span style="color: #339933;">=</span> $dialogContent.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;textarea[name='body']&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
         $dialogContent.<span style="color: #660066;">dialog</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
			modal<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
			height<span style="color: #339933;">:</span> <span style="color: #CC0000;">260</span><span style="color: #339933;">,</span>
			width<span style="color: #339933;">:</span> <span style="color: #CC0000;">400</span><span style="color: #339933;">,</span>
            title<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Nowe zdarzenie&quot;</span><span style="color: #339933;">,</span>
            <span style="color: #000066;">close</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
               $dialogContent.<span style="color: #660066;">dialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;destroy&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
               $dialogContent.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
               $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#calendar'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;removeUnsavedEvents&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            buttons<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
               Zamknij <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                  $dialogContent.<span style="color: #660066;">dialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;close&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
               <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
               Dodaj <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                  calEvent.<span style="color: #660066;">id</span> <span style="color: #339933;">=</span> id<span style="color: #339933;">;</span>
                  id<span style="color: #339933;">++;</span>
                  calEvent.<span style="color: #660066;">start</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>startField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                  calEvent.<span style="color: #660066;">end</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>endField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                  calEvent.<span style="color: #660066;">title</span> <span style="color: #339933;">=</span> titleField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                  calEvent.<span style="color: #660066;">body</span> <span style="color: #339933;">=</span> bodyField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                  $calendar.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;removeUnsavedEvents&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                  $calendar.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;updateEvent&quot;</span><span style="color: #339933;">,</span> calEvent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					$.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
					type <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span>
				 	url<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;kalendarz_do.php?co=save&quot;</span><span style="color: #339933;">,</span>
   					data<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>start<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>startField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>1000<span style="color: #339933;">,</span> end<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>endField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>1000<span style="color: #339933;">,</span> title<span style="color: #339933;">:</span> titleField.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
 					<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                  $dialogContent.<span style="color: #660066;">dialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;close&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
               <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
         <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
         $dialogContent.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.date_holder&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span>$calendar.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;formatDate&quot;</span><span style="color: #339933;">,</span> calEvent.<span style="color: #660066;">start</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         setupStartAndEndTimeFields<span style="color: #009900;">&#40;</span>startField<span style="color: #339933;">,</span> endField<span style="color: #339933;">,</span> calEvent<span style="color: #339933;">,</span> $calendar.<span style="color: #660066;">weekCalendar</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;getTimeslotTimes&quot;</span><span style="color: #339933;">,</span> calEvent.<span style="color: #660066;">start</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #009900;">&#125;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>Wywołujemy w niej kolejną bardzo przyjemną funkcjonalność jaką oferuje nam jQurey a mianowicie <a href="http://docs.jquery.com/UI/Dialog">okienka</a>. To właśnie w nim będziemy dodawać kolejne zdarzenia. Wszystkie dane wysyłane są za pomocą funkcji do obsługi AJAX&#8217;a dostarczonej przez twórców jQuery.<br />
Teraz w naszym okienku powinny pojawić się select listy z możliwością wyboru godziny, ta sprawę załatwi za nasz funkcja <code>setupStartAndEndTimeFields</code>:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Javascript"><div class="devcodeoverflow"><ol><li><span style="color: #003366; font-weight: bold;">function</span> setupStartAndEndTimeFields<span style="color: #009900;">&#40;</span>$startTimeField<span style="color: #339933;">,</span> $endTimeField<span style="color: #339933;">,</span> calEvent<span style="color: #339933;">,</span> timeslotTimes<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> timeslotTimes.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #003366; font-weight: bold;">var</span> startTime <span style="color: #339933;">=</span> timeslotTimes<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">start</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #003366; font-weight: bold;">var</span> endTime <span style="color: #339933;">=</span> timeslotTimes<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">end</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #003366; font-weight: bold;">var</span> startSelected <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>startTime.<span style="color: #660066;">toGMTString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> calEvent.<span style="color: #660066;">start</span>.<span style="color: #660066;">toGMTString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startSelected <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;selected=<span style="color: #000099; font-weight: bold;">\&quot;</span>selected<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #009900;">&#125;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #003366; font-weight: bold;">var</span> endSelected <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>endTime.<span style="color: #660066;">toGMTString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> calEvent.<span style="color: #660066;">end</span>.<span style="color: #660066;">toGMTString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endSelected <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;selected=<span style="color: #000099; font-weight: bold;">\&quot;</span>selected<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #009900;">&#125;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $startTimeField.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;option value=<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933;">+</span> startTime <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> &quot;</span> <span style="color: #339933;">+</span> startSelected <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&gt;&quot;</span> <span style="color: #339933;">+</span> timeslotTimes<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">startFormatted</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/option&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $endTimeField.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;option value=<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933;">+</span> endTime <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> &quot;</span> <span style="color: #339933;">+</span> endSelected <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&gt;&quot;</span> <span style="color: #339933;">+</span> timeslotTimes<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">endFormatted</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/option&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;">&#125;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$endTimeOptions <span style="color: #339933;">=</span> $endTimeField.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;option&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$startTimeField.<span style="color: #660066;">trigger</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;change&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp; <span style="color: #009900;">&#125;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp; <span style="color: #003366; font-weight: bold;">var</span> $endTimeField <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;select[name='end']&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp; <span style="color: #003366; font-weight: bold;">var</span> $endTimeOptions <span style="color: #339933;">=</span> $endTimeField.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;option&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Teraz trzeba stworzyć kontener w którym będziemy trzymać nasz pola formularza:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="HTML"><div class="devcodeoverflow"><ol><li><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;event_edit_container&quot;</span> <span style="color: #000066;">style</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;display: none;&quot;</span>&gt;</span></li><li>	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span> autocomplete<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;off&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tabled&quot;</span>&gt;</span></li><li>	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hidden&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></li><li>	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">table</span>&gt;</span></li><li>		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">span</span>&gt;</span>Data: <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">span</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;date_holder&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">tr</span>&gt;</span></li><li>		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Start:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">select</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;start&quot;</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">option</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span>&gt;</span>Wybierz godzine<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">option</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">select</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">tr</span>&gt;</span></li><li>&nbsp;</li><li>		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Koniec: <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">select</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;end&quot;</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">option</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span>&gt;</span>Wybierz godzine<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">option</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">select</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">tr</span>&gt;</span></li><li>		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Nagłówek:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;title&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;nr_rejestracyjny&quot;</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">tr</span>&gt;</span></li><li>		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;</span>Opis:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">textarea</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;body&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">textarea</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">tr</span>&gt;</span></li><li>	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">table</span>&gt;</span></li><li>	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span></li><li><span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Po ustawieniu wszystkich opcji kolejnym krokiem jest obsłużenie tych wszystkich danych po stronie serwera i zapisanie ich w bazie danych. U mnie za wszelkie operacje na tym kalendarzu odpowiada plik <strong>kalendarz_do.php</strong> jako pierwszy atrybut przekazuje akcje jaka ma być wykonana. W tym wypadku <strong>kalendarz_do.php?co=save</strong></p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'co'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #0000ff;">'save'</span><span style="color: #009900;">&#41;</span></li><li><span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&quot;INSERT INTO kalendarz (start, koniec, title, body) values (</span></li><li><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;('1970-01-01 00:00'::timestamp + interval '<span style="color: #006699; font-weight: bold;">{$_GET['start']}</span>')::timestamp at time zone 'GMT',</span></li><li><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;('1970-01-01 00:00'::timestamp + interval '<span style="color: #006699; font-weight: bold;">{$_GET['end']}</span>')::timestamp at time zone 'GMT',</span></li><li><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<span style="color: #006699; font-weight: bold;">{$_GET['title']}</span>', '<span style="color: #006699; font-weight: bold;">{$_GET['body']}</span>')&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li><span style="color: #009900;">&#125;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Jako że dane ze skryptu otrzymujemy w postaci integer jako liczba sekund, do bazy zapiszemy sobie w normalnej formie, aby można było cokolwiek z tego wiedzieć i móc używać w innych miejscach naszej aplikacji. </p>
<p><a name="odczytywanie-zdarzen">4. Odczytywanie zdarzeń z bazy danych</a></p>
<p>Mamy już obsłużone dodawanie nowych zdarzeń, czas aby jakoś pokazać użytkownikowi dane jakie dodał. Za wczytwanie odpowiada metoda:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Javascript"><div class="devcodeoverflow">data<span style="color: #339933;">:</span> <span style="color: #3366CC;">'kalendarz_do.php?co=get'</span></div></pre><!--END_DEVFMTCODE--></p>
<p>Teraz podczas uruchamiania naszego kalendarza do pliku <strong>kalendarz_do.php</strong> zostaje przesłane rządanie aby &#8222;odpalić&#8221; pobieranie danych z bazy. Po stronie serwera wygląda to tak:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #0000ff;">'get'</span><span style="color: #009900;">&#41;</span></li><li><span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">//łaczymy sie z baza</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;zapytanie<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT id, extract (epoch from start::timestamp) as start, extract (epoch from koniec::timestamp) as end, title, body FROM kalendarz&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">=</span>0 <span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">&lt;</span>ilosc_rekordów_w_bazie <span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$id</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//id naszego zdarzenia</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$start</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//start - data rozpoczęcia</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$end</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//koniec - data zakończenia</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$title</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//title - nagłówek zdarzenia</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$body</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//treść - treść zdarzenia</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$tab</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$id</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$tab</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'start'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'c'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$start</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$tab</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'end'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'c'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$end</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$tab</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$title</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$tab</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'body'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$body</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;">&#125;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #990000;">json_encode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tab</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li><span style="color: #009900;">&#125;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Jako że wszystkie dane do <abbr title="JavaScript">JS</abbr> podawane są w formacie JSON, musimy użyć funkcji <a href="http://pl2.php.net/manual/pl/function.json-encode.php">PHP:json_encode</a>, aby zakodować tablice właśnie na ten standard. </p>
<p><a name="epilog">5. Epilog</a><br />
Właśnie w ten sposób stworzyliśmy prosty sposób dodawania i wyświetlania dodanych zdarzeń w kalendarzu jQuery. W kolejnej części zajmiemy się edycją i usuwaniem zdarzeń. </p>
<p>Kolejna część: <a href="http://piotrooo.com/2010/01/kalendarz-google-w-jquery-cz-2/">http://piotrooo.com/2010/01/kalendarz-google-w-jquery-cz-2/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://piotrooo.com/2010/01/kalendarz-google-w-jquery-cz-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Auto submit w Autocomplete</title>
		<link>http://piotrooo.com/2010/01/auto-submit-w-autocomplete/</link>
		<comments>http://piotrooo.com/2010/01/auto-submit-w-autocomplete/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 09:44:00 +0000</pubDate>
		<dc:creator>piotrooo89</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[autocomplete]]></category>
		<category><![CDATA[bassistance]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery autocomplete]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[submit]]></category>
		<category><![CDATA[submit js]]></category>

		<guid isPermaLink="false">http://piotrooo.com/?p=180</guid>
		<description><![CDATA[Podczas korzystania z pluginu ze stajni bassistance.de, natrafiłem na problem związany z automatycznym wysyłaniem danych które zostały wybrane. Zawiodły mnie wszystkie znane metody więc zrobiłem to czego informatyk robić nie lubi, zacząłem wertować API i manuale. Zobaczcie to znalazłem. To może teraz jaki miałem problem. Podczas wypełniania jednego z pół formularza chciałem aby po użyciu [...]]]></description>
			<content:encoded><![CDATA[<p>Podczas korzystania z pluginu ze stajni <a href="http://bassistance.de">bassistance.de</a>, natrafiłem na problem związany z automatycznym wysyłaniem danych które zostały wybrane. Zawiodły mnie wszystkie znane metody więc zrobiłem to czego informatyk robić nie lubi, zacząłem wertować API i manuale. Zobaczcie to znalazłem.<br />
<span id="more-180"></span></p>
<p>To może teraz jaki miałem problem. Podczas wypełniania jednego z pół formularza chciałem aby po użyciu <a href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/">Autocomplete</a> został wysyłany ten właśnie input na podstawie którego maja być wypełniane inne. </p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Javascript"><div class="devcodeoverflow"><ol><li>jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#id_input&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">autocomplete</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;search.php&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;minChars<span style="color: #339933;">:</span> 2<span style="color: #339933;">,</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;formatItem<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #339933;">,</span> i<span style="color: #339933;">,</span> n<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000066; font-weight: bold;">return</span> value.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;formatResult<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000066; font-weight: bold;">return</span> value.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;">&#125;</span></li><li><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>W takiej postaci dostawałem wyniki i po jakiejś pół godziny wertowania <a href="http://docs.jquery.com">docs&#8217;ów jQuery</a> znalazłem w tym miejscu: <a href="http://docs.jquery.com/Plugins/Autocomplete#Search_Page_Replacement">jQuery:Autocomplete</a> rozwiązanie mego problemu mianowicie funkcję <code>.result(function(event, item)</code> czyli to co zostaje zwracane podczas pokazywania rezultatu, kod wynikowy wygląda tak:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Javascript"><div class="devcodeoverflow"><ol><li>jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#id_input&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">autocomplete</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;search.php&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;minChars<span style="color: #339933;">:</span> 2<span style="color: #339933;">,</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;formatItem<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #339933;">,</span> i<span style="color: #339933;">,</span> n<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000066; font-weight: bold;">return</span> value.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;formatResult<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000066; font-weight: bold;">return</span> value.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;">&#125;</span></li><li><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">result</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">item</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.<span style="color: #660066;">formularz</span>.<span style="color: #660066;">submit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Proste, łatwe i przyjemne. </p>
]]></content:encoded>
			<wfw:commentRss>http://piotrooo.com/2010/01/auto-submit-w-autocomplete/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ograniczenie pobierania w PHP</title>
		<link>http://piotrooo.com/2009/12/ograniczenie-pobierania-w-php/</link>
		<comments>http://piotrooo.com/2009/12/ograniczenie-pobierania-w-php/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 10:17:31 +0000</pubDate>
		<dc:creator>piotrooo89</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[download limit]]></category>
		<category><![CDATA[download limit php]]></category>
		<category><![CDATA[ograniczenie pobierania php]]></category>
		<category><![CDATA[pobieranie]]></category>
		<category><![CDATA[pobieranie php]]></category>
		<category><![CDATA[speed limit]]></category>

		<guid isPermaLink="false">http://piotrooo.com/?p=177</guid>
		<description><![CDATA[Czasami powstaje konieczność ustawienia ograniczenia pobierania danego pliku. Przyczyn może być kilka, chcemy zrobić płatny dostęp do naszego serwisu i chcemy aby tylko osoby posiadające odpowiednie uprawnienia mogły pobierać pliki z pełną prędkością, albo porostu nie chcemy przeciążać naszej maszyny. W tym artykule pokaże jak za pomocą PHP w łatwy sposób możemy zrobić ograniczenie szybkości [...]]]></description>
			<content:encoded><![CDATA[<p>Czasami powstaje konieczność ustawienia ograniczenia pobierania danego pliku. Przyczyn może być kilka, chcemy zrobić płatny dostęp do naszego serwisu i chcemy aby tylko osoby posiadające odpowiednie uprawnienia mogły pobierać pliki z pełną prędkością, albo porostu nie chcemy przeciążać naszej maszyny. W tym artykule pokaże jak za pomocą <abbr title="Hypertext Preprocessor" lang="en">PHP</abbr> w łatwy sposób możemy zrobić ograniczenie szybkości pobierania plików.<br />
<span id="more-177"></span></p>
<p><a name="">Jak pobiera się pliki</a><br />
Pierwszym pytaniem na jakie musimy sobie odpowiedzieć brzmi: &#8216;Jak PHP realizuje pobierania plików?&#8217;. Odpowiedź jest prosta &#8211; <abbr title="Hypertext Preprocessor" lang="en">PHP</abbr> wysyła nagłówki zgodne z protokołem <a href="http://www.faqs.org/rfcs/rfc2616">HTTP</a> za pomocą funkcji <a href="http://pl.php.net/manual/en/function.header.php">PHP:header</a>. </p>
<p><a name="">Pobierania plików z ograniczeniem</a><br />
Aby pobrać jakiś plik musimy kolejno:</p>
<ol>
<li>wysłać nagłówki</li>
<li>opróżnić bufory</li>
<li>przeczytać dany plik</li>
</ol>
<p>Do poprawnego ściągnięcia pliku musimy wysłać odpowiednie nagłówki, myślę że te są wystarczające:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Cache-control: private&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-Type: application/octet-stream&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-Length: &quot;</span><span style="color: #339933;">.</span><span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_down</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-Disposition: filename=<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #006699; font-weight: bold;">$download_file</span><span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>pokazujemy w ten sposób co ma być ściągane, jaki rozmiar i jak ma się nazywać plik u nas na komputerze.</p>
<p>To teraz zobaczmy jak powinien wyglądać kod odpowiedzialny za ograniczenie prędkości ściągania pliku:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li><span style="color: #000088;">$download_rate</span> <span style="color: #339933;">=</span> <span style="color:#800080;">20.5</span><span style="color: #339933;">;</span></li><li><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'plik.txt'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">is_file</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'plik.txt'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span></li><li><span style="color: #009900;">&#123;</span></li><li>	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Cache-control: private&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-Type: application/octet-stream&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-Length: &quot;</span><span style="color: #339933;">.</span><span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'plik.txt'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-Disposition: filename=<span style="color: #000099; font-weight: bold;">\&quot;</span>plik_pobrany.txt<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #990000;">flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'plik.txt'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">feof</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span></li><li>	<span style="color: #009900;">&#123;</span></li><li>		<span style="color: #b1b100;">print</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">,</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$download_rate</span> <span style="color: #339933;">*</span> 1024<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>		<span style="color: #990000;">flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>		<span style="color: #990000;">sleep</span><span style="color: #009900;">&#40;</span>1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>	<span style="color: #009900;">&#125;</span></li><li>	<span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li><span style="color: #009900;">&#125;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Teraz może wyjaśnię jak to działa. Wysyłamy nagłówki odpowiedzialne za pobieranie pliku. Czyścimy bufor za pomocą <a href="http://pl.php.net/manual/en/function.flush.php">PHP:flush</a>, czytam nasz <code>plik.txt</code>, za pomocą funkcji <a href="http://pl.php.net/manual/en/function.fread.php">PHP:fread</a>, i ustawiamy opóźnienie funkcją <a href="http://pl.php.net/manual/en/function.sleep.php">PHP:sleep</a>. Po tych wszystkich zabiegach w zmiennej <code>$download_rate</code> ustawiamy wielkość z jaką ma być pobierany plik. Wielkość ta jest podawana w kilobajtach (KB).</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrooo.com/2009/12/ograniczenie-pobierania-w-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
