| | Temat wykladu: |
| | Webmastering: Simple Machines Forum - zaawansowane modyfikowanie skryptu (by defc0n, 2006-12-10) @ wyklady.net |
| | Komentarze: http://forum.wyklady.net/index.php?topic=89 |
21:00 | defc0n | witam wszystkich na drugim wykladzie poswieconym skryptowi Simple Machines Forum |
21:01 | defc0n | wszyscy mnie znaja w sieci pod pseudonimem defc0n |
21:03 | defc0n | jestem administratorem serwisu smf.pl |
| defc0n | lag ;p |
| defc0n | dobra |
| defc0n | na poczatku chcialem przedstawic pare newsow |
| defc0n | od naszego ostatniego spotkania minelo troszke czasu i duzo zmian |
| defc0n | SMF 1.1 RC3 zostalo wydane 19 sierpnia |
21:04 | defc0n | wprowadzono w nim duzo zmian |
| defc0n | m.in. |
| defc0n | obsluga utf8 |
| defc0n | informacje AJAX |
| defc0n | poprawiona obsluga watkow |
21:05 | defc0n | poprawione laczenie smf z innymi skryptami czyli tzw. bridge |
| defc0n | jednak to bylo kiedys |
| defc0n | albowiem 2 grudnia zostala wydana finalna wersja 1.1 |
| defc0n | jest ona calkowicie stablina |
21:06 | defc0n | zmiany, jakie wprowadzono to m.in |
| defc0n | dodana opcja ograniczania ilosci wysylanych prywatnych wiadomosci podczas godziny |
| defc0n | poprawiono: bledy JS, zanikanie sesji, bledy index oraz obsluga utf8 |
21:07 | defc0n | przygotowujac ten wyklad, jednym z moich zamiarow bylo stworzenie listy funkcji smf |
| defc0n | jednak developerzy mnie ubiegli |
21:08 | defc0n | na oficjalnej stronie skryptu pojawil sie wlasnie taki dzial |
21:09 | defc0n | kolejna nowoscia jest webinstall.php |
| defc0n | ten prosty skrypt umozliwia nam instalacje jezykow i roznych paczek zaledwie po paru kliknieciach |
21:10 | defc0n | napewno wiele osob, ktore mialy z tym problem, beda zadowolone pomyslem smf |
| defc0n | macie jakies pytania? |
21:11 | krajew4 | 'na pewno' sie pisze oddzielnie ;p |
| defc0n | ehh |
| defc0n | szkoda czasu |
| defc0n | dzis zajmiemy sie modyfikacja skryptu |
21:12 | defc0n | powiedzmy, ze komus chcemy postawic forum na naszym serwie |
| defc0n | ale dla bezpieczenstwa usuniemy pare funkcji |
| defc0n | edycja styli |
| defc0n | uzytkownicy smf _na pewno_ wiedza o co chodzi |
21:13 | defc0n | dla mniej wtajemniczonych powiem, ze smf umozliwia edycje plikow css i poszczegolnych *template |
| defc0n | jednak nazwa edytowanego pliku znajduje sie w adresie url |
21:14 | defc0n | mozemy to wykorzystac zmieniajac sciezke na ../../index.php i podmienimy glowny plik forum |
| defc0n | jest to swietna okazja do 'hackedu' :P |
| defc0n | aby uniknac takich klopotow zmienimy plik Sources/Themes.php |
21:15 | defc0n | znajdzmy funkcje EditTheme() i zamienmy jej nazwe na EditTheme_() |
| defc0n | mam ignore na rozne akcje, wiec jak cos ktos bedzie robic psikusy, to dajcie mi znac |
21:16 | defc0n | teraz dodajmy: |
| defc0n | function EditTheme() |
| defc0n | { global $scripturl; |
| defc0n | header('Location: ' . $scripturl . '?action=admin'); |
| defc0n | } |
21:17 | defc0n | jesli ktos wejdzie w edycje, to od razu go wywali do panelu admina (strona glowna) |
| defc0n | kazdy z nas moze dodac sobie do paczki stylu jakis fajny skrypcik podmieniajacy strony |
| defc0n | albo obsluge ftp |
21:18 | defc0n | dlatego podobnie zrobimy z ThemeInstall |
| defc0n | nazwe funkcji zmieniamy na ThemeInstall_() |
| defc0n | i dodajemy |
| defc0n | function ThemeInstall() |
| defc0n | { global $scripturl; |
| defc0n | header('Location: ' . $scripturl . '?action=admin'); |
| defc0n | } |
21:19 | defc0n | to samo z instalacja modow |
| defc0n | otworzmy plik Sources/Packages.php |
| defc0n | postepujemy podobnie jak poprzednio |
| defc0n | Packages() zmieniamy na Packages_() |
| defc0n | i dodajemy |
| defc0n | function Packages() |
| defc0n | { global $scripturl; |
| defc0n | header('Location: ' . $scripturl . '?action=admin'); |
| defc0n | } |
21:20 | defc0n | ostatnia rzecza jest backup bazy |
| defc0n | niekiedy hostingi pozwalaja nam miec tylko jedna baze |
| defc0n | dlatego niektorzy zmieniaja same prefixy |
| defc0n | funkcja robiaca backup znajduje sie w Sources/DumpDatabase.php |
21:21 | defc0n | DumpDatabase2() zmieniamy na DumpDatabase2_() i dodajemy: |
| defc0n | function DumpDatabase2() |
| defc0n | { global $scripturl; |
| defc0n | header('Location: ' . $scripturl . '?action=admin'); |
| defc0n | } |
| defc0n | sa to juz wszystkie funkcje, ktore wprowadzaja jakies zagrozenie |
| defc0n | po takim zmodyfikowaniu skryptu nie mamy zadnych errorow, tylko przekierowania |
21:22 | defc0n | zadna osoba nie zrobi nam psikusa |
| defc0n | jesli komus nie chce sie zmieniac tych plikow moze sciagnac paczke, ktora przygotowalem: |
| defc0n | http://nekromanta.pl/~defcon/smf/wyklad_forum.rar |
| defc0n | pytania? |
21:23 | TBH | pytania sa chyba zbędne :) |
| Spam | tez tak uwazam. |
| prawiczek | mam pytanie |
21:24 | defc0n | mam ignore, wiec mowcie jak cos nie gra na kanale |
| prawiczek | kto odpowiada na pytania? |
| defc0n | prawiczek: ? |
| defc0n | ja |
| prawiczek | jest taka sprawa |
| prawiczek | dasz rade odpowiedziec? |
| krajew4 | .. |
| prawiczek | bo ja mam kolezanke |
| SZKOD[nick] | prawiczek: znikaj stąd |
| prawiczek | i niewiem |
21:25 | SZKOD[nick] | sio |
| fr3m3n | kb! |
| prawiczek | i niewiem w KTORA DZIURE WKLADAC |
| prawiczek | :D |
| krajew4 | omg ... |
| defc0n | spook |
| defc0n | to moze wrocimy do smf |
21:26 | defc0n | kolejnym punktem dzisiejszego wykladu jest integracja |
| defc0n | ostatnio byla juz mowa o tym, ale z powodu wielu pytan |
| defc0n | postanowilem poszerzyc ten temat |
| defc0n | ostatnio na topie jest tworzenie cmsow |
21:27 | defc0n | chcialbym pokazac jak dzieki smf mozemy sie do tego zabrac |
| defc0n | jednak czemu akurat integrowac, a nie lepiej stworzyc samemu wszystko od 0? |
21:28 | defc0n | jesli ktos ma juz forum |
| defc0n | to po co komu rejestracja w dwoch miejscach |
| defc0n | to samo z logowaniem |
21:29 | defc0n | dzieki integracji mozemy zrobic dzialu dla odpowiednich grup |
| defc0n | sprawdzac ich prawa |
| defc0n | a najwiekszym plusem tego dla coderow jest czas... |
| defc0n | wezmy sie do pracy |
| defc0n | nasza strona bedzie sie skladac z jednego pliku: index.php |
21:30 | defc0n | wynik naszej pracy to: http://smf.damnedangels.net/ |
| defc0n | aby nie tracic czasu na wykladzie przygotowalem wczesniej szablon |
| defc0n | // jesli chodzi o ta tematyke, polecam wyklad unknowa ;) |
21:31 | defc0n | cala zabawa z integracja jest banalna |
| defc0n | nasz plik zaczynamy od |
| defc0n | <?php |
| defc0n | require('sciezka_do_forum/SSI.php'); |
| defc0n | musimy sie teraz zastanowic nad tym co chcemy miec na stronie |
| defc0n | podstawa jest logowanie |
21:32 | defc0n | do tego sluzy funkcja |
| defc0n | ssi_logout() |
| defc0n | oraz |
| defc0n | ssi_login |
21:33 | defc0n | jednak musimy sprawdzic czy user jest zalogowany |
| defc0n | skorzystamy z tablicy $context |
| defc0n | if ($context['user']['is_logged']){ |
| defc0n | ssi_logout('http://smf.damnedangels.net/'); |
| defc0n | } else { |
| defc0n | ssi_login('http://smf.damnedangels.net/'); |
| defc0n | } |
21:34 | defc0n | jako argument funkcji jest podany adres, do ktorego zostaniemy przekierowani |
| defc0n | wyglad danej funkcji znajduje sie w pliku SSI.php |
| defc0n | mozemy go dowolnie edytowac |
21:35 | defc0n | proponuje najpierw zrobic backup, bo czasem moze cos nie wyjsc :) |
21:36 | defc0n | fajna rzecza bylby podglad ostatnich tematow |
| defc0n | <?php |
| defc0n | ssi_recentTopics(); |
| defc0n | ?> |
21:37 | defc0n | defaultowo wyswietlane jst 8 ostatnich tematow |
| defc0n | czyli np. |
| defc0n | ssi_recentTopics(6); |
| defc0n | wyswietli nam 6 tematow |
| defc0n | jesli oczywiscie tyle istnieje na naszym forum ;) |
21:38 | defc0n | mozemy umieszczac rowniez rzeczy dostepne tylko dla admina |
| defc0n | if ($context['allow_admin']){ |
21:39 | defc0n | echo 'hello master'; |
| defc0n | } |
| defc0n | rozne panele dodawania newsow, artow etc bedziemy umieszczac wlasnie w takim bloku 'if' |
21:40 | defc0n | podstawa kazdego cmsa sa newsy |
| defc0n | problem jednak jest przy ich dodawaniu, edycji, usuwaniu |
| defc0n | tworzeniu komentarzy |
| defc0n | emotikon |
21:41 | defc0n | przy takich problemach, zamiast robic dodtkowe funkcje, mozemy skorzystac z smf |
| defc0n | sluzy do tego |
| defc0n | ssi_boardNews(); |
| defc0n | dzieki temu sa wyswietlane wszystkie pierwsze posty tematow z danego dzialu |
| defc0n | ssi_boardNews(1); |
| defc0n | 1 to id dzialu |
21:42 | defc0n | nasza strona bedzie wyswietlac wszystkie emotikony, a takze rozne efekty i bbcode |
21:43 | defc0n | jesli chodzi o prawa, niektorzy chca stworzyc swoj download dla osob zalogowanych |
| defc0n | aby uzyskac wieksza ilosc userow |
| defc0n | na stronie, do ktorej przedtem dalem adres uzylem: |
| defc0n | echo 'Witaj '; |
| defc0n | if ($context['user']['is_logged']){ |
| defc0n | echo $context['user']['name']; |
| defc0n | }else{ |
| defc0n | echo 'przybyszu '; |
| defc0n | } |
21:44 | defc0n | podsumowujac |
| defc0n | przy integracji pamietamy o require |
| defc0n | korzystamy z tablicy $context |
21:45 | defc0n | oraz funkcji SSI |
| defc0n | zrobilem dla was ich spis w 'Dodatku A' |
| defc0n | http://smf.damnedangels.net/DodatekA.txt |
| defc0n | pytania? |
21:46 | defc0n | chyba nie :PP |
| darkjames | smf ma jakies rcs? |
| krajew4 | ;] |
| TBH | chyba nie ;) |
| eltrialek | :D |
| darkjames | svn / cvs/ git/ inne? |
| darkjames | eltrialek, spadaj. |
| fdj | :D |
| eltrialek | :D |
21:47 | eltrialek | darkjames |
| defc0n | darkjames: bue |
| defc0n | nie |
| eltrialek | #hackpl ?? |
| defc0n | chcialbym teraz pokazac jak latwo mozna dodawac panele do administracji |
| defc0n | a dokladniej do rubryki 'opcje forum' |
21:48 | defc0n | wyedytujmy plik ModSettings.php |
| defc0n | na poczatku dodamy akcje do tablicy $subActions |
21:49 | defc0n | elemet 'wyklady' pokazuje, ktora funkcje skrypt bedzie musial uzyc |
21:50 | defc0n | potem ustawiamy informacje nt. zakladki w $context['admin_tabs'] |
| defc0n | 'wyklady' => array( 'title' => $txt['wyklady'], 'href' => $scripturl . '?action=featuresettings;sa=wyklady;sesc=' . $context['session_id'], 'is_last' => true, |
| defc0n | ), |
21:51 | defc0n | // troche zle sie wkleja text :P |
| defc0n | nastepne w funkcji ModifyFeatureSettings2() znow dodajemy akcje do $subActions |
| defc0n | 'wyklady' => 'Wyklady', |
21:52 | defc0n | teraz najwazniejsza czesc |
| defc0n | funkcja Wyklady() |
| defc0n | function Wyklady() |
| defc0n | { |
| defc0n | global $txt, $scripturl, $context, $settings, $sc; |
| defc0n | $config_vars = array( |
| defc0n | array('text', 'wyklady1'), |
| defc0n | array('select', 'wyklady2', array('wesoly', 'zaniepokojony', 'smutny')), |
| defc0n | array('check', 'wyklady3'), |
| defc0n | array('int', 'wyklady4'), |
21:53 | defc0n | ); |
| defc0n | // Saving? |
| defc0n | if (isset($_GET['save'])) |
| defc0n | { |
| defc0n | saveDBSettings($config_vars); |
| defc0n | redirectexit('action=featuresettings;sa=wyklady'); |
| defc0n | } |
| defc0n | $context['post_url'] = $scripturl . '?action=featuresettings2;save;sa=wyklady'; |
| defc0n | $context['settings_title'] = $txt['wyklady']; |
| defc0n | prepareDBSettingContext($config_vars); |
| defc0n | } |
21:54 | defc0n | tablica $config_vars zawiera wszystkie pola |
| defc0n | sa to odpowiedniki elementom formularzy HTML |
| defc0n | czyli inputy :) |
21:55 | defc0n | jedynie 'int' to <input type="text"...> dla samych liczb |
| defc0n | reszta wiadomo... |
| defc0n | wracajac do funkcji Wyklady(), pierwszy argument to typ |
21:56 | defc0n | drugi zmienna opisujaca pole |
| defc0n | a dalej sa dodatkowe pola, jak rodzaje select itd. |
| defc0n | po ustawieniu tablicy, dane sa zapisywane i nastepuje odswiezenie strony |
21:57 | defc0n | to byl taki krotki opis :P |
| defc0n | ostatnia rzecz jaka nam zostala to dodanie tekstow do forum/Themes/default/language/ModSettings.polish.php |
| defc0n | $txt['wyklady'] = 'Sprawdz sie'; |
| defc0n | $txt['wyklady1'] = 'Co chcesz mi powiedziec?'; |
| defc0n | $txt['wyklady2'] = 'Moj dzisiejszy humor...'; |
21:58 | defc0n | $txt['wyklady3'] = 'SMF rox?'; |
| defc0n | $txt['wyklady4'] = 'Jak oceniasz ten skrypt?'; |
| defc0n | nasz nowy panel bedzie dostepny pod adresem: |
| defc0n | http://host/index.php?action=featuresettings;sa=wyklady |
| defc0n | teraz mozemy dodac na nasza strone glowna: |
| defc0n | echo 'Skrypt SMF oceniam na... ' . $modSettings['wyklady4']; |
21:59 | defc0n | jak widzimy $modSettings przechowuje wszystkie nasze dane z paneli |
| defc0n | jest to tylko przyklad, jak mozna sie bawic tymi rzeczami |
| defc0n | pytania?:P |
| alfto | ja mam jedno |
22:00 | defc0n | slucham |
| alfto | mozesz opisac, jak zrobic, zeby po zalogowaniu sie na tej naszes stronie zintegrowanej z smf |
| alfto | po zalogoeaniu sie otwierala sie ta strona a nie forum |
| defc0n | tzn. aktualna strona? |
| alfto | tak |
| defc0n | tak |
22:01 | zbigniew48 | chodzi zeby nie przekierowywalo na forum |
| alfto | tak |
| zbigniew48 | bo domyslnie tak robi :P |
| defc0n | zbigniew48: popatrz na moj przyklad |
| defc0n | przekierowuje na strone glowna |
| defc0n | alfto pyta o strone, ktora wlasnie przeglada |
| defc0n | znajde zmienna |
| zbigniew48 | aha, to mi sie z phpBB pomylilo. Tam tak sie robi ;P |
| defc0n | ;) |
22:02 | defc0n | alfto: powinno dzialac |
| defc0n | ssi_login($_SESSION['login_url']); |
| defc0n | lub |
| defc0n | ssi_login($_SESSION['old_url']); |
| alfto | oke sproboje :D |
| defc0n | raczej to pierwsze ;) |
| defc0n | to ja lece dalej |
| zbigniew48 | odbiegne od tematu. Wiesz co jest w najnowszym Linux+? Art o blogu w RoR. Wiesz co jest najciekawsze? Calkowicie wziete z videoartow na glownej stronie :P |
22:03 | defc0n | hehe :P |
| defc0n | zbigniew48: niedlugo bedzie cos ciekawego... |
| defc0n | ale musicie poczekac do lutego :x |
| defc0n | ;P |
| defc0n | teraz cos o dostepnych modyfikacjach :) |
| defc0n | wielu userow pyta o funkcje smf, ktore sa dostepne w innych skryptach |
22:04 | defc0n | chcialbym pare z nich opisac |
| defc0n | Karma Description Mod |
| defc0n | umozliwia on zmienianie tzw. 'karmy' dodajac do niej opis. do tego jest wiele innych pomocnych opcji |
| defc0n | Custom Profile Field |
| defc0n | dzieki tej modyfikacji mozemy dodawac nowe pola w profilach |
| defc0n | Ad Management mod |
22:05 | defc0n | dodawanie reklam :) |
| defc0n | Jabber Field |
| defc0n | chyba wszyscy wiedza o co chodzi - pole jabbera w profilu |
| defc0n | GeSHiSmf |
| defc0n | bardzo wazna modyfikacja dla coderow (moja ulubiona :P) |
| defc0n | dzieki niej mozmy kolorowac skladnie w roznych jezykach |
| defc0n | do wyboru jest az okolo 50 podswietlen |
22:06 | defc0n | Group Moderators |
22:08 | defc0n | pozwala dodwac osoby, ktore maja prawo modyfikowac dana grupe |
| defc0n | User Agent Mod |
| defc0n | pokazuje rodzaj systemu i przegladarki |
| defc0n | Group List |
| defc0n | legenda grup na spodzie forum - defaultowa opcja phpbb |
22:09 | defc0n | i na koniec |
| defc0n | cos innego :0 |
| defc0n | :) |
| defc0n | SMF Mod Creator |
| defc0n | czyli narzedzie do tworzenia modyfikacji |
| defc0n | pytania? |
| alfto | jes :D |
22:10 | alfto | a zeby kolo postow, np moderator mial kolorowego nicka |
| defc0n | tez jest taka modyfikacja |
| defc0n | ale chyba nie update'uja jej |
| defc0n | po wykladzie postaram sie wyjasnic jak to zrobic ;) |
| alfto | ok |
22:11 | defc0n | http://mods.simplemachines.org/index.php?mod=100 |
| defc0n | Compatible With:1.0 RC2, 1.0, 1.0.1 |
| defc0n | :) |
| darkjames | smf zmienia swoje api? czy po wydaniu 1.0 api jest stabilne? |
| defc0n | *1.1 |
| defc0n | jest lista funkcji |
22:12 | vredny | a ja mam pytanie co do tematow na tym kanale... |
| defc0n | alfto: |
| defc0n | http://mods.simplemachines.org/index.php?mod=111 |
| defc0n | tego mozesz uzyc |
| defc0n | vredny: ? |
| vredny | czy sa one z gory zalozone, gdzies spisany, czy losowe..? |
| zbigniew48 | smf uzywa teraz sha1 czy md5+sald? |
| alfto | thx |
| defc0n | vredny: wykladowcy sie zglaszaja |
22:13 | vredny | yhy... dzieki ;-) |
| defc0n | zbigniew48: md5 |
| defc0n | a wlasciwie to i to :P |
| defc0n | spojrz w Sources/Register.php :) |
| defc0n | sha1(sha1(strtolower($regOptions['username']) . $regOptions['password']) |
| zbigniew48 | xD |
22:14 | defc0n | md5 jest uzywane do sesji |
| defc0n | jeszcze jakies pytania? |
22:15 | defc0n | ok |
| defc0n | to juz wszystko, co na dzis przygotowalem |
| cahe | :-) |
| cahe | najs |
| defc0n | na koniec chcialbym otworzyc dla was forum |
| defc0n | http://smf.damnedangels.net/forum/ |
| defc0n | mozecie testowac SMF 1.1 |
| defc0n | no i jeszcze chcialem podziekowac jednej wyjatkowej osobie |
22:16 | defc0n | mysle, ze ona wie o kogo chodzi :)) |
| cahe | a nie trzeba ;-) |
| defc0n | Have fun && have a nice code :P |