Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00250 005120 13082494 na godz. na dobę w sumie
Projektowanie systemów CMS przy użyciu PHP i jQuery - książka
Projektowanie systemów CMS przy użyciu PHP i jQuery - książka
Autor: Liczba stron: 320
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-3365-4 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).

Zbuduj CMS na miarę swoich potrzeb!

Na rynku systemów do zarządzania treścią jest ogromny wybór różnorodnych rozwiązań, od Joomli! zaczynając, a na Drupalu i Wordpressie kończąc. Warto jednak zastanowić się, czy nie lepiej stworzyć własne, skrojone na miarę rozwiązanie, idealnie dopasowane do potrzeb i możliwości. Zamiast przedzierać się przez zawiłą konfigurację, przygotowywać szablony i próbować pogodzić ze sobą wtyczki, być może lepiej tę energię spożytkować na napisanie własnego CMS-a?

Jeżeli zdecydujesz się na to, w niniejszej książce znajdziesz szczegółowy przewodnik, jak dokonać tego przy użyciu najpopularniejszych narzędzi: łącząc język PHP i bibliotekę jQuery. W trakcie lektury dowiesz się, jak zaprojektować jądro swojego nowego systemu, moduł zarządzania użytkownikami oraz własny mechanizm szablonów. Ponadto nauczysz się zarządzać treścią, tworzyć hierarchię stron oraz edytować je przy użyciu wygodnych narzędzi, takich jak CKeditor. Na koniec zbudujesz instalator swojego CMS-a oraz wzbogacisz go o obsługę wtyczek i widżetów. Książka ta jest pozycją obowiązkową dla każdego webmastera pragnącego stworzyć własny, unikatowy system zarządzania treścią.

Główne zagadnienia omówione w książce:

