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:00defc0nwitam wszystkich na drugim wykladzie poswieconym skryptowi Simple Machines Forum
21:01defc0nwszyscy mnie znaja w sieci pod pseudonimem defc0n
21:03defc0njestem administratorem serwisu smf.pl
defc0nlag ;p
defc0ndobra
defc0nna poczatku chcialem przedstawic pare newsow
defc0nod naszego ostatniego spotkania minelo troszke czasu i duzo zmian
defc0nSMF 1.1 RC3 zostalo wydane 19 sierpnia
21:04defc0nwprowadzono w nim duzo zmian
defc0nm.in.
defc0nobsluga utf8
defc0ninformacje AJAX
defc0npoprawiona obsluga watkow
21:05defc0npoprawione laczenie smf z innymi skryptami czyli tzw. bridge
defc0njednak to bylo kiedys
defc0nalbowiem 2 grudnia zostala wydana finalna wersja 1.1
defc0njest ona calkowicie stablina
21:06defc0nzmiany, jakie wprowadzono to m.in
defc0ndodana opcja ograniczania ilosci wysylanych prywatnych wiadomosci podczas godziny
defc0npoprawiono: bledy JS, zanikanie sesji, bledy index oraz obsluga utf8
21:07defc0nprzygotowujac ten wyklad, jednym z moich zamiarow bylo stworzenie listy funkcji smf
defc0njednak developerzy mnie ubiegli
21:08defc0nna oficjalnej stronie skryptu pojawil sie wlasnie taki dzial
21:09defc0nkolejna nowoscia jest webinstall.php
defc0nten prosty skrypt umozliwia nam instalacje jezykow i roznych paczek zaledwie po paru kliknieciach
21:10defc0nnapewno wiele osob, ktore mialy z tym problem, beda zadowolone pomyslem smf
defc0nmacie jakies pytania?
21:11krajew4'na pewno' sie pisze oddzielnie ;p
defc0nehh
defc0nszkoda czasu
defc0ndzis zajmiemy sie modyfikacja skryptu
21:12defc0npowiedzmy, ze komus chcemy postawic forum na naszym serwie
defc0nale dla bezpieczenstwa usuniemy pare funkcji
defc0nedycja styli
defc0nuzytkownicy smf _na pewno_ wiedza o co chodzi
21:13defc0ndla mniej wtajemniczonych powiem, ze smf umozliwia edycje plikow css i poszczegolnych *template
defc0njednak nazwa edytowanego pliku znajduje sie w adresie url
21:14defc0nmozemy to wykorzystac zmieniajac sciezke na ../../index.php i podmienimy glowny plik forum
defc0njest to swietna okazja do 'hackedu' :P
defc0naby uniknac takich klopotow zmienimy plik Sources/Themes.php
21:15defc0nznajdzmy funkcje EditTheme() i zamienmy jej nazwe na EditTheme_()
defc0nmam ignore na rozne akcje, wiec jak cos ktos bedzie robic psikusy, to dajcie mi znac
21:16defc0nteraz dodajmy:
defc0nfunction EditTheme()
defc0n{ global $scripturl;
defc0nheader('Location: ' . $scripturl . '?action=admin');
defc0n}
21:17defc0njesli ktos wejdzie w edycje, to od razu go wywali do panelu admina (strona glowna)
defc0nkazdy z nas moze dodac sobie do paczki stylu jakis fajny skrypcik podmieniajacy strony
defc0nalbo obsluge ftp
21:18defc0ndlatego podobnie zrobimy z ThemeInstall
defc0nnazwe funkcji zmieniamy na ThemeInstall_()
defc0ni dodajemy
defc0nfunction ThemeInstall()
defc0n{ global $scripturl;
defc0nheader('Location: ' . $scripturl . '?action=admin');
defc0n}
21:19defc0nto samo z instalacja modow
defc0notworzmy plik Sources/Packages.php
defc0npostepujemy podobnie jak poprzednio
defc0nPackages() zmieniamy na Packages_()
defc0ni dodajemy
defc0nfunction Packages()
defc0n{ global $scripturl;
defc0nheader('Location: ' . $scripturl . '?action=admin');
defc0n}
21:20defc0nostatnia rzecza jest backup bazy
defc0nniekiedy hostingi pozwalaja nam miec tylko jedna baze
defc0ndlatego niektorzy zmieniaja same prefixy
defc0nfunkcja robiaca backup znajduje sie w Sources/DumpDatabase.php
21:21defc0nDumpDatabase2() zmieniamy na DumpDatabase2_() i dodajemy:
defc0nfunction DumpDatabase2()
defc0n{ global $scripturl;
defc0nheader('Location: ' . $scripturl . '?action=admin');
defc0n}
defc0nsa to juz wszystkie funkcje, ktore wprowadzaja jakies zagrozenie
defc0npo takim zmodyfikowaniu skryptu nie mamy zadnych errorow, tylko przekierowania
21:22defc0nzadna osoba nie zrobi nam psikusa
defc0njesli komus nie chce sie zmieniac tych plikow moze sciagnac paczke, ktora przygotowalem:
defc0nhttp://nekromanta.pl/~defcon/smf/wyklad_forum.rar
defc0npytania?
21:23TBHpytania sa chyba zbędne :)
Spamtez tak uwazam.
prawiczekmam pytanie
21:24defc0nmam ignore, wiec mowcie jak cos nie gra na kanale
prawiczekkto odpowiada na pytania?
defc0nprawiczek: ?
defc0nja
prawiczekjest taka sprawa
prawiczekdasz rade odpowiedziec?
krajew4..
prawiczekbo ja mam kolezanke
SZKOD[nick]prawiczek: znikaj stąd
prawiczeki niewiem
21:25SZKOD[nick]sio
fr3m3nkb!
prawiczeki niewiem w KTORA DZIURE WKLADAC
prawiczek:D
krajew4omg ...
defc0nspook
defc0nto moze wrocimy do smf
21:26defc0nkolejnym punktem dzisiejszego wykladu jest integracja
defc0nostatnio byla juz mowa o tym, ale z powodu wielu pytan
defc0npostanowilem poszerzyc ten temat
defc0nostatnio na topie jest tworzenie cmsow
21:27defc0nchcialbym pokazac jak dzieki smf mozemy sie do tego zabrac
defc0njednak czemu akurat integrowac, a nie lepiej stworzyc samemu wszystko od 0?
21:28defc0njesli ktos ma juz forum
defc0nto po co komu rejestracja w dwoch miejscach
defc0nto samo z logowaniem
21:29defc0ndzieki integracji mozemy zrobic dzialu dla odpowiednich grup
defc0nsprawdzac ich prawa
defc0na najwiekszym plusem tego dla coderow jest czas...
defc0nwezmy sie do pracy
defc0nnasza strona bedzie sie skladac z jednego pliku: index.php
21:30defc0nwynik naszej pracy to: http://smf.damnedangels.net/
defc0naby nie tracic czasu na wykladzie przygotowalem wczesniej szablon
defc0n// jesli chodzi o ta tematyke, polecam wyklad unknowa ;)
21:31defc0ncala zabawa z integracja jest banalna
defc0nnasz plik zaczynamy od
defc0n<?php
defc0nrequire('sciezka_do_forum/SSI.php');
defc0nmusimy sie teraz zastanowic nad tym co chcemy miec na stronie
defc0npodstawa jest logowanie
21:32defc0ndo tego sluzy funkcja
defc0nssi_logout()
defc0noraz
defc0nssi_login
21:33defc0njednak musimy sprawdzic czy user jest zalogowany
defc0nskorzystamy z tablicy $context
defc0nif ($context['user']['is_logged']){
defc0nssi_logout('http://smf.damnedangels.net/');
defc0n} else {
defc0nssi_login('http://smf.damnedangels.net/');
defc0n}
21:34defc0njako argument funkcji jest podany adres, do ktorego zostaniemy przekierowani
defc0nwyglad danej funkcji znajduje sie w pliku SSI.php
defc0nmozemy go dowolnie edytowac
21:35defc0nproponuje najpierw zrobic backup, bo czasem moze cos nie wyjsc :)
21:36defc0nfajna rzecza bylby podglad ostatnich tematow
defc0n<?php
defc0nssi_recentTopics();
defc0n?>
21:37defc0ndefaultowo wyswietlane jst 8 ostatnich tematow
defc0nczyli np.
defc0nssi_recentTopics(6);
defc0nwyswietli nam 6 tematow
defc0njesli oczywiscie tyle istnieje na naszym forum ;)
21:38defc0nmozemy umieszczac rowniez rzeczy dostepne tylko dla admina
defc0nif ($context['allow_admin']){
21:39defc0necho 'hello master';
defc0n}
defc0nrozne panele dodawania newsow, artow etc bedziemy umieszczac wlasnie w takim bloku 'if'
21:40defc0npodstawa kazdego cmsa sa newsy
defc0nproblem jednak jest przy ich dodawaniu, edycji, usuwaniu
defc0ntworzeniu komentarzy
defc0nemotikon
21:41defc0nprzy takich problemach, zamiast robic dodtkowe funkcje, mozemy skorzystac z smf
defc0nsluzy do tego
defc0nssi_boardNews();
defc0ndzieki temu sa wyswietlane wszystkie pierwsze posty tematow z danego dzialu
defc0nssi_boardNews(1);
defc0n1 to id dzialu
21:42defc0nnasza strona bedzie wyswietlac wszystkie emotikony, a takze rozne efekty i bbcode
21:43defc0njesli chodzi o prawa, niektorzy chca stworzyc swoj download dla osob zalogowanych
defc0naby uzyskac wieksza ilosc userow
defc0nna stronie, do ktorej przedtem dalem adres uzylem:
defc0necho 'Witaj ';
defc0nif ($context['user']['is_logged']){
defc0necho $context['user']['name'];
defc0n}else{
defc0necho 'przybyszu ';
defc0n}
21:44defc0npodsumowujac
defc0nprzy integracji pamietamy o require
defc0nkorzystamy z tablicy $context
21:45defc0noraz funkcji SSI
defc0nzrobilem dla was ich spis w 'Dodatku A'
defc0nhttp://smf.damnedangels.net/DodatekA.txt
defc0npytania?
21:46defc0nchyba nie :PP
darkjamessmf ma jakies rcs?
krajew4;]
TBHchyba nie ;)
eltrialek:D
darkjamessvn / cvs/ git/ inne?
darkjameseltrialek, spadaj.
fdj:D
eltrialek:D
21:47eltrialekdarkjames
defc0ndarkjames: bue
defc0nnie
eltrialek#hackpl ??
defc0nchcialbym teraz pokazac jak latwo mozna dodawac panele do administracji
defc0na dokladniej do rubryki 'opcje forum'
21:48defc0nwyedytujmy plik ModSettings.php
defc0nna poczatku dodamy akcje do tablicy $subActions
21:49defc0nelemet 'wyklady' pokazuje, ktora funkcje skrypt bedzie musial uzyc
21:50defc0npotem 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:51defc0n// troche zle sie wkleja text :P
defc0nnastepne w funkcji ModifyFeatureSettings2() znow dodajemy akcje do $subActions
defc0n'wyklady' => 'Wyklady',
21:52defc0nteraz najwazniejsza czesc
defc0nfunkcja Wyklady()
defc0nfunction Wyklady()
defc0n{
defc0nglobal $txt, $scripturl, $context, $settings, $sc;
defc0n$config_vars = array(
defc0narray('text', 'wyklady1'),
defc0narray('select', 'wyklady2', array('wesoly', 'zaniepokojony', 'smutny')),
defc0narray('check', 'wyklady3'),
defc0narray('int', 'wyklady4'),
21:53defc0n);
defc0n// Saving?
defc0nif (isset($_GET['save']))
defc0n{
defc0nsaveDBSettings($config_vars);
defc0nredirectexit('action=featuresettings;sa=wyklady');
defc0n}
defc0n$context['post_url'] = $scripturl . '?action=featuresettings2;save;sa=wyklady';
defc0n$context['settings_title'] = $txt['wyklady'];
defc0nprepareDBSettingContext($config_vars);
defc0n}
21:54defc0ntablica $config_vars zawiera wszystkie pola
defc0nsa to odpowiedniki elementom formularzy HTML
defc0nczyli inputy :)
21:55defc0njedynie 'int' to <input type="text"...> dla samych liczb
defc0nreszta wiadomo...
defc0nwracajac do funkcji Wyklady(), pierwszy argument to typ
21:56defc0ndrugi zmienna opisujaca pole
defc0na dalej sa dodatkowe pola, jak rodzaje select itd.
defc0npo ustawieniu tablicy, dane sa zapisywane i nastepuje odswiezenie strony
21:57defc0nto byl taki krotki opis :P
defc0nostatnia 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:58defc0n$txt['wyklady3'] = 'SMF rox?';
defc0n$txt['wyklady4'] = 'Jak oceniasz ten skrypt?';
defc0nnasz nowy panel bedzie dostepny pod adresem:
defc0nhttp://host/index.php?action=featuresettings;sa=wyklady
defc0nteraz mozemy dodac na nasza strone glowna:
defc0necho 'Skrypt SMF oceniam na... ' . $modSettings['wyklady4'];
21:59defc0njak widzimy $modSettings przechowuje wszystkie nasze dane z paneli
defc0njest to tylko przyklad, jak mozna sie bawic tymi rzeczami
defc0npytania?:P
alftoja mam jedno
22:00defc0nslucham
alftomozesz opisac, jak zrobic, zeby po zalogowaniu sie na tej naszes stronie zintegrowanej z smf
alftopo zalogoeaniu sie otwierala sie ta strona a nie forum
defc0ntzn. aktualna strona?
alftotak
defc0ntak
22:01zbigniew48chodzi zeby nie przekierowywalo na forum
alftotak
zbigniew48bo domyslnie tak robi :P
defc0nzbigniew48: popatrz na moj przyklad
defc0nprzekierowuje na strone glowna
defc0nalfto pyta o strone, ktora wlasnie przeglada
defc0nznajde zmienna
zbigniew48aha, to mi sie z phpBB pomylilo. Tam tak sie robi ;P
defc0n;)
22:02defc0nalfto: powinno dzialac
defc0nssi_login($_SESSION['login_url']);
defc0nlub
defc0nssi_login($_SESSION['old_url']);
alftooke sproboje :D
defc0nraczej to pierwsze ;)
defc0nto ja lece dalej
zbigniew48odbiegne 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:03defc0nhehe :P
defc0nzbigniew48: niedlugo bedzie cos ciekawego...
defc0nale musicie poczekac do lutego :x
defc0n;P
defc0nteraz cos o dostepnych modyfikacjach :)
defc0nwielu userow pyta o funkcje smf, ktore sa dostepne w innych skryptach
22:04defc0nchcialbym pare z nich opisac
defc0nKarma Description Mod
defc0numozliwia on zmienianie tzw. 'karmy' dodajac do niej opis. do tego jest wiele innych pomocnych opcji
defc0nCustom Profile Field
defc0ndzieki tej modyfikacji mozemy dodawac nowe pola w profilach
defc0nAd Management mod
22:05defc0ndodawanie reklam :)
defc0nJabber Field
defc0nchyba wszyscy wiedza o co chodzi - pole jabbera w profilu
defc0nGeSHiSmf
defc0nbardzo wazna modyfikacja dla coderow (moja ulubiona :P)
defc0ndzieki niej mozmy kolorowac skladnie w roznych jezykach
defc0ndo wyboru jest az okolo 50 podswietlen
22:06defc0nGroup Moderators
22:08defc0npozwala dodwac osoby, ktore maja prawo modyfikowac dana grupe
defc0nUser Agent Mod
defc0npokazuje rodzaj systemu i przegladarki
defc0nGroup List
defc0nlegenda grup na spodzie forum - defaultowa opcja phpbb
22:09defc0ni na koniec
defc0ncos innego :0
defc0n:)
defc0nSMF Mod Creator
defc0nczyli narzedzie do tworzenia modyfikacji
defc0npytania?
alftojes :D
22:10alftoa zeby kolo postow, np moderator mial kolorowego nicka
defc0ntez jest taka modyfikacja
defc0nale chyba nie update'uja jej
defc0npo wykladzie postaram sie wyjasnic jak to zrobic ;)
alftook
22:11defc0nhttp://mods.simplemachines.org/index.php?mod=100
defc0nCompatible With:1.0 RC2, 1.0, 1.0.1
defc0n:)
darkjamessmf zmienia swoje api? czy po wydaniu 1.0 api jest stabilne?
defc0n*1.1
defc0njest lista funkcji
22:12vrednya ja mam pytanie co do tematow na tym kanale...
defc0nalfto:
defc0nhttp://mods.simplemachines.org/index.php?mod=111
defc0ntego mozesz uzyc
defc0nvredny: ?
vrednyczy sa one z gory zalozone, gdzies spisany, czy losowe..?
zbigniew48smf uzywa teraz sha1 czy md5+sald?
alftothx
defc0nvredny: wykladowcy sie zglaszaja
22:13vrednyyhy... dzieki ;-)
defc0nzbigniew48: md5
defc0na wlasciwie to i to :P
defc0nspojrz w Sources/Register.php :)
defc0nsha1(sha1(strtolower($regOptions['username']) . $regOptions['password'])
zbigniew48xD
22:14defc0nmd5 jest uzywane do sesji
defc0njeszcze jakies pytania?
22:15defc0nok
defc0nto juz wszystko, co na dzis przygotowalem
cahe:-)
cahenajs
defc0nna koniec chcialbym otworzyc dla was forum
defc0nhttp://smf.damnedangels.net/forum/
defc0nmozecie testowac SMF 1.1
defc0nno i jeszcze chcialem podziekowac jednej wyjatkowej osobie
22:16defc0nmysle, ze ona wie o kogo chodzi :))
cahea nie trzeba ;-)
defc0nHave fun && have a nice code :P