gazsesz képe

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:

// By replacing %d with multiple %d's we could run this query at one time (from another function above)
  $wheres = ' WHERE td.vid IN (%d)';
  foreach ($tids as $index => $tid) {
    $joins .= ' INNER JOIN {term_node} tn' . $index . ' ON tn.nid = tn' . $index . '.nid';
    $wheres .= ' AND tn' . $index . '.tid IN ('. $tid .')';
  }
  $joins .= " INNER JOIN node n ON tn.nid = n.nid";
  $wheres .= ' AND n.status = 1 AND n.moderate = 0';
  $group = ' GROUP BY td.tid';
  $order = ' ORDER BY vid, weight, name';
 
  $sql = $select . $joins . $wheres . $group . $order;
  $sql = db_rewrite_sql($sql);

..és az átiromány:

  // By replacing %d with multiple %d's we could run this query at one time (from another function above)
  $wheres = ' WHERE td.vid IN (%d)';
  $joins .= ' INNER JOIN {term_node} tn' . '0' . ' ON tn.nid = tn' . '0' . '.nid';
  $wheres .= ' AND tn' . '0' . '.tid IN (';
  foreach ($tids as $index => $tid) {
  $wheres .= $tid.',';
  }
 
  $joins .= " INNER JOIN node n ON tn.nid = n.nid";
  $wheres .= '0) AND n.status = 1 AND n.moderate = 0';
  $group = ' GROUP BY td.tid';
  $order = ' ORDER BY vid, weight, name';
 
  $sql = $select . $joins . $wheres . $group . $order;
  $sql = db_rewrite_sql($sql);

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.

0
0

Gazsesz

alippai képe

Emlitetted hogy az adatbázis réteg nagyon egyszerű és hasznos.

Ha már az űrlapkezelést is említetted, akkor egyszerűbb az űrlapot megírni Drupalban.
Két függvényre van szükséged: hook_menu-re és egy függvényre ami egy Array-t ad vissza.
Ilyenkor szépen egy-egy tömb elememmel tudom definiálni, hogy mi az alap érték, mekkora a maximális hossz.

Szerinted ez:

 <FORM action="http://somesite.com/prog/adduser" method="post">
    <P>
    <LABEL for="firstname">First name: </LABEL>
              <INPUT type="text" id="firstname"><BR>
    <LABEL for="lastname">Last name: </LABEL>
              <INPUT type="text" id="lastname"><BR>
    <LABEL for="email">email: </LABEL>
              <INPUT type="text" id="email"><BR>
    <INPUT type="radio" name="sex" value="Male"> Male<BR>
    <INPUT type="radio" name="sex" value="Female"> Female<BR>
    <INPUT type="submit" value="Send"> <INPUT type="reset">
    </P>
 </FORM>

vagy ez:
function mymodule_myform() {
  $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.'),
  );
 
  return $form;
}

?

Nézzük sorban az előnyöket:

Biztonságos
Nem lehet beküldeni a radio gomboknál a Male és Female értéken kívül mást.
Beépített validálás
Ami kötelező azért szól, hogyha hiányzik.
Fordítható
látod a t() függvényeket, azokban a stringeket Drupalon keresztül egyszerűen bármilyen nyelvre fordíthatod, lekezeli neked a Drupal.
Bővíthető
Tudsz hozzáadni saját form elemeket:
  • színválasztót, csak bekapcsolod a jQuery colorpicer VAGY a Colorpicker modult és máris használhatod a '#type' => 'colorpicker' típust
  • dátum mezőt (akár kis felugró naptárral) a Date modul segítségével

Ezeken kívül egy tucat dolgot még tud, pl. AHAH/AJAX-ot kezelni, saját validálást csinálni.

Én az utóbbit választom, szertinem próbáld ki te is.

Források, kiindulópontok:
http://api.drupal.org/api/drupal/developer--topics--forms_api_reference....
http://drupal.org/node/751826

0
0

Lippai Ádám
young element

Session kezelés Drupal 6-ban

realdream képe

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ó.

Drupal verzió: 

Google és a magyar nyelvű oldalak

Anonymous képe

Tegnap a Weblaboron véletlenül előkerült, hogy a Google néhány magyar nyelvű lapot nem tekint magyar nyelvű lapnak. Számomra ez érdekes kérdésnek bizonyult, így megpróbáltam körbejárni...
Nézegettem a dolgot, csupán annyit birtam megállapítani, hogy itt talán valamilyen Drupal ficsör lesz a dolog mögött, mert nem Drupal oldalnál ez a jelenség nem jött elő:

Fórum: 

UW.Hu

wlaja képe

Hello
Lehet hülyét csinálok itt magambol de nem megy ez a telepités...
Az alaábt irja ki....
Valaki tud valamit mondani mit kegyek vele?
Elöre is köszi :)

Warning: ini_set() has been disabled for security reasons in /mnt/ultraweb/w/wl/wlaja84/sites/default/settings.php on line 121

Warning: ini_set() has been disabled for security reasons in /mnt/ultraweb/w/wl/wlaja84/sites/default/settings.php on line 122

Warning: ini_set() has been disabled for security reasons in /mnt/ultraweb/w/wl/wlaja84/sites/default/settings.php on line 123

Warning: ini_set() has been disabled for security reasons in /mnt/ultraweb/w/wl/wlaja84/sites/default/settings.php on line 124

Kilencedik Drupal Használói Találkozó Budapesten

tolmi képe

A hagyományos, hónap utolsó csütörtöki időpontban megrendezzük a kilencedik Drupal használói találkozót szeptember 25-én. A rendezvénysorozat elsődleges célja, hogy összefogja a Drupal magyarországi felhasználóit és segítse a gyümölcsöző párbeszédet közöttük. A beszélgetést apropó gyanánt ezúttal is egy rövid témafeldobó előadás előzi meg. Minden Drupal-lal foglalkozót és azzal ismerkedni szándékozót szeretettel várunk a rendezvényre!

Időpont: 
2008. szeptember 25., csütörtök 20.30 - 22.00

Tizenkettedik Drupal használói találkozó Budapesten

tolmi képe

Decemberben is megrendezésre kerül a szokásos Drupal Használói Találkozó Budapesten, ám ezúttal a megszokottól eltérő időpontban, sorrendben a tizenkettedik alkalommal. Ezen rendezvények elsődleges célja hogy összehozza a Drupal iránt érdeklődőket, a már Drupalt használó felhasználókat és a Drupallal, vagy Drupalt magát fejlesztőket, lehetővé téve egymás megismerését, segítését valamint a párbeszédet ezen kiváló alkalmazás kapcsán.

Ezúttal 2 db 5 perces villámelőadással szeretnénk a beszélgetést indítani.

Időpont: 
2008. december 18., csütörtök 18.30 - 20.00