Zbuduj swój autorski system CMS, wykorzystując niezastąpiony duet PHP i jQuery!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: CMS Design Using PHP and jQuery Tłumaczenie: Łukasz Piwko ISBN: 978-83-246-3365-4 Copyright © Packt Publishing 2010. First published in the English language under the title: “CMS Design Using PHP and jQuery” Polish language edition published by Helion S.A. Copyright © 2011 All rights reserved All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means without permission in writing from the publisher, excerpt in the case of brief quotations embedded in critical articles or reviews. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/psycms.zip Materiały graficzne na okładce zostały wykorzystane za zgodą iStockPhoto Inc. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/psycms Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treĂci O autorze PodziÚkowania O recenzentach WstÚp Rozdziaï 1. Projekt jÈdra systemu CMS Sekcje prywatna i publiczna systemu CMS Front systemu CMS Panel administracji Wtyczki Pliki i bazy danych Struktura katalogów Struktura bazy danych Plik konfiguracyjny Witaj, Ăwiecie Konfiguracja Kontroler frontu Wczytywanie danych strony z bazy danych Podsumowanie Rozdziaï 2. ZarzÈdzanie uĝytkownikami Rodzaje uĝytkowników Role Tabele bazy danych 7 9 11 13 17 18 18 20 21 22 22 24 25 26 26 29 31 39 41 41 42 44 Spis treĞci Strona logowania do panelu administracyjnego Logowanie Wylogowywanie Odzyskiwanie hasïa ZarzÈdzanie uĝytkownikami Usuwanie uĝytkowników Tworzenie i modyfikowanie uĝytkowników Podsumowanie Rozdziaï 3. ZarzÈdzanie stronami — czÚĂÊ pierwsza Strony w systemie CMS WyĂwietlanie listy stron w panelu administracyjnym Widok hierarchii stron Aranĝacja hierarchii stron Administracja stronami Asynchroniczne wypeïnianie listy rodziców Podsumowanie Rozdziaï 4. ZarzÈdzanie stronami — czÚĂÊ druga Daty Zapisywanie stron Tworzenie stron najwyĝszego poziomu Tworzenie podstron Usuwanie stron Edycja tekstu sformatowanego przy uĝyciu narzÚdzia CKEditor ZarzÈdzanie plikami za pomocÈ narzÚdzia KFM Podsumowanie Rozdziaï 5. Szablony — czÚĂÊ pierwsza Motywy i szablony Struktura plików motywu Konfiguracja systemu Smarty Frontowe menu nawigacyjne Podsumowanie Rozdziaï 6. Szablony — czÚĂÊ druga Dodawanie jQuery do menu Przygotowanie menu Filament Group Integracja menu Ustawianie motywów w panelu administracyjnym Wybór szablonu strony w panelu administracyjnym Smarty w treĂci stron Podsumowanie 4 46 54 60 62 66 68 69 72 73 73 74 77 81 82 90 92 93 93 96 99 101 102 104 107 113 115 116 118 120 125 131 133 133 134 137 140 146 149 151 Rozdziaï 7. Wtyczki Co to sÈ wtyczki? Zdarzenia w systemie CMS Typy stron Sekcje w panelu administracyjnym Dodatki do wszystkich stron w panelu administracyjnym Przykïad konfiguracji wtyczki WïÈczanie wtyczek Obsïuga uaktualnieñ i tabel bazy danych Wïasne menu uĝytkownika w panelu administracyjnym Dodawanie zdarzeñ do systemu CMS Dodawanie zakïadek do panelu administracji Podsumowanie Rozdziaï 8. Wtyczka do tworzenia formularzy Jak to ma dziaïaÊ Definicja wtyczki Typy stron w panelu administracyjnym Dodawanie formularzy do panelu administracyjnego Definiowanie pól formularza WyĂwietlanie formularza na froncie Skrypt obsïugi wysyïania formularza Wysyïanie wiadomoĂci pocztÈ elektronicznÈ Zapisywanie danych formularza w bazie danych Eksport zapisanych danych Podsumowanie Rozdziaï 9. Wtyczka galerii obrazów Konfiguracja wtyczki Zakïadki w panelu administracyjnym Ustawienia poczÈtkowe Wysyïanie obrazów Obsïuga wysyïania plików Reguïa mod_rewrite Usuwanie obrazów Frontowy widok galerii Karta ustawieñ Galeria siatkowa Podsumowanie Rozdziaï 10. Okienka i widĝety — czÚĂÊ pierwsza Wtyczka do tworzenia okienek Rejestracja okienka Administracja okienkami WyĂwietlanie okienek Spis treĞci 153 153 154 155 155 156 156 158 162 165 172 178 184 185 185 186 188 191 197 202 207 209 211 212 214 215 216 217 218 220 222 223 224 225 229 232 236 237 238 240 242 243 5 Spis treĞci Tworzenie wtyczki fragmentów treĂci Wstawianie widĝetów do okienek WyĂwietlanie widĝetów PrzeciÈganie widĝetów do okienek Zapisywanie zawartoĂci okienka WyĂwietlanie okienek na froncie Podsumowanie Rozdziaï 11. Okienka i widĝety — czÚĂÊ druga Formularze do konfiguracji widĝetów Zapisywanie treĂci fragmentu Zmienianie nazw widĝetów WidocznoĂÊ nagïówków widĝetów WyïÈczanie widĝetów WyïÈczanie okienek Usuwanie okienek WidocznoĂÊ okienek na stronach — kod od strony administracyjnej WidocznoĂÊ okienek na stronach — kod od strony frontowej WidocznoĂÊ widĝetów na stronach Podsumowanie Rozdziaï 12. Budowa instalatora Instalacja maszyny wirtualnej Instalacja narzÚdzia WMware Player Instalacja maszyny wirtualnej Instalacja CMS-a w maszynie wirtualnej Tworzenie instalatora Zmiany w jÈdrze CMS-a Instalator Sprawdzanie, czego brakuje Dane konfiguracyjne Podsumowanie Skorowidz 246 247 248 249 252 255 257 259 259 265 267 268 269 271 273 274 278 279 281 283 284 284 284 287 290 290 291 292 296 302 303 6 3 ZarzÈdzanie stronami — czÚĂÊ pierwsza W tym rozdziale stworzymy formularz do zarzÈdzania stronami i zbudujemy system pozwa- lajÈcy przenosiÊ strony metodÈ przeciÈgania. Omówione zostanÈ nastÚpujÈce tematy: Q ¿Èdanie i generowanie stron Q WyĂwietlanie listy stron w panelu administracyjnym Q Administracja stronami System zarzÈdzania stronami zostanie ukoñczony dopiero w kolejnym rozdziale, w którym opiszÚ zapisywanie stron w bazie danych oraz dodam edytor tekstu i menedĝera plików. Strony w systemie CMS Zgodnie z tym, co napisaïem w rozdziale 1., strona to zasadniczo treĂÊ, która powinna zostaÊ wyĂwietlona w odpowiedzi na ĝÈdanie okreĂlonego adresu URL. W serwisach nieopartych na systemach CMS pojÚcie strony jest bardzo wyraěne, poniewaĝ kaĝdy adres URL zwraca konkretny plik HTML. Natomiast w systemie CMS strony sÈ gene- rowane dynamicznie i mogÈ byÊ wzbogacone o rozmaite wtyczki, rodzaje prezentacji zaleĝne od tego, czy uĝytkownik czegoĂ szuka, czy zastosowano opcjÚ podziaïu na podstrony, itd. Projektowanie systemów CMS przy uĪyciu PHP i jQuery W wiÚkszoĂci witryn internetowych stronÚ moĝna w uproszczeniu zdefiniowaÊ jako duĝy obszar treĂci poĂrodku okna przeglÈdarki. Czasami jednak trudno zaakceptowaÊ takÈ definicjÚ, gdyĝ to, co widaÊ na ekranie, moĝe w istocie byÊ skïadankÈ fragmentów treĂci z róĝnych miejsc serwisu. Problem tych róĝnic rozwiÈzujemy poprzez zastosowanie „typów” stron, z których kaĝdy moĝe byÊ zaprezentowany w inny sposób. WĂród typów stron moĝna wymieniÊ galerie, formularze, strony z wiadomoĂciami, wyniki wyszukiwania itd. W tym rozdziale pokaĝÚ, jak utworzyÊ najprostszy typ strony, o nazwie normalny. W panelu administracyjnym formularz sïuĝÈcy do tworzenia tego typu stron bÚdzie zawieraï duĝy obszar tekstowy na treĂÊ, która po zatwierdzeniu bÚdzie wyĂwietlana na stronie. Moĝna zastosowaÊ teĝ innÈ nazwÚ, takÈ jak np. „domyĂlny”, ale poniewaĝ z CMS-ów czÚsto korzystajÈ teĝ osoby niemajÈce wiedzy technicznej, lepiej zastosowaÊ sïowo, którego znaczenie jest raczej oczywiste. Niejednokrotnie klienci pytali mnie, co oznacza sïowo „default” (domyĂlny), natomiast sïowo „normal” (normalny) jeszcze nikogo nie dziwiïo. Jak zapewne pamiÚtasz, w rozdziale 1. napisaïem, co powinno wchodziÊ w skïad jÈdra systemu, a co naleĝaïoby udostÚpniÊ w postaci wtyczki. Kaĝdy system CMS powinien umoĝliwiaÊ tworzenie przynajmniej jednego najprostszego rodzaju stron. Dlatego typ normalny bÚdzie wbudowany w jÈdro, a nie udostÚpniany jako dodatek. WyĂwietlanie listy stron w panelu administracyjnym Zaczniemy od dodania odnoĂnika Strony do menu administracyjnego. W tym celu otwórz plik /ww.admin/header.php i dodaj do niego poniĝszy pogrubiony wiersz kodu: ul li a href= /ww.admin/pages.php Strony /a /li li a href= /ww.admin/users.php Uĝytkownicy /a /li Jeszcze jedno: po zalogowaniu do sekcji administracyjnej uĝytkownik powinien byÊ automa- tycznie przenoszony do sekcji zarzÈdzania stronami, gdyĝ wiÚkszoĂÊ czynnoĂci zwiÈzanych z zarzÈdzaniem systemem dotyczy wïaĂnie stron serwisu. W zwiÈzku z tym zmienimy zawartoĂÊ pliku /ww.admin/index.php, aby zawieraï ten sam kod, co plik /ww.admin/pages.php. Zamieñ zawartoĂÊ pliku /ww.admin/index.php na nastÚpujÈcy kod: ?php require pages.php ; Teraz zajmiemy siÚ budowÈ sekcji Strony. 74 Rozdziaá 3. • Zarządzanie stronami — czĊĞü pierwsza Zaczniemy od utworzenia pliku /ww.admin/pages.php: ?php require header.php ; echo h1 Pages /h1 ; // { ïaduje menu echo div class= left-menu ; require pages/menu.php ; echo /div ; // } // { ïaduje stronÚ gïównÈ echo div class= has-left-menu ; require pages/forms.php ; echo /div ; // } echo style type= text/css @import pages/css.css ; /style ; require footer.php ; ZwróÊ uwagÚ na specjalne komentarze, w które ujÈïem bloki kodu (poczÈtek bloku oznaczony jest znakami //{, a koniec znakami //}). Komentarze te dodaïem dlatego, gdyĝ niektóre edytory oferujÈ tzw. funkcjÚ zwijania, która pozwala zwijaÊ bloki kodu ujÚte w specjalne znaczniki, tak aby widoczny byï tylko pierwszy wiersz. Przykïadowo u mnie w edytorze Vim powyĝszy fragment kodu wyĂwietlony jest tak, jak widaÊ na rysunku: Zadaniem skryptu zapisanego w pliku pages.php jest wczytanie nagïówków, menu, formularza i stopki. W dalszej czÚĂci rozdziaïu jeszcze do niego wrócimy. Teraz utwórz katalog /ww.admin/pages, a w nim stwórz plik o nazwie /ww.admin/pages/forms.php: h2 TU B}DZIE FORMULARZ /h2 75 Projektowanie systemów CMS przy uĪyciu PHP i jQuery Moĝemy przejĂÊ do tworzenia menu strony. Utwórz plik /ww.admin/pages/menu.php o nastÚ- pujÈcej treĂci: ?php echo div id= pages-wrapper ; $rs=dbAll( select id,type,name,parent from pages order by ord,name ); $pages=array(); foreach($rs as $r){ if(!isset($pages[$r[ parent ]]))$pages[$r[ parent ]]=array(); $pages[$r[ parent ]][]=$r; } function show_pages($id,$pages){ if(!isset($pages[$id]))return; echo ul ; foreach($pages[$id] as $page){ echo li id= page_ .$page[ id ]. . a href= pages.php?id= .$page[ id ]. . ins nbsp; /ins .htmlspecialchars($page[ name ]) . /a ; show_pages($page[ id ],$pages); echo /li ; } echo /ul ; } show_pages(0,$pages); echo /div ; Skrypt ten generuje nieuporzÈdkowanÈ listÚ stron. ZwróÊ uwagÚ na uĝycie pola parent. W wiÚkszoĂci witryn strony sÈ rozmieszczone w strukturze hierarchicznej z relacjami typu „rodzic – dziecko”. Kaĝda strona jest „dzieckiem” jakiejĂ innej strony lub „korzenia” witryny. W polu parent zapisany jest identyfikator strony bÚdÈcej nadrzÚdnÈ wobec danej strony. StronÚ gïównÈ (tzn. tÚ, która zostanie wyĂwietlona po wpisaniu w przeglÈdarce adresu http://cms/ bez wskazania konkretnej strony) moĝna wyznaczyÊ na dwa sposoby. 1. TworzÈc w bazie danych jednÈ stronÚ z polem parent o wartoĂci 0, oznaczajÈcej, ĝe ta strona nie ma rodzica — to ta strona zostanie wyĂwietlona po wpisaniu w oknie przeglÈdarki adresu http://cms/. Wówczas wszystkie strony typu http://cms/nazwastrony bÚdÈ miaïy w polu parent identyfikator strony, która ma w tym polu wartoĂÊ 0. 2. TworzÈc wiele stron z polem parent o wartoĂci 0, z których kaĝda bÚdzie tzw. stronÈ najwyĝszego poziomu. Jedna z nich musiaïaby wówczas mieÊ specjalnÈ wartoĂÊ w polu special, wskazujÈcÈ, ĝe to jest strona gïówna. W takim przypadku strony typu http://cms/nazwastrony bÚdÈ miaïy rodzica 0, a strona http://cms/ moĝe byÊ przechowywana w dowolnym miejscu bazy danych. 76 Rozdziaá 3. • Zarządzanie stronami — czĊĞü pierwsza Pierwsze rozwiÈzanie ma jednÈ powaĝnÈ wadÚ: aby zmieniÊ stronÚ gïównÈ, trzeba przenieĂÊ bieĝÈcÈ stronÚ gïównÈ pod jakÈĂ innÈ stronÚ (albo jÈ usunÈÊ), a nastÚpnie przesunÈÊ wszystkie strony potomne bieĝÈcej strony gïównej tak, aby miaïy w polu parent identyfikator nowej strony gïównej. Moĝe to byÊ bardzo skomplikowane, jeĂli nowa strona gïówna ma juĝ jakieĂ pod- strony — zwïaszcza jeĂli nazwy niektórych siÚ powtarzajÈ. Drugie rozwiÈzanie jest o wiele lepsze, poniewaĝ pozwala na bezproblemowÈ zmianÚ strony gïównej. Teraz nasz serwis wyglÈda tak, jak widaÊ na poniĝszym rysunku (do budowy uĝyte zostaïy strony wprowadzone do bazy w rozdziale 1.). Widok hierarchii stron Zmodyfikujemy nieco bazÚ danych, aby moĝna byïo wyĂwietliÊ hierarchiÚ stron. W tym celu otwórz konsolÚ MySQL i zmieñ definicjÚ drugiej strony tak, aby w jej polu parent znajdowaï siÚ identyfikator strony gïównej: mysql select id,name,parent from pages; +----+-------------+--------+ | id | name | parent | +----+-------------+--------+ | 24 | Home | 0 | | 25 | Druga strona| 0 | +----+-------------+--------+ 2 rows in set (0.00 sec) mysql update pages set parent=24 where id=25; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 77 Projektowanie systemów CMS przy uĪyciu PHP i jQuery Po dokonaniu zmian odĂwieĝ stronÚ w przeglÈdarce: Jak widaÊ, wpis drugiej strony jest nieco wciÚty, gdyĝ jest ona potomkiem strony gïównej i w kodzie HTML znajduje siÚ w zagnieĝdĝonym elemencie ul. Widok ten moĝemy poprawiÊ. Istnieje wtyczka jQuery o nazwie jstree, która przetwarza drzewa stworzone przy uĝyciu elementów ul w interfejsy podobne do interfejsów menedĝerów plików. Ponadto pozwala ona na przeciÈganie wÚzïów drzewa i wiÈzanie zdarzeñ z klikniÚciami tych wÚzïów. Skorzystamy z tych funkcji póěniej, kiedy bÚdziemy pracowaÊ nad mechanizmem tworzenia i usuwania stron oraz zmiany hierarchii stron poprzez ich przeciÈganie. Utwórz w katalogu gïównym witryny folder o nazwie /j/. PrzypomnÚ, ĝe w rozdziale 1. zostaïa podjÚta decyzja, iĝ wszystkie nazwy katalogów w systemie, które sÈ dïuĝsze niĝ dwa znaki, bÚdÈ zawieraÊ kropkÚ. Powodem, dla którego katalog ten nazwaïem /j/ zamiast np. /ww.javascript/, jest maïa liczba znaków pozwalajÈca zaoszczÚdziÊ kilka bajtów transferu. To moĝe byÊ waĝne, jeĂli z serwisu bÚdÈ korzystaÊ uĝytkownicy dysponujÈcy ïÈczami o niskich parametrach, takich jakie sÈ np. w smartfonach. Skrócenie jednej nazwy moĝe na niewiele siÚ zda, ale jeĂli wyrobisz sobie nawyk stosowania takich krótkich nazw, to skumulowany efekt pozwoli zaoszczÚdziÊ sekundÚ lub dwie przy pobie- raniu stron. 78 Rozdziaá 3. • Zarządzanie stronami — czĊĞü pierwsza Jedna drobna optymalizacja nie ma znaczenia, ale poïÈczenie duĝej liczby takich optymalizacji to juĝ caïkiem co innego. W kaĝdym bÈdě razie tworzymy folder /j/ i pobieramy skrypt jstree ze strony http://jstree.com oraz wypakowujemy zawartoĂÊ archiwum tak, aby Ăcieĝka do pliku jquery.tree.js byïa nastÚpujÈca: /j/jquery.jstree/jquery.tree.js. Do budowy tego CMS-a uĝyta zostaïa wersja 0.9.9a skryptu. Teraz otwórz plik /ww.admin/pages/menu.php i dodaj do niego poniĝsze wiersze kodu zazna- czone pogrubieniem. script src= /j/jquery.jstree/jquery.tree.js /script script src= /ww.admin/pages/menu.js /script ?php NastÚpnie utwórz plik /ww.admin/pages/menu.js: $(function(){ $( #pages-wrapper ).tree(); }); Od razu na ekranie pojawi nam siÚ piÚkne drzewo reprezentujÈce hierarchiÚ stron serwisu, jak pokazano na poniĝszym rysunku: Nazwy stron moĝna przeciÈgaÊ w róĝne miejsca, które w czasie operacji sÈ zaznaczane specjal- nym symbolem, tak jak widaÊ na dwóch kolejnych zrzutach ekranu: 79 Projektowanie systemów CMS przy uĪyciu PHP i jQuery Zanim przejdziemy do rzeczywistej pracy nad stronami, dokonamy jeszcze jednej poprawki tego menu. Stworzymy przycisk pozwalajÈcy dodawaÊ strony najwyĝszego poziomu oraz zaimple- mentujemy funkcjÚ zapamiÚtywania zdarzeñ przeciÈgania stron, aby miaïy one trwaïy skutek. Otwórz plik /ww.admin/pages/menu.js i zmieñ jego zawartoĂÊ na nastÚpujÈcÈ: $(function(){ $( #pages-wrapper ).tree({ callback:{ onchange:function(node,tree){ document.location= pages.php?action=edit id= +node.id.replace(/.*_/, ); }, onmove:function(node){ var p=$.tree.focused().parent(node); var new_order=[],nodes=node.parentNode.childNodes; for(var i=0;i nodes.length;++i) new_order.push(nodes[i].id.replace(/.*_/, )); $.getJSON( /ww.admin/pages/move_page.php?id= +node.id.replace(/.*_/, )+ parent_id= +(p==-1?0:p[0].id.replace(/.*_/, )) + order= +new_order); } } }); var div=$( div i Prawy przycisk myszy wyĂwietla opcje /i br / br / /div ); $( button Dodaj stronÚ gïównÈ /button ) .click(pages_add_main_page) .appendTo(div); div.appendTo( #pages-wrapper ); }); function pages_add_main_page(){} Za pomocÈ tego kodu wzbogaciliĂmy drzewo stron o kilka funkcji. Po pierwsze, zostaïa dodana funkcja zwrotna onchange. KlikniÚcie wÚzïa drzewa (nazwy jednej ze stron) powoduje przekierowanie przeglÈdarki na stronÚ pages.php?edit= z identyfikatorem klikniÚtej strony na koñcu. Podczas tworzenia elementu ul reprezentujÈcego drzewo dla kaĝdego podelementu li zdefiniowaliĂmy identyfikator w taki sposób, ĝe nazwa strony o identyfikatorze 24 w bazie danych znajduje siÚ na stronie w elemencie li o identyfikatorze page_24. Zatem kiedy zostanie klikniÚty jeden z wÚzïów (element li), musimy tylko usunÈÊ czÚĂÊ page_ identyfikatora i reszty ïañcucha uĝyÊ do otwarcia strony pages.php. 80 Rozdziaá 3. • Zarządzanie stronami — czĊĞü pierwsza Po drugie, dodaliĂmy funkcjÚ zwrotnÈ o nazwie onmove. Jej wywoïanie nastÚpuje po zakoñczeniu operacji przeciÈgania elementu. Jej treĂÊ jest nieco bardziej skomplikowana niĝ poprzedniej. Pobiera identyfikator nowego rodzica i tworzy tablicÚ, w której zapisuje identyfikatory wszystkich bezpoĂrednich podstron. NastÚpnie wszystkie te dane wysyïa do skryptu /ww.admin/pages/move_page.php, który nieba- wem stworzymy. Na koñcu dodaliĂmy informacjÚ, ĝe klikniÚcie prawym przyciskiem myszy powoduje wyĂwie- tlenie dodatkowych opcji, którymi zajmiemy siÚ póěniej, oraz utworzyliĂmy przycisk do tworze- nia stron najwyĝszego poziomu, którego obsïugÈ równieĝ zajmiemy siÚ w dalszej czÚĂci tego rozdziaïu. Aby kod ten nie powodowaï bïÚdów, konieczne jest dodanie atrapy funkcji. Póěniej zastÈpimy jÈ prawdziwÈ definicjÈ. Aranĝacja hierarchii stron W tej chwili przeciÈgniÚcie strony w inne miejsce na drzewie powoduje wykonanie wywoïania Ajax do skryptu /ww.admin/pages/move_page.php i przekazanie do niego pewnych informacji. Oto zrzut ekranu (widoczne okienko dodatku Firebug), na którym widaÊ, jakie dane sÈ przesy- ïane podczas takiej operacji przeciÈgania: W tym wywoïaniu zostaïy przesïane nastÚpujÈce informacje: identyfikator strony 25, identyfi- kator nowego rodzica 0 oraz nowa kolejnoĂÊ stron, których rodzic ma identyfikator 0 (25,24). 81 Projektowanie systemów CMS przy uĪyciu PHP i jQuery Czas na napisanie skryptu /ww.admin/pages/move_page.php: ?php require ../admin_libs.php ; $id=(int)$_REQUEST[ id ]; $to=(int)$_REQUEST[ parent_id ]; $order=explode( , ,$_REQUEST[ order ]); dbQuery( update pages set parent= .$to. where id= .$id ); for($i=0;$i count($order);++$i){ $pid=(int)$order[$i]; dbQuery( update pages set ord=$i where id=$pid ); echo update pages set ord=$i where id=$pid\n ; } To proste! Ten skrypt zapisuje te informacje, które sÈ przesyïane w wywoïaniu Ajax. Administracja stronami Mamy juĝ listÚ stron serwisu. Czas na dodanie funkcji umoĝliwiajÈcych ich modyfikowanie. Kod formularza do tworzenia stron jest doĂÊ dïugi, dlatego bÚdÚ go pokazywaÊ i omawiaÊ po kawaïku. Otwórz plik /ww.admin/pages/forms.php i zastÈp jego zawartoĂÊ poniĝszym kodem: ?php if(isset($_REQUEST[ id ]))$id=(int)$_REQUEST[ id ]; else $id=0; if($id){ // sprawdzenie, czy strona o takim identyfikatorze istnieje $page=dbRow( SELECT * FROM pages WHERE id=$id ); if($page!==false){ $page_vars=json_decode($page[ vars ],true); $edit=true; } } if(!isset($edit)){ $parent=isset($_REQUEST[ parent ])? (int)$_REQUEST[ parent ]:0; $special=0; if(isset($_REQUEST[ hidden ]))$special+=2; $page=array( parent = $parent, type = 0 , body = , name = , title = , ord = 0, description = , id = 0, keywords = , special = $special, template = ); $page_vars=array(); $id=0; $edit=false; } 82 Rozdziaá 3. • Zarządzanie stronami — czĊĞü pierwsza Kod ten inicjuje dwie tablice: $page do przechowywania najwaĝniejszych informacji o stronie i page_vars na dane nienaleĝÈce do gïównej tabeli danych stron, np. informacje zapisane przez jakÈĂ wtyczkÚ. JeĂli w adresie URL zostanie wysïany identyfikator, to skrypt wczyta dane odpowiadajÈcej mu strony. Przykïadowo: jeĂli dodam do kodu wiersz var_dump($page);, a nastÚpnie wpiszÚ w przeglÈ- darce adres /ww.admin/pages.php?action=edit id=25 (taka strona znajduje siÚ w mojej bazie danych), to zobaczÚ nastÚpujÈcy wynik: Zostaïy wyĂwietlone wszystkie informacje o stronie, jakie znajdujÈ siÚ w tabeli bazy danych. Gdyby w adresie URL zostaï przekazany identyfikator 0 lub jakikolwiek inny, którego nie ma aktualnie w bazie danych, to tablica $page i tak zostaïaby zainicjowana, ale pustymi wartoĂciami. Poniewaĝ strony mogÈ byÊ bardzo skomplikowane, zwïaszcza gdy bÚdzie wiele ich rodzajów dodanych przez wtyczki, podzielimy formularz na kilka zakïadek. Formularz tworzenia stron normalnego typu bÚdzie siÚ skïadaï z dwóch zakïadek — opcji ogólnych i opcji zaawansowanych. Na pierwszej z wymienionych zakïadek znajdÈ siÚ czÚsto zmieniane informacje, czyli np. nazwa strony, treĂÊ strony itp. 83 Projektowanie systemów CMS przy uĪyciu PHP i jQuery Natomiast na zakïadce opcji zaawansowanych umieĂcimy rzadziej uĝywane elementy, takie jak znaczniki meta, szablony itp. Zastosujemy nazwÚ Zaawansowane dlatego, iĝ nazwa Rzadko uĝywane opcje byïaby zbyt dïuga, oraz dlatego, ĝe niektórzy administratorzy mogÈ nie wiedzieÊ, do czego sïuĝÈ niektóre z zawartych na tej karcie opcji. Dodajemy menu z zakïadkami do pliku /ww.admin/pages/forms.php: // { jeĂli strona jest niewidoczna w nawigacji, to ma zostaÊ wyĂwietlony stosowny komunikat if($page[ special ] 2) echo em UWAGA: ta strona jest aktualnie niewidoczna w nawigacji. Aby jÈ ´przywróciÊ do widoku, skorzystaj z opcji na karcie Zaawansowane. /em ; // } echo form id= pages_form method= post ; echo input type= hidden name= id value= ,$id, / , div class= tabs ul , li a href= #tabs-common-details Opcje ogólne /a /li , li a href= #tabs-advanced-options Zaawansowane /a /li ; // tu bÚdÈ zakïadki wtyczek echo /ul ; JeĂli dana strona nie jest widoczna w menu nawigacyjnym witryny, to nad tym formularzem bÚdzie wyĂwietlona odpowiednia informacja. Strona nie jest uwzglÚdniana w menu nawiga- cyjnym wówczas, gdy w polu special ma wartoĂÊ 2. Maski bitowe sÈ przydatne w sytuacjach, gdy mamy wartoĂci typu „tak” i „nie” i nie chcemy zajmowaÊ caïego pola w bazie danych na przechowywanie kaĝdej z nich. 84 Rozdziaá 3. • Zarządzanie stronami — czĊĞü pierwsza Dalej zaczyna siÚ kod generujÈcy formularz. ZwróÊ uwagÚ na brak parametru action. Mimo iĝ w specyfikacji W3C jÚzyka HTML 4.01 para- metr ten jest wymagany, to ĝadna przeglÈdarka nie wymusza jego stosowania. Kiedy go brak, to przeglÈdarki do przetwarzania danych z formularza stosujÈ domyĂlnie ten sam plik. To samo dotyczy elementu style, którego typ jest domyĂlnie ustawiany na text/css, i elementu script, którego typ jest domyĂlnie ustawiany na javascript. Za formularzem mamy menu zakïadek zbudowane na bazie elementu listy. W przedostatnim wierszu kodu znajduje siÚ komentarz informujÈcy o zakïadkach wtyczek. Kiedy w dalszej czÚĂci rozdziaïu zaczniemy zajmowaÊ siÚ wtyczkami, niektóre z nich mogÈ mieÊ na tyle duĝo opcji, ĝe trzeba bÚdzie je wydzieliÊ do osobnej karty. Zajmiemy siÚ tym póěniej. Teraz dodamy zakïadkÚ opcji ogólnych (pracujemy caïy czas na tym samym pliku): // { opcje ogólne echo div id= tabs-common-details table style= clear:right;width:100 ; tr ; // { nazwa echo th width= 5 nazwa /th td width= 23 input id= name name= name value= ,htmlspecialchars($page[ name ]), / /td ; // } // { tytuï echo th width= 10 tytuï /th td width= 23 input name= title value= ,htmlspecialchars($page[ title ]), / /td ; // } // { url echo th colspan= 2 ; if($edit){ $u= / .str_replace( , - ,$page[ name ]); echo a style= font-weight:bold;color:red href= ,$u, target= _blank PODGLkD /a ; } else echo nbsp; ; echo /th ; // } echo /tr tr ; // { typ echo th typ /th td select name= type option value= 0 normalna /option ; // tutaj wstaw typy dodane jako wtyczki echo /select /td ; // } // { rodzic 85 Projektowanie systemów CMS przy uĪyciu PHP i jQuery echo th rodzic /th td select name= parent ; if($page[ parent ]){ $parent=Page::getInstance($page[ parent ]); echo option value= ,$parent- id, ,htmlspecialchars($parent- name), ´ /option ; } else echo option value= 0 -- , brak , -- /option ; echo /select , \n\n , /td ; // } if(!isset($page[ associated_date ]) || !preg_match( /^[0-9]{4}-[0-9]{2}- ´[0-9]{2}$/ ,$page[ associated_date ]) || $page[ associated_date ]== ´ 0000-00-00 )$page[ associated_date ]=@date( Y-m-d ); echo th Data /th td input name= associated_date class= date-human ´value= ,$page[ associated_date ], / /td ; echo /tr ; // } // { dane dotyczÈce typu strony echo tr th treĂÊ /th td colspan= 5 ; echo textarea name= body ,htmlspecialchars($page[ body ]), /textarea ; echo /td /tr ; // } echo /table /div ; // } Ten skrypt wyĂwietla wartoĂci najczÚĂciej zmienianych pól tabeli bazy danych: Q name (nazwa) Q title (tytuï) Q type (typ) Q parent (rodzic) Q associated_date (data) Q body (treĂÊ) Kilkoma z nich jeszcze siÚ zajmiemy, kiedy skoñczymy z formularzem. A na razie naleĝy poczy- niÊ kilka uwag na temat formularza i zawartych w nim opcji: Q URL: podczas modyfikowania strony dobrze jest mieÊ jÈ wyĂwietlonÈ w innym oknie lub na innej karcie. Aby to umoĝliwiÊ, dodaliĂmy odnoĂnik do strony w widoku przeznaczonym dla uĝytkowników. Jego klikniÚcie powoduje otwarcie nowej karty lub nowego okna. Q Typ: domyĂlnie stronom nadawany jest typ normalny, który jak na razie jest jedynÈ opcjÈ do wyboru. Póěniej, kiedy dodamy wtyczki, tych moĝliwoĂci bÚdzie wiÚcej. Q Rodzic: to strona, w której znajduje siÚ aktualnie redagowana strona. WyĂwietlony jest tylko bieĝÈcy rodzic i nie ma ĝadnych dodatkowych opcji. Jest waĝny powód, aby tak byïo; stanie siÚ on jasny po zakoñczeniu pracy nad formularzem. 86 Rozdziaá 3. • Zarządzanie stronami — czĊĞü pierwsza Q Data: ze stronÈ zwiÈzanych jest kilka dat. WewnÚtrznie rejestrowane sÈ daty utworzenia i ostatniej modyfikacji (które mogÈ byÊ przydatne wtyczkom), ale czasami administrator chce okreĂliÊ datÚ strony. Sytuacja taka moĝe mieÊ miejsce np. wówczas, gdy strona stanowi czÚĂÊ systemu wiadomoĂci. Pole daty jeszcze rozbudujemy, gdy skoñczymy pracÚ nad formularzem. Q TreĂÊ: zawartoĂÊ, która bÚdzie wyĂwietlona na froncie strony. W tym polu naleĝy wpisywaÊ zwykïy kod HTML. OczywiĂcie przeciÚtny administrator niekoniecznie zna jÚzyk HTML, dlatego trzeba bÚdzie nad tym jeszcze trochÚ popracowaÊ. Tak teraz wyglÈda zawartoĂÊ pierwszej karty (na zrzucie widaÊ juĝ ukoñczone karty stworzone przy uĝyciu jQuery — jak to zrobiïem, dowiesz siÚ w dalszej czÚĂci rozdziaïu). Jak widaÊ, pole daty jest doĂÊ duĝe. Nie jest tak bez powodu, o czym przekonasz siÚ w nastÚp- nym rozdziale. Kod ěródïowy drugiej karty bÚdzie nieco krótszy. Dodaj poniĝszy kod do pliku /ww.admin/ pages/forms.php: // {opcje zaawansowane echo div id= tabs-advanced-options ; echo table tr td ; // { metadane echo h4 Metadane /h4 table ; echo tr th sïowa kluczowe /th td input name= keywords value= ,htmlspecialchars($page[ keywords ]), / /td /tr ; 87 Projektowanie systemów CMS przy uĪyciu PHP i jQuery echo tr th opis /th td input name= description value= ,htmlspecialchars($page[ description ]), / /td /tr ; // { szablon // odpowiedni kod zostanie dodany w nastÚpnym rozdziale // } echo /table ; // } echo /td td ; // { specjalne echo h4 Specjalne /h4 ; $specials=array( Jest stronÈ gïównÈ , Nie figuruje w nawigacji ); for($i=0;$i count($specials);++$i){ if($specials[$i]!= ){ echo input type= checkbox name= special[ ,$i, ] ; if($page[ special ] pow(2,$i))echo checked= checked ; echo / ,$specials[$i], br / ; } } // } // { inne echo h4 Inne /h4 ; echo table ; // { kolejnoĂÊ podstron echo tr th KolejnoĂÊ podstron /th td select name= page_ vars[order_of_sub_pages] ; $arr=array( Taka, jak w menu admin , Alfabetyczna , by associated date ); foreach($arr as $k= $v){ echo option value= ,$k, ; if(isset($page_vars[ order_of_sub_pages ]) $page_vars[ order_of_sub_pages ]==$k) echo selected= selected ; echo ,$v, /option ; } echo /select ; echo select name= page_vars[order_of_sub_pages_dir] option value= 0 RosnÈca (a-z, 0-9) /option ; echo option value= 1 ; if(isset($page_vars[ order_of_sub_pages_dir ]) $page_vars[ order_of_sub_pages_dir ]== 1 ) echo selected= selected ; echo MalejÈca (z-a, 9-0) /option /select /td /tr ; // } echo /table ; // } echo /td /tr /table /div ; // } 88 Rozdziaá 3. • Zarządzanie stronami — czĊĞü pierwsza Nie ma tu wiele do wyjaĂniania. Moĝna by byïo dodaÊ jeszcze kilka zaawansowanych opcji, które byïyby przydatne, gdyby system byï bardziej rozwiniÚty (dodane wtyczki, ukoñczony sys- tem szablonów i motywów itd.). Najpierw dodane zostaïy pola tekstowe na sïowa kluczowe i opis (elementy meta keywords i description). WiÚkszoĂÊ ludzi pozostawia je nietkniÚte i dlatego znalazïy siÚ na karcie Zaawansowane. Szablony i motywy zostanÈ dodane w nastÚpnym rozdziale, a na razie w ich zastÚpstwie w kodzie znajduje siÚ tylko komentarz informujÈcy o przyszïych planach. Dalej znajduje siÚ lista „specjalnych” cech. Na razie sÈ tylko dwie: pole wyboru pozwalajÈce oznaczyÊ stronÚ jako gïównÈ oraz pole umoĝliwiajÈce usuniÚcie strony z nawigacji. Na koñcu znajdujÈ siÚ dwie listy rozwijane sïuĝÈce do okreĂlania kolejnoĂci podstron bieĝÈcej strony w nawigacji frontowej. Moĝesz przykïadowo zechcieÊ posortowaÊ alfabetycznie listÚ auto- rów albo aby nowe elementy pojawiaïy siÚ w kolejnoĂci malejÈcej wedïug daty. NajczÚĂciej jednak stosuje siÚ tÚ samÈ kolejnoĂÊ, co w menu administracyjnym (moĝna jÈ zmieniÊ, prze- ciÈgajÈc nazwy stron w menu nawigacyjnym po lewej stronie). Czas na dokoñczenie formularza i dodanie kodu odpowiedzialnego za wyĂwietlanie zakïadek. Warto dodaÊ jeszcze jednÈ sekcjÚ do formularza — niektóre wtyczki mogÈ wymagaÊ dodawania wïasnych zakïadek, ale do tego wrócimy kiedy indziej. 89 Projektowanie systemów CMS przy uĪyciu PHP i jQuery Dodaj do pliku /ww.admin/pages/forms.php poniĝszy kod: echo /div input type= submit name= action value= , ($edit? Zapisz ustawienia : Wprowadě ustawienia ) , / /form ; echo script window.currentpageid= .$id. ; /script ; echo script src= /ww.admin/pages/pages.js /script ; Ponadto utwórz nastÚpujÈcy plik /ww.admin/pages/pages.js: $(function(){ $( .tabs ).tabs(); }); Zmienna window.currentpageid bÚdzie potrzebna w nastÚpnym podrozdziale. Podstawowa wersja formularza jest juĝ gotowa. Teraz zajmiemy siÚ rozszerzaniem funkcjonalnoĂci uprzednio wyróĝnionych pól. Asynchroniczne wypeïnianie listy rodziców W bardzo duĝych serwisach proces wczytywania formularza moĝe byÊ bardzo powolny z powodu dïugiej listy rozwijanej rodzic informujÈcej serwer, której strony potomkiem jest dana strona. JeĂli listÚ tÚ bÚdzie siÚ wypeïniaÊ podczas wczytywania formularza, to iloĂÊ kodu HTML do pobrania moĝe byÊ bardzo pokaěna. RozwiÈzanie tego problemu opracowaïem na potrzeby mojej poprzedniej ksiÈĝki (jQuery 1.3 with PHP). Zaimplementowaïem je w postaci wtyczki jQuery, której teraz uĝyjemy. Pobierz wtyczkÚ remoteselectoptions ze strony http://plugins.jquery.com/project/remoteselect- options i wypakuj jÈ do katalogu /j/. Wtyczka ta dziaïa nastÚpujÈco: przy wczytywaniu strony do listy rozwijanej pobierana jest tylko jedna opcja, a pozostaïe zostajÈ dobrane dopiero wtedy, gdy sÈ rzeczywiĂcie potrzebne, tzn. gdy zostanie klikniÚty element listy. Aby zmusiÊ jÈ do takiej wspóïpracy z polem rodzic, otwórz plik /ww.admin/pages/pages.js i zmieñ jego zawartoĂÊ nastÚpujÈco: $(function(){ $( .tabs ).tabs(); $( #pages_form select[name=parent] ).remoteselectoptions({ url: /ww.admin/pages/get_parents.php , other_GET_params:currentpageid }); }); 90 Rozdziaá 3. • Zarządzanie stronami — czĊĞü pierwsza Jako ĝe ta wtyczka moĝe byÊ przydatna w wielu miejscach panelu administracyjnego, dodamy jÈ do pliku /ww.admin/header.php (wyróĝniony fragment): script src= http://ajax.googleapis.com/ajax/libs /jqueryui/1.8.0/jquery-ui.min.js /script script src= /j/jquery.remoteselectoptions/jquery.remoteselectoptions.js ´ /script link rel= stylesheet href= http://ajax.googleapis.com/ajax /libs/jqueryui/1.8.0/themes/south-street/jquery-ui.css type= text/css / Z treĂci pliku pages.js wynika, ĝe do budowy listy nazw stron potrzebny jest jeszcze jeden plik — /ww.admin/pages/get_parents.php. Oto jego zawartoĂÊ: ?php require ../admin_libs.php ; function page_show_pagenames($i=0,$n=1,$s=0,$id=0){ $q=dbAll( select name,id from pages where parent= .$i. and id!= .$id. ´order by ord,name ); if(count($q) 1)return; foreach($q as $r){ if($r[ id ]!= ){ echo option value= .$r[ id ]. title= ´ .htmlspecialchars($r[ name ]). ; echo($s==$r[ id ])? selected= selected : ; for($j=0;$j $n;$j++)echo nbsp; ; $name=$r[ name ]; if(strlen($name) 20)$name=substr($name,0,17). ... ; echo htmlspecialchars($name). /option ; page_show_pagenames($r[ id ],$n+1,$s,$id); } } } $selected=isset($_REQUEST[ selected ]) ?$_REQUEST[ selected ]:0; $id=isset($_REQUEST[ other_GET_params ]) ?(int)$_REQUEST[ other_GET_params ]:-1; echo option value= 0 -- brak -- /option ; page_show_pagenames(0,0,$selected,$id); Wtyczka remoteselectoptions wysyïa do tej strony ĝÈdanie z dwoma parametrami: identyfika- torem aktualnie wybranego rodzica i identyfikatorem aktualnej strony. Powyĝszy skrypt tworzy listÚ opcji oraz uniemoĝliwia administratorowi wstawienie strony w niej samej ani w stronie, która znajduje siÚ niĝej od niej w hierarchii. Gdyby tak siÚ staïo, strona zniknÚïaby z wszystkich menu nawigacyjnych, takĝe w panelu administracyjnym. 91 Projektowanie systemów CMS przy uĪyciu PHP i jQuery W tej chwili oznacza to, ĝe jedyne dostÚpne opcje to albo brak (jeĂli strona jest najwyĝszego poziomu), albo Druga strona, tak jak w naszym przykïadzie. Aktualnie sÈ tylko dwie strony i oczywiĂcie nie moĝna umieĂciÊ strony Home pod stronÈ Home. WykonaliĂmy kawaï dobrej roboty, wiÚc moĝesz sobie zrobiÊ przerwÚ, aby nabraÊ siï na dokoñ- czenie mechanizmu tworzenia stron w nastÚpnym rozdziale. Podsumowanie W tym rozdziale zostaïy stworzone podstawy systemu zarzÈdzania stronami. UtworzyliĂmy formularz do zarzÈdzania nimi oraz za pomocÈ narzÚdzi jQuery zaimplementowaliĂmy prosty mechanizm zamiany stron miejscami i optymalizacji wyĂwietlania dïugich list opcji. W nastÚpnym rozdziale dokoñczymy sekcjÚ zarzÈdzania stronami i zbudujemy proste frontowe menu nawigacyjne, dziÚki któremu bÚdzie moĝna wchodziÊ na róĝne strony. 92 Skorowidz D daty, 93 dodawanie formularzy, 191 dodawanie wtyczki, 161 dodawanie zakïadek, 178 dodawanie zdarzeñ, 172 dyrektywa AllowOverride, 29 E edycja uĝytkownika, 69 edytor FCKeditor, 104 edytor tekstu sformatowanego, 104 eksport danych, 212 element .panel-opener, 259 element script , 54 element input typu hidden, 101 encje HTML, 150 F Firebug, 81 format JSON, 44 formularz Data, 87 do konfiguracji widĝetów, 259 do przypominania hasïa, 48 do zarzÈdzania stronami, 73 form.php, 70 logowania, 46, 54 Rodzic, 86 A administracja okienkami, 242 administracja stronami, 82 administrator, 47 adres ../news, 18 adres ../news?page=2, 18 adres 127.0.0.1, 27 adres e-mail jako nazwa uĝytkownika, 49 aktualizacja strony, 99 algorytm bcrypt, 45 SHA1, 45 MD5, 45 analiza skïadniowa, 25 B baza danych dla CMS, 20 biblioteka ImageMagick, 109 PDO, 67 reCAPTCHA, 52 jQuery UI, 54 C CKEditor, 105 CMS, 19 proces dziaïania, 19 sekcja prywatna, 20 sekcja publiczna, 18 Projektowanie systemów CMS przy uĪyciu PHP i jQuery formularz TreĂÊ, 87 Typ, 86 URL, 86 tworzenia stron normalnego typu, 83 Front CMS, 18 funkcja .tree(), 101 __autoload, 112 buildRightWidget(), 251 confirm(), 68 contentsnippet_show(), 256 dbAll(), 67 die(), 121 form_template_generate(), 204 formfieldsAddRow(), 200 getRelativeURL(), 129 htmlspecialchars(), 129 include(), 25 is_admin(), 47, 59 menu_build_fg(), 127, 128 menu_show_fg(), 126 onchange(), 80 onmove(), 81 outerHeight(), 135 outerWidth(), 135 page_comments_admin_page_tab(), 178 pages_setup_name(), 97 PANEL, 239 panel_selectkiddies(), 276 panels_init(), 245 panels_show(), 239, 255 require(), 25 Save(), 265 showWidgetForm(), 260 step2_verify(), 297 updateWidgets(), 253 widget_header_visibility(), 269 widget_rename(), 268 widget_toggle_disabled(), 269 funkcja automatycznego ïadowania, 36 funkcja do obsïugi przekierowañ, 55 funkcja zapamiÚtywania zdarzeñ, 80 funkcja zwijania, 75 G galeria siatkowa, 232 generator formularzy, 185 grupa, 42 304 hierarchia stron, 77, 81 H I identyfikator strony, 35 instalacja CMS-a w maszynie wirtualnej, 287 instalacja maszyny wirtualnej, 284 instalacja narzÚdzia WMware Player, 284 integracja menu, 137 jÈdro, 154 jÈdro CMS, 17, 290 jÚzyk PHP, 116 jQuery, 15, 50 jQuery UI, 15, 50 J K katalog .private, 25, 27 f, 109 j, 78 kfm, 112 ww.admin, 23, 46 ww.admin/pages, 75 ww.admin/themes, 141 ww.incs/, 52 ww.plugins/content-snippet, 246 ww.plugins/forms, 186 ww.plugins/forms/admin, 193 ww.plugins/image-gallery/admin, 217 trunk, 108 katalog gïówny, 24 katalog kompilacji, 121 katalog sieciowy, 23 klucz prywatny (Private Key), 52 klucz publiczny (Public Key), 52 klucz do API, 52 kod frontowy, 278 kolumna activation_key, 44 active, 44 associated_date, 33 body, 32, 239 cdate, 33 description, 33 disabled, 239 edate, 33 email, 44 extras, 44 groups, 44 id, 32, 44, 239 keywords, 33 name, 32, 239 ord, 33 parent, 33 password, 44 special, 33 template, 33 title, 33 type, 33 vars, 33 visibility, 239 konfiguracja, 26 konfiguracja okienka, 247 konfiguracja wtyczki, 156 konfiguracja wtyczki galerii obrazów, 216 konsola MySQL, 26 kontroler, 19 kontroler frontu, 29 L lista rodzic, 90 logowanie, 54 logowanie do narzÚdzia KFM, 111 M magiczne cudzysïowy, 31 maszyna wirtualna, 284 mechanizm uaktualnieñ, 163 menedĝer plików, 107 menu administracyjne, 74 menu Filament Group, 134 menu nawigacyjne, 125 menu strony, 76 menu uĝytkownika, 165 metoda .destroy(), 265 GET, 30 getInstance, 38 getInstanceByName, 38 getInstanceBySpecial, 38 POST, 30 Skorowidz moderacja komentarzy, 170 moduï mod_deflate, 31 moduï mod_rewrite, 23, 223 moduï pobierajÈcy dane, 19 motyw, 116 motyw Basic, 142 MVC, Model-View-Controller, 19 N narzÚdzie CKEditor, 104, 105 KFM, 107, 110 QEMU, 284 SuPHP, 109 TinyMCE, 105 VirtualBox, 284 Virtuozzo, 284 VMware, 284 Xen, 284 Nolte Tim, 11 O obiekt $PAGEDATA, 158 obiekt Page, 36 obsïuga serwera, 29 odnoĂnik uwierzytelniajÈcy, 63 odwoïanie do pliku, 23 odzyskiwanie hasïa, 62 okienko, 237, 240 P panel administracji, 20 parametr action, 54, 85, 96 page=2, 19 redirect, 54 pasek narzÚdzi, 107 PHP, 15 phpMyAdmin, 26 plik _default.html, 118, 125, 240 .htaccess, 24, 28 action.php, 69, 71 activate.php, 183 admin_libs.php, 47 admin.js, 95, 279 305 Projektowanie systemów CMS przy uĪyciu PHP i jQuery plik basics.php, 34, 67, 112, 143, 159 CentOS-5.6-i386-bin--DVD.iso, 285 config.php, 27, 111, 145, 165, 300 check-config.php, 298 comments.php, 170 common.php, 34, 126, 137 configuration.dist.php, 109 delete.php, 103, 183 disable.php, 162 enable.php, 161 footer.php, 60 form.php, 193 forms.php, 75, 82, 84, 147 gallery-type-ad.php, 227 get_parents.php, 91 get_types.php, 189 get-visibility.php, 275 header.php, 60, 91 httpd.conf, 27 index.php, 18, 24, 30, 34, 123, 137, 229, 256 index.html, 30 jquery.tree.js, 79 js.js, 259, 271, 273, 277, 292 list.php, 144, 160 login.css, 48 login-codes.php, 57 login-libs.php, 55 login.login.js, 50, 54 login.php, 47, 50, 56 logout.php, 61 menu.js, 79 menu.php, 76, 79, 170 move_page.php, 82 news, 18 page-tab.js, 181 page-tab.php, 178, 180 page.php, 34, 36, 149 pages.action.edit.php, 97 pages.php, 75, 96 password-reminder.php, 63 plugin.php, 156, 169, 186, 201, 238, 246 recaptcha.php, 52 remove-panel.php, 273 screenshot.png, 142 show.php, 174, 203, 226, 232 themes.php, 159 upgrade.php, 163, 187, 239 uploader.php, 222 users.php, 66, 159 306 plik konfiguracyjny, 25 plik w formacie wykonywalnym, 26 podmenu, 139 podmenu wielokolumnowe, 130 pola formularza, 197 pole Eksport, 197 email, 197 Odpowiedz, 197 pole bitowe, 98 proces logowania, 55 proces wczytywania formularza, 90 przechwytywanie bïÚdu 404, 39 R reguïa, 31 rekursywny obiekt JSON, 166 resetowanie hasïa, 62 rodzaje uĝytkowników, 41 rola, 42 _administrators, 43 _superadministrators, 43 rozszerzenie .html, 118 S serwis Google Content Delivery Network (CDN), 50 skórka, 115 skrypt get.php, 112 captcha, 53 do tworzenia i edytowania uĝytkowników, 72 Filament Group Menu, 134 logowania, 51 mod_rewrite, 34 obsïugi wysyïania formularza, 207 uwierzytelniajÈcy, 64 wylogowania, 61 sïowa kluczowe, 89 Smarty, 117, 239 instalacja, 121 konfiguracja, 120, 124 SQLite, 108 staïa CONFIG_FILE, 36 SCRIPTBASE, 36 THEME, 120 THEME_DIR, 120 strona, 73 administracyjna, 46 do zarzÈdzania uĝytkownikami, 66 gïówna, 76 home, 33 index.php, 46 login.php, 54 logowania, 46 wyboru motywów, 146 struktura bazy danych, 24 struktura katalogów, 22 struktura plików motywu, 118 superadministrator, 47 system logowania, 66 szablon, 116 _default, 148 do prezentacji treĂci serwisu, 115 Smarty, 116 strony, 115 T Verens Kae, 7 V W Skorowidz tworzenie stron najwyĝszego poziomu, 99 tworzenie uĝytkownika, 69 tworzenie wtyczki fragmentów treĂci, 246 typy stron, 155, 188 U uprawnienia „0777”, 110 usïuga Akismet, 176 ustawianie motywów, 140 ustawienia gïówne, 195 usuwanie komentarzy, 183 usuwanie obrazów, 224 usuwanie okienek, 273 usuwanie stron, 102 usuwanie uĝytkowników, 68 uwierzytelnianie uĝytkownika, 63 wczytywanie danych strony, 31, 34 WebMe, Website Management Engine, 18 wÚzeï, 80 widocznoĂÊ okienek, 274, 278 widocznoĂÊ widĝetów, 279 widĝet przeciÈganie widĝetów do okienek, 249 widocznoĂÊ nagïówków widĝetów, 268 wyïÈczanie widĝetów, 269 wyĂwietlanie widĝetów, 248 zapisywanie zawartoĂci okienka, 252 zmienianie nazw, 267 wïÈczanie biblioteki fg-menu, 168 wïÈczanie komentarzy, 183 wïÈczanie wtyczki, 158, 161 wskazanie domeny, 27 wtyczka, 21, 153 ad-gallery, 226 contextmenu, 101 datepicker, 94 do tworzenia formularzy, 185 do tworzenia okienek, 238 fg-menu, 137 Fragmenty, 246 galerii obrazów, 215 307 tabela tablica forms_fields, 188 forms_saved, 188 forms_saved_values, 188 groups, 24 pages, 24, 32 user, 24 user_accounts, 44 $custom_tabs, 179 $DBVARS, 159, 163 $gvars, 219 $page, 83 $plugin, 157, 163 $PLUGIN_TRIGGERS, 173 $PLUGINS, 160 admin, 157 frontend, 187 menu, 157 page_tab, 157 page_type, 187 page_vars, 83 triggers, 157 ww_widgets, 248 test captcha, 52 tworzenie instalatora, 290 tworzenie podstron, 101 Projektowanie systemów CMS przy uĪyciu PHP i jQuery zdarzenie, 22, 155 page-content-created, 155 mouseenter, 137 zmienna $_REQUEST, 56 $_SESSION[ userdata ], 61 $html, 180 $htmlurl, 171 $kfm_userfiles_address, 109 $METADATA, 117 $PAGECONTENT, 117 special, 97 userdata, 60 zmienne konfiguracyjne, 25 znak ? , 28 znak _, 43 znaki (!£$ ^ *?), 127 znaki {{...}}, 119 ¿ ĝÈdanie HTTP, 19 wtyczka jstree, 78, 101 Komentarze, 155, 164 Page Comments, 163 remoteselectoptions, 90, 91, 189 wylogowywanie, 60 wyïÈczanie komentarzy, 183 wyïÈczanie okienek, 271 wysyïanie wiadomoĂci, 209 wyĂwietlanie listy stron, 74 wyĂwietlanie okienek, 243 wyĂwietlanie strony, 34 wyĂwietlenie formularza, 202 wyzwalacz finish, 155 wyzwalacz start, 155 wyzwalacz (trigger), 22 Z Zabin Paul, 11 zakïadki, 217 zamykanie menu, 136 zapisywanie danych, 211 zapisywanie komentarzy w bazie danych, 176 zarzÈdzanie uĝytkownikami, 41 308
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Projektowanie systemów CMS przy użyciu PHP i jQuery
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: