Session kezelés Drupal 6-ban
Egy tömb tartalmát szeretném tárolni a $_SESSION szuperglobal változóban.
Sajnos ez abban az esetben nem működik, ha az user Anonymous tehát nincs bejelentkezve és a gyorstárazási mód (admin/settings/performance) be van kapcsolva pl. Normál.
Bekapcsolt gyorsítótárral névtelen felhasználónál csak az első megadott értéket kapom vissza és hiába unset majd új értékadás, akkor sem változik meg.
A sessions táblában az érték jól szerepel, de ha megpróbálom kiolvasni (pl. $változó=$_SESSION['teszt']) akkor már nem jó.




...találtam
Nem gyenge kutatás után lett meg a hiba egyik oka, bár egy kis szépésghibája még mindig van. Leírom, hátha más is okul belőle.
1. a főbűnös a taxonomy_filter modul volt, ő állította össze ezeket a brutál joinokat. A tesztek szerint ráadásul rosszul is fűzte össze, mert mindig 0 eredményt hozott.
A taxonomy_filter modult azért használtam, hogy az adott termékkategóriából összegyűjtse a márkaneveket és abból tovább lehessen szűrni. Ha nem szülőkategória van, akkor szépen működik is a szűrés, és az SQL is gyors, rövid. Ha viszont egy szülőkategóriát választok ki, akkor kezdi el a JOIN-okat generálni, viszont rosszul (szerintem)
A generált SQL:
SELECT td.vid, td.tid, td.name, COUNT(DISTINCT(n.nid)) AS count FROM term_data td INNER JOIN term_node tn ON tn.tid = td.tid
INNER JOIN term_node tn0 ON tn.nid = tn0.nid
INNER JOIN term_node tn1 ON tn.nid = tn1.nid
INNER JOIN node n ON tn.nid = n.nid
WHERE td.vid IN (1)
AND tn0.tid IN (169)
AND tn1.tid IN (92)
AND n.status = 1 AND n.moderate = 0 GROUP BY td.tid ORDER BY vid, weight, name
Ennek eredménye mindig 0, pedig ha csak a 169-esre, vagy a 92-esre futattom, akkor szépen adja az eredményt. Helyes eredményt az AND tn0.tid IN (169) OR tn1.tid IN (92) ad, viszont sok kategóriánál ez is bazi lassú.
Ugyanezt sokkal egyszerűbben is meg lehet oldani:
SELECT td.vid, td.tid, td.name, COUNT(DISTINCT(n.nid)) AS count FROM term_data td INNER JOIN term_node tn ON tn.tid = td.tid
INNER JOIN term_node tn0 ON tn.nid = tn0.nid
INNER JOIN node n ON tn.nid = n.nid
WHERE td.vid IN (1)
AND tn0.tid IN (169,92)
AND n.status = 1 AND n.moderate = 0 GROUP BY td.tid ORDER BY vid, weight, name
és ráadásul ez ezerszer gyorsabban lefut, mint az eredeti.
2. A következő lépés volt, hogy akkor ezt a modulban is át kell írni (soha nem csináltam még ilyet)
462-es sortól - eredeti kód:
..és az átiromány:
A szépséghiba
Elvileg és gyakorlatilag is gyorsan működik így a modul, még a "nagycsaládos" szülőkategóriánál is helyesen hozza a márkaneveket. Viszont, ha a márkanévre kattintok, akkor már azt írja, ki, hogy nincs beküldött post ebben a kategóriában. Asszem', ez egy következő etap lesz.
..és a megválaszolatlan kérdés
Mivel a szépséghiba eredetileg is fönnállt, ezért alapból ki volt kapcsolva a blokk megjelenítése a szülőkategóriáknál, de ennek ellenére néha mégis elindította ezt a brutal SQL-t. A miértre nem sikerült rájönni.
Gazsesz