Pár egyszerű lépés
A megírt form-odat valahol meg kell jelenítened.
Pl: csinálsz egy hook_menu()-t az alábbi struktúrával:
/** * Implementation of hook_menu(). */ function reserve_menu() { $items = array(); $items['reservation'] = array( 'title' => 'Foglalás', 'page callback' => 'drupal_get_form', 'page arguments' => array('reserve_myform'), 'type' => MENU_NORMAL_ITEM, 'access arguments' => array('access content'), ); return $item; }
Ahhoz, hogy működjön a frissen létrehozott menü, látogasd meg mentés után az admin/build/modules oldalt.
btw: sok lehetőséged van a form-ok kezelésére. Pl: system_settings_form függvény, bár esetedben érdemes saját submit függvényt írni hozzá.
a jogosultságkezeléssel kapcsolatban, pedig olvass utánna a hook_access függvénynek.
*----*----*
$node ? 'alma' : 'bor'
*----*----*
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
Pedig konkrétumokat írtam :)
Tényleg most is úgy érezted, hogy "Ezért kár volt koptatni a billentyűzetet" (downvote)? Hmm, pedig a kérdéseidre válaszoltam, hogy legalább megpróbáljam alátámasztani azt, amit írtam. Bár lehet, hogy a -1 nálad azt jelenti, hogy csak nem értesz egyet. :) Egyébként azt állítani, hogy "levegőben lóg" az érvelésem, picit most a Te részedről hangzik sértőn, miután konkrétumokat mondtam, hogy megpróbáljam alátámasztani azt, amit korábban állítottam, nem csak elfutottam a vita elől. Az már másik kérdés, hogy más állásponton vagyunk. (Ami nem is baj.)
No mindegy, térjünk a lényegre.
általad javasolt megoldás nem a memóriát, sok minden más erőforrást használ túlzottan, hisz nem kéne azokat használni, ha a memóriában lenne minden adat. Használja a merevlemezt, plusz processzor erőforrást, és még talán hálózati kapcsolatot is.
Túlzottan használja az erőforrásokat egy adatbázishoz kapcsolódás+query esetén? Komolyan ezt boncolgatjuk, amikor Drupalról beszélünk? Rég probléma, ha szűk keresztmetszetet jelent az adatbázis használata. Én is feltennék egy fontos költői kérdést: honnan tudjuk, mennyi memória áll rendelkezésére a felhasználónak (PHP memory_limit
)?
Értem, most itt, ennél az egyetlen feladatnál spóroljuk le az adatbázis-szerverhez nyúlás idejét, annak erőforrás-használatát, azt a pár milliszekundum alatt lefutó query-t, és helyette nyugodt szívvel tömködjük a memóriát többezer adattal igazából feleslegesen, menjünk végig szépen a nagy tömbünkön, annak minden elemén egy ciklussal ahelyett, hogy egy több helyen is ÚJRAFELHASZNÁLHATÓ megoldást választanánk - pont, mint amilyet például az addressfield_hu kínál. Na de vegyük az utóbbi esetet is: adatbázisban lesznek az adataink, és többféle módon tudunk ezek között szűrni. A településlista, irányítószámlista, ehhez kapcsolódó dolgok újrafelhasználhatónak számítanak, ebben egyetértünk, ugye? (Remélem, legalább ebben.) Bár erre a fájlos megoldást támogatók részéről lehetne egy reakció élből, hogy ilyen alapon végül is be lehetne nyomni külön fájlba is ezt a többezer adatot az irányítószámokkal, településekkel, egy remek mágikus függvénybe, aztán valami rendkívül kreatív megoldással megpróbálni újrafelhasználhatóvá tenni azt.
DE még mindig nem láttam a hozzászólásaidban az igazi ellenérvet arra, amit én javasoltam alternatívaként, hogy ugyan használjuk már azt az eszközt erre, ami pontosan ilyen jellegű feladatokra való - adatok tárolására, adatok közötti, lehetőleg optimalizált szűrésre, keresésre, tárolásra. Az adatbázismotor éppen erre lett kitalálva: többezer adatban és akár egymillió adat között is lehet vele megfelelő indexelés esetén milliszekundumok alatt megszülető eredményt találni (hogy ne járna ez erőforrás-használattal?), ugyanezt nyilvánvalóan nem lehet elmondani a PHP-ról. Nem erre lett kitalálva.
A gondolatmeneted alapján - nincs ugyanis ugye elméleti határ, mint írtad: van-e értelme egyáltalán ilyenről beszélni? - akár többtízezres, többszázezres adatmennyiség is benyomható lenne beparse-olandó PHP-kódba, végül is az tök jó, hogy ott van a memóriában, ha esetleg épp kell. De nyilván Te sem így értetted (feltételezem), csak mondom, hogy a Te érvelésedből pedig ezt a téves következtetést is levonhatná akár a beszélgetésünket olvasó fórumozó. (Mitől függ a határ? Van határ?)
Akkor pedig az általad említett "túlzott", adatbázis-használatból eredő plusz erőforrás-használat is jócskán alulmarad ahhoz képest, amennyit a PHP-kód a futása során kajálni fog.
Amúgy létezik query cache is, ha már itt tartunk. :))) (Persze ez nem ment meg minket az adatbázis-szerverhez kapcsolódástól.)
Akkor beszéljünk az APC-ről. Hány osztott tárhelyes megoldásnál van szted nagy átlagban APC? A nagy átlag pedig teljesen érthető módon az osztott tárhelyes megoldást választja.
Milyen többszáz szájtról beszélünk, pontosabban miért beszélünk most többszáz szájtra alkalmazható/alkalmazandó megoldásokról, amikor itt - valószínűleg - egyetlen oldalról van csupán szó? Minél több kapacitás áll rendelkezésre, annál inkább megváltoznak az alkalmazható lehetőségek. Igen, APC-nél valószínűleg bent tartja a memóriában. Tényleg jó az, hogy ott terpeszkedik a memóriában? Attól függ! (Na, lehet, hogy ebben közös nevezőn vagyunk! :D) De továbbra is beszéljünk lehetőleg az általános esetekről, hiszen minden komolyabb környezet más és más lehetőségeket kínál. Osztott tárhely: korlátozott memória, általában a PHP-s memory_limit
128 MB vagy 256 MB körül mozog. Drupalról van szó, nem olyan sok az. Minek pazarolni? A Drupal a komplexitása miatt amúgy sem spórol szegénnyel.
Abban az egyben egészen biztos, hogy egyetértünk, hogy a megvalósítás helyessége mindig függ a környezettől és magától a feladattól. Standard megoldásokat persze épp emiatt nehéz mondani, ettől függetlenül az általános felhasználásnál nem biztos, hogy van értelme kapásból feltételezni, hogy bőven rendelkezünk szabad kapacitásokkal.
Ja, tényleg, amúgy osztott tárhelynél a MySQL-szerver általában egyébként is localhoston van. :) (Nincs távoli kapcsolódás miatti overhead.)
Konkrét elméleti határokról amúgy persze, hogy nincs értelme beszélni, de nehogy már azt tartsuk helyes megoldásnak általánosságban, hogy többezer adatot tök feleslegesen nyomjunk csak be nyugodtan a memóriába, aztán szépen egyesével lépdeljünk végig a jó nagy tömbünkön, úgyis remélhetőleg van kapacitás elég. Ha nincs, akkor meg nézhetjük át a kódot a kritikus pontok után kutatva.
Az egészbe amúgy azért ugattam bele, mert az én szememet bántotta, ez egyáltalán nem jelenti azt, hogy nálam van az erő, meg a tudás, sőt, Te nálam ezerszer tapasztaltabb vagy, de mivel ekkora adatmennyiségről van szó, semmiféle racionális érvet nem látok amellett, hogy miért is kellene ezt PHP-kódban tárolni, ha a konkrét esetet vizsgáljuk. Komolyabb kódoknál nem is láttam ilyenre precedenst, hogy komplett település- és irányítószámlistákat nyomtak volna bele nyelvfüggő (ráadásul!) implementációba.
Jaj, bocsi, még egy utolsó - talán nem levegőben lógó - érv, mielőtt elfelejtem: Szilárd az általam már idézett kódjában MINDEN esetben (!!) végigmegy az EGÉSZ tömbön, annak ÖSSZES elemén, még abban az esetben is, ha már akár a második lépésben megtalálta a kérdéses elemet. Tehát nem lép ki a ciklusból még találat esetén sem. Erőforrás-foglalás++, futási_idő++. :)))
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
igen igen0
gondolom azt a hook_menu-t egy az egybe bemásoltad. Lemaradt a végén egy 's' a return-nél :)
/** * Implementation of hook_perm(). */ function reserve_perm() { return array('access reservation form'); } /** * Implementation of hook_menu(). */ function reserve_menu() { $items = array(); $items['reservation'] = array( 'title' => 'Foglalás', 'page callback' => 'drupal_get_form', 'page arguments' => array('room_reserver_myform'), 'type' => MENU_NORMAL_ITEM, 'access arguments' => array('access reservation form'), //így csak az fér hozzá, aki benne van abban a csoportban, amelyikre engedélyezed ezt a hozzáférést ); return $items; } function room_reserver_myform() { $form = array(); $form['#submit'] = array('room_reserver_myform_submit'); $form['firstname'] = array( '#type'=> 'textfield', '#title' => t('First name'), '#required' => TRUE, ); $form['lastname'] = array( '#type'=> 'textfield', '#title' => t('Last name'), '#required' => TRUE, ); $form['radio'] = array( '#type' => 'radio', '#title' => t('Sex'), '#default_value' => 'Male', '#options' => array( 1 => 'Male', 2 => 'Female', ), '#description' => t('Please choose an option.'), ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Elküldés'), ); return $form; } function room_reserver_myform_submit($form, &$form_state) { //a form state-ben találhatóak az POST-olt adatok $values = $form_state['values']; //itt pedig elmendheted, ahogy kedved tartja. //viszont ha saját táblákkal dolgozol, akkor írj egy .install file-t is. }
*----*----*
$node ? 'alma' : 'bor'
*----*----*
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
vamiért nem működik a hook_perm()
sikerült megoldanom néhány problémát: több formot csináltam, adatbázis fel/letöltés, validálás, submit... de a hozzáférés-kezelés valahogy nem akar működni :S
ez a kódom:
Meg is jelennek a beállított pontok ('access reservation form', 'administrate own reservastions', 'administration') a Jogosultságoknál, de nincs jelentősége, hogy be vannak-e kapcsolva, mert alapból ki van kapcsolva mind és mégis megjelenik az űrlap mindenkinek :(. Tudna valaki segíteni, hogy mi lehet a gond?