Már korábban is kaptam itt segítséget a kis problémáimmal kapcsolatban, úgyhogy bátorkodom most is "zaklatni" a tisztelt hozzáértőket!
A helyzet az, hogy létrehoztam a MySQL adatbázisban néhány saját táblát, illetve a 'users' táblát is kibővítettem pár új mezővel. A kérdés, hogy ad-e a Drupal valami egyszerűsített adatbáziskezelő függvényeket, amivel tudom írni, olvasni, bővíteni a tábláimat, avagy a rendes MySQL parancsokat kell használnom ehhez.
Olyasmire gondolok egyébként, mint ez:
global $user; $userid = $user->uid;
Ezzel a módszerrel ugye nagyon egyszerűen tudom olvasni a 'users' tábla aktuális felhasználóra vonatkozó sorát, de én írni is szeretném azt, illetve más táblákhoz is szeretnék hozzáférni.
Mi a legegyszerűbb megoldás ebben az esetben?
bye:vili
www.kekhalal.net
A Durpal-ban más megközelítést kell használni.
Szia
Nem szokás más modulok adattábláihoz mezőket hozzáadni. A Drupal a Hook rendszer segítségével lehetőséget ad mindenféle beavatkozásra.
Az adatbázis kezelő függvényekről itt olvashatsz.
további ovasmányok
http://drupal.hu/kezikonyv/fejlesztes
http://api.drupal.org/api/function/hook_user/6
Vagyis nincs... :(
Köszönöm a gyors reagálást!
Értsem úgy, hogy akkor nincs a global user -hez hasonló egyszerű mód, hanem maradnak a MySQL parancsok!?
> Nem szokás más modulok adattábláihoz mezőket hozzáadni.
De én mégis ezt szeretném... :)
> A Drupal a Hook rendszer segítségével lehetőséget ad mindenféle beavatkozásra.
Lehet erről a Hook rendszerről valahol magyarul is olvasni?
> Az adatbázis kezelő függvényekről itt olvashatsz.
Esetleg ezekről valami magyar nyelvű infó?
bye:vili
Mit akarsz csinálni?
Mit akarsz csinálni?
>Mit akarsz csinálni? Egy
>Mit akarsz csinálni?
Egy kis játékos oldalt. Néhány beviteli mező, pontozás, ilyesmi.
inkompatibilítás
Így keletkeznek az olyan Drupal rendszerek, melyeket nem lehet majd frissíteni a hagyományos módon, minden esetben túrni kell a kódon, és persze jönnek elő sorban a hibák... és akkor megy a sírás-rívás, meg minden.
Értsd meg: olyan táblákat, melyeket nem te hoztál létre, ne piszkálj élesnek szánt rendszeren. Minden olyan adatot, amelyet te adsz hozzá a rendszerhez, külön táblába tedd, és valamilyen kulccsal (jelen esetben uid) kösd össze a Drupalban szereplő adatokkal.
A hook rendszerről magyar nyelvű leírást itt találsz, de utána már ez is különösebb probléma nélkül érthető.
Választ szeretnél? - Új kérdés, új téma - Tesztoldal - Trollkezelés - Frissítés
Re: inkompatibilítás
>Értsd meg: olyan táblákat, melyeket nem te hoztál létre, ne piszkálj élesnek szánt rendszeren.
OK, értem én! És elfogadom. De...
...nem kötekedni akarok, csak érdeklődök: Ha kibővítem a 'users' táblát pár plusz mezővel, az milyen problémát okozhat nekem a későbbiekben? A mezőknek van kezdőértékük, a nevük pedig olyan, ami tuti nem fog bekerülni a hivatalos Drupal kiadásba.
>külön táblába tedd, és valamilyen kulccsal (jelen esetben uid) kösd össze
A fő gondom ezzel a megoldással az (pedig az eredeti elképzelésem ez volt), hogy nem tudom miként hozhatnék létre egy új sort a regisztrációkor ebben a külön táblában.
>A hook rendszerről magyar nyelvű leírást itt találsz
Köszönöm!
ötlet
Nem használtam soha, de talán segíthet:
hook_user
Választ szeretnél? - Új kérdés, új téma - Tesztoldal - Trollkezelés - Frissítés
hook_user
Valóban a hook_user lett a megoldás. Igaz, nem a 'register' $op-pal, hanem a 'login'-nal, mivel a regiszráció alatt nem tudtam lekérdezni a felhasználóhoz tartozó uid-t, míg a bejelentkezéskor már igen.
Az eredmény egy 10 soros kód lett, amivel fél napot tököltem (még csak tanulgatom a PHP-t és a MySQl-t is, a Drupal szépségeivel együtt). A vicc az, hogy ennyi munka után kb. ugyanott vagyok, mint amikor 10 perc alatt kibővítettem az users táblát... :)
De nem bánom, mert megismertem a modul készítés szépségét, és tetszik.
Pedig először nagyon el akartam kerülni, főleg, hogy bármit is kérdeztem a fórumon, mindenki azzal jött, hogy ne gányoljak, hanem fejlesszek modult. Ez elég zavaró volt, de tudom, hogy jószándék vezette a hozzászólókat!
bye:vili
www.kekhalal.net
a látszat csal
A vicc az, hogy ennyi munka után kb. ugyanott vagyok, mint amikor 10 perc alatt kibővítettem az users táblát... :)
Az biztos, hogy tanultál egy csomó mindent és megismertén egy nagyon jó rendszert, tehát ezért sem vagy ugyan ott. A kapott rendszered pedig (már ha mindent jól csináltál) nem fog egy fél év múlva a fejedre omlani, mert egy összegányolt kóddal pont ez lenne a baj.
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Most már legalább tudod
Most már legalább tudod hogy mi különbség a gányolás és a profi megoldás között.
Egyébként nagyon furcsa volt, hogy Nevergone a hook_user() „register” részét idézte. Főleg hogy ott az egyértelmű angol szöveg hogy mire való. Biztos vagyok benne, hogy csak véletlenül tévesztett, vagy azt hitte hogy arra van szükséged.
Innen a távolból a pontos cél ismerete nélkül azt mondom, hogy az én megoldásom a következő lenne:
Ez csak egy példa volt, ami feltételezi, hogy minden felhasználóhoz tartozik egy rekord a táblában.
Továbbá az adattáblák létrehozása nem kézzel történik.
http://api.drupal.org/api/function/hook_install/5
Ha szeretnéd tudni, hogy hova kell rakni az xxx_install() függvényt, ahhoz lapozgasd át a kézikönyvet.
Az adattábla alapértékekkel való feltöltése:
http://api.drupal.org/api/function/hook_enable/5
Amikor egy telepített Drupal rendszeren először engedélyezel egy modult akkor lefut a hook_install() és utána a hook_enable().
Ez után ha kikapcsolod a modult, és újra engedélyezed, akkor már csak a hook_enable() fog lefutni.
Amennyiben a Drupal 6-hoz fejlesztesz keresgélj a 'hook_schema' kulcsszóra.
nem volt tiszta a kérdés
Nem volt tiszta a kérdés számomra, ezért csak a használandó függvényt tudtam meghatározni, de hogy azon belül pontosan mi kellene, abban már nem voltam biztos. Akkor ezek szerint tévedtem, de nem is baj, köszönöm a precíz hozzászólásokat, én is tanultam belőlük. :)
Választ szeretnél? - Új kérdés, új téma - Tesztoldal - Trollkezelés - Frissítés
Re: Most már legalább tudod
Az én megoldásom ez lett:
Továbbá az adattáblák létrehozása nem kézzel történik.
Tudom, de itt most csupán egy saját felhasználású modulról van szó. Ha terjeszteni akarnám, akkor mindenképp csinálnék install részt is.
Amennyiben a Drupal 6-hoz fejlesztesz keresgélj a 'hook_schema' kulcsszóra.
Ó, megmaradok egyelőre az 5-ös verziónál. Itt is van tanulnivaló bőven! :)
Még egyszer köszönöm mindenkinek a segítő hozzászólásokat!
Ezek után ha gondom lesz, akkor már a fórum modul fejlesztéses részében fogok kérdezni tőletek!
bye:vili
www.kekhalal.net
Füles játék
Régen a Füles újságban volt olyan játék, hogy két egyformának tűnő képen meg kellet keresni az apró, ám de lényeges különbségeket.
Szerintem neked is kéne ilyen játékot játszanod. :-D
egyik kép
másképp
Van különösebb oka annak, hogy a LIKE operátort választottad?
Ha az adattábla rekordjából csak 1 mezőre vagy kíváncsi akkor ne a ”SELECT *”-ot használd. Fölöslegesen növeli a hálózati adatforgalmat.
Ha az uid2 mező egyedi akkor miért kell while ciklus?
Ha az uid2 mező nem egyedi akkor miért csak az utoljára kiolvasott rekordra vagy kíváncsi?
A hook_user signaturája így néz ki:hook_user($op, &$edit, &$account, $category = NULL)
Az $account paraméter nem véletlen.
http://api.drupal.org/api/function/db_num_rows/5
Előbbi hozzászólásod alapján azt hinné az ember, hogy megértetted hogy miért fontos a Drupal hook rendszerét használni, és a javaslatokat (nem az enyémét/miénket hanem a Drupal-ét) betartani. (hook_install())
Külnben a Drupal fog betartani neked. :-)
Re: Füles játék
Átalakítottam egy kicsit a kódot, a javaslataid szerint.
Különösebb oka a LIKE operátornak nem volt, csupán így láttam egy mintán és mivel működött nálam is, ezért használta. Most kicsit átolvastam az idevonatkozó részt, és valóban felesleges volt.
A SELECT * helyett már SELECT {mezoneve} van és a while ciklust is kiszedtem a kódból.
A miértekre a válaszom az, hogy még nagyon az út elején járok! Ám ha ilyen segítőkész emberek vannak a fórumon, biztos gyorsan fogok haladni. :)
bye:vili
www.kekhalal.net
A table_prefix nem a mező nevekre vonatkozik.
A tábla neveket azért kell kapcsos zárójelek közé tenni, mert az SQL stringek autómatikusan egy átalakításon esnek át a végrehajtás elött.
http://api.drupal.org/api/function/db_prefix_tables/5
Az ehhez szükséges beállításokat a settings.php -ben lehet elvégezni a $db_prefix résznél.
Tehát a SELECT {mezoneve} csak addig működik amíg nincsen megadva db_prefix.
Nagyon hosszú lesz az az
Nagyon hosszú lesz az az út a zsákutcák miatt úgy látom. Azt javaslom olvasd el a szakirodalmat először. Hosszútávon megéri nem vaktában lövöldözni kiollózott kódrészletekkel, amiről nem tudod, hogy miért működik, ha egyáltalán működik.
Aries
http://aries.mindworks.hu
Új moduloknak új táblát
Új moduloknak új táblát érdemes létrehozniuk, mivel van hook_uninstall is, ami legtöbbször letörli a modul által létrehozott táblákat és így a Te adataidat is. Bár ez a user modulra nem vonatkozik, érdemes konzekvensnek maradni és külön szedni, amit más valósít meg.
Aries
http://aries.mindworks.hu