Hi Nice and Warm

Wiesz, lubi? ludzi zakr?conych, mam tez s?abo?? do huncwotów hehe, ale Ty jeste? porz?dnie zakr?cony. Masz u mnie plucha, za swoj? determinacj? i niespo?yt? energi?. To oczywi?cie fajna zabawa z tym przerabianiem modów..
Jednak.. uwa?am autorytatywnie.. hmm co za j?zyk mamy, ?e tak? zabaw? mo?na uskutecznia?, w momencie, kiedy znasz dobrze silnik i semantyk? wersji 1.xx i wersji 2.xx oraz widzisz ró?nice pomi?dzy nimi. je?li przyjrza?by? si? silnikom ostatnich bet'ek, do zobaczy?by? ile by?o zmian konceptu i w ogóle zmian.
Zobacz wrzucasz, od moda to co ma si? wykona? na bazie danych, ok, za?ó?my ?e zostanie to tak przepisane, ?e "wejdzie" znaczy si? - zaskoczy i kod si? wykona. Jednak to do?? skomplikowany mod, który miesza w wielu plikach. W tych plikach s? odwo?ania do bazy, w tym wypadku wg. procedur wy??cznych dla smf 1.1.x. Nie chodzi tylko o to, ?e wywo?ania spowoduj? powa?ne b??dy, tylko chodzi o to, ?e taki mod musi zosta? Przemodelowany! W wersji 2.0 pewne "rzeczy" dzia?aj? w inny sposób, s? inne funkcje, tj. i uleg?o zmianie nazewnictwo i dosz?y nowe funkcje a z niektórych starych zrezygnowano. Osobi?cie mam ?al, ?e celowo, pewne pozytywne zmiany, jak lepsze rozwi?zania wielu kwestii, s? jakby tylko dla smf2.0, podczas, gdy cz??? z nich mog?aby by? z powodzeniem zaimplementowana w smf 1.1.x.
Najpierw trzeba bardzo dok?adnie zrozumie?, co ten mod wyprawia, w plikach i w bazie, co z czym i do czego, poniewa? pewne rozwi?zania z smf 1.1.x zosta?y zmienione, zrezygnowano z kilku, czy "wykonuj? inn? robot?". Nie mo?na tego zrobi? na tzw. "pa??" owszem mo?e zaskoczy?, co? tam zadzia?a?, ale tylko dok?adne testy, wiedza gdzie co ma pój?? i dlaczego, mo?e pozwala? na przekszta?cenie / przemodelowanie tego moda, ?eby by? kompatybilny z smf 2.0.
Pisz? Ci to wszystko, ?eby zaoszcz?dzi? Ci czasem niepotrzebnej walki z wiatrakami. Przemy?l to co napisa?em, zanim zabierzesz si? za d?ubanko w kodzie.
Najpierw to przemy?l, sprawd? gdzie co idzie, zainstaluj na smf 1.1.11 zobacz zmiany w plikach, zobacz o ile si? zwi?ksza ilo?? odwo?a? do bazy, bo to te? wa?ne i niepozorny modzio mo?e by? niez?? obci?gw? dla serva..
Ten kod, od instalki, który poda?e?, to nie wszystko, np. ./Sources/Register.php
Zobacz, to kod, który ma si? tam dopisa?:
// Invite MOD; looks like registration went ok, let's mark the invite key as used and who it was used by. if ($context['invite_key'] !== false) { db_query
("
UPDATE {$db_prefix}invites
SET ID_REGISTRATION = '$memberID'
WHERE inviteKey = '{$context['invite_key']}'
LIMIT 1", __FILE__, __LINE__); } elseif (!empty($_REQUEST['inviter']) && (int
)$_REQUEST['inviter'] !== 0) { db_query
("
INSERT INTO {$db_prefix}invites (ID_MEMBER, ID_REGISTRATION, inviteTime)
VALUES ('" . (int
)$_REQUEST['inviter'] . "', '$memberID', " . time() . ")
", __FILE__, __LINE__); } // Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.015s | speed:38.01 KB/s
Jak widac stary typ odwo?a? do bazy.
Teraz plik ./Sources/Memberlist.php
// Invite MOD. Not really a user search, just using the fine table and such that's already here for the invitees list... if (isset($_REQUEST['inviter']) && loadMemberData
(array($_REQUEST['inviter']))) { global $user_profile; if (($_REQUEST['inviter'] == $context['user']['id'] && !allowedTo
('invitees_own')) || !allowedTo
('invitees_any')) fatal_lang_error
('invitees_any', false); // Just to let the members know it's not really a search. $context['page_title'] = $txt['invited_by'] . ' ' . $user_profile[$_REQUEST['inviter']]['realName']; $context['sort_links'][1]['label'] = $context['page_title']; // We need this so it thinks it's a regular search and won't be all bitchy about variables... $context['old_search'] = ''; $context['old_search_value'] = ''; // Find the number of results. $request = db_query
("
SELECT COUNT(*)
FROM {$db_prefix}members AS mem
LEFT JOIN {$db_prefix}invites AS inv ON (inv.ID_REGISTRATION = mem.ID_MEMBER)
WHERE inv.ID_MEMBER = $_REQUEST[inviter]
AND is_activated = 1", __FILE__, __LINE__); list ($numResults) = mysql_fetch_row($request); mysql_free_result($request); $context['page_index'] = constructPageIndex
($scripturl . '?action=mlist;sa=search;inviter=' . $_GET['inviter'], $_REQUEST['start'], $numResults, $modSettings['defaultMaxMembers']); // Find the members from the database. // !!!SLOW This query is slow. $request = db_query
("
SELECT mem.ID_MEMBER
FROM {$db_prefix}members AS mem
LEFT JOIN {$db_prefix}invites AS inv ON (inv.ID_REGISTRATION = mem.ID_MEMBER)
LEFT JOIN {$db_prefix}log_online AS lo ON (lo.ID_MEMBER = mem.ID_MEMBER)
LEFT JOIN {$db_prefix}membergroups AS mg ON (mg.ID_GROUP = IF(mem.ID_GROUP = 0, mem.ID_POST_GROUP, mem.ID_GROUP))
WHERE inv.ID_MEMBER = $_REQUEST[inviter]
AND is_activated = 1
LIMIT $_REQUEST[start], $modSettings[defaultMaxMembers]", __FILE__, __LINE__); printMemberListRows
($request); mysql_free_result($request); } // End Invite MOD. // They're really doing a search. elseif (isset($_REQUEST['search']) && isset($_REQUEST['fields'])) // Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.018s | speed:111.71 KB/s
Pó?niej mamy ./Sources/Profile.php
// Invite MOD. Change the number of inviter. if (!empty($_POST['inviter']) && (int
)$_POST['inviter'] != 0 && (int
)$_POST['inviter'] != $memID && allowedTo
('moderate_forum')) { global $sourcedir; require_once($sourcedir . '/Invite.php'); if (inviter
($memID)) db_query
("
UPDATE {$db_prefix}invites SET ID_MEMBER = {$_POST['inviter']}
WHERE ID_REGISTRATION = $memID
LIMIT 1", __FILE__, __LINE__); else db_query
("
INSERT INTO {$db_prefix}invites (ID_MEMBER, ID_REGISTRATION)
VALUES ({$_POST['inviter']}, $memID)", __FILE__, __LINE__); } elseif (isset($_POST['inviter']) && empty($_POST['inviter'])) { db_query
("
DELETE FROM {$db_prefix}invites
WHERE ID_REGISTRATION = $memID
LIMIT 1", __FILE__, __LINE__); } // Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.019s | speed:40.27 KB/s
Jak wida? troch? wi?cej zmian potrzeba. Ale to nie wszystko, jest inny sposób przekazywania akcji skryptom, przekazywania z pó? input, textarea czy js itd.. Mo?e nie dopisywa? zapraszanych do bazy itd.. Dodatkowo trzeba si? przyjrze? gdzie wizualnie ma co pój??, bo tu te? troch? zmian.. i mo?e warto to jeszcze przemy?le?, zastanowi? si?, czy mo?e nie wrzuci? pewnych "cz??ci" moda w inne miejsca?
My?l?, ?e je?li to prosta modyfikacja, która nie d?ubie za bardzo w bazie i nie dolepia si? do innych plików, to mo?na si? pobawi?. W takim wypadku jak ten mod, trzeba podej?? bardziej na powa?nie. Mo?e nawet si? zastanowi?, czy nie lepiej napisa? to od nowa? cz?sto to ?atwiejsze ni? przeróbki.
Ten kod, który poda?e?, musi w 100% zadzia?a? z tym kodem który poda?em, wi?c w ka?dym wypadku to trzeba przepisa?. Tu nie chodzi tylko o kod odwo?a? do bazy, jak pisa?em to skomplikowany mod, który "czepia" si? wielu plików z silnika i ma to ogromny wp?yw na dzia?anie ca?ego forum. Tak przemodelowanie to jedno, ale bezwzgl?dnie musz? by? porobione wszystkie mo?liwe testy.
Tak na szybko z g?owy tego Ci nie podam. Ja te? zmieniaj?c taki kod, musz? sprawdzi? czy dodaje go do bazy, gdzie i jak. Musisz mi wybaczy?, ale do ko?ca m-ca mam takie ob?o?enie niedoko?czonych spraw, ?e mog? straci? kask?, za nie wykonane projekty. ok? Rozumiesz to?
Oczywi?cie nie poddawaj si? i rób swoje! Tylko w tym wypadku co? mam skojarzenia.. z tym ..koniem, co go odzwyczajano od jedzenia, i prawie im si? uda?o, tylko niestety kó? zdech?..
Tym nie mniej ?ycz? powodzenia w przeróbach, w sumie to te? szko?a i mo?esz si? dzi?ki temu wielu rzeczy nauczy? i napewno przybli?a Ci? to do g??bszego poznania idei i samego dzia?ania SMF
Pozdrówka

roco