SQL lekérdezés

makgab képe

Hi!

Szeretnék a modulomban egy lekérdezés menüt. Megadja a user a paramétereket és utána hogy érdemes generálni a HTML táblázatot az eredmény megjelenítésére?
Csak az elv érdekelne.

A lenti kód egy korábbi fórumtéma demokód részlete. Gyakorlatilag elég, ha a listazas() függvénynek átadásra kerül a szükséges paraméter? Ez jó megoldás?

G.

<?php
 
function listazas() {
  $header = array(
    array('data' => t('User name'), 'field' => 'u.name', 'sort' => 'asc'),
    array('data' => t('Mail'), 'field' => 'u.mail'),
    array('data' => t('Operations'), 'colspan' => 2),
  );
 
  $form['header'] = array(
   '#type' => 'value',
   '#value' => $header,
  );
 
  $sql = 'SELECT * FROM {users} u WHERE u.uid > 0';
  $sql .= tablesort_sql($header);
 
  $result = pager_query($sql, 50, 0);
 
  $form['user']['#tree'] = TRUE;
 
  while ($user = db_fetch_object($result)) {
    $form['user'][$user->uid] = users_row($user);
  }
 
  $form['pager'] = array('#value' => theme('pager', NULL, 50, 0));
  $form['#theme'] = 'listazas';
 
  return $form;
}
 
function users_row($user) {
  $form['name'] = array(
    '#type' => 'markup',
    '#value' => $user->name,
  );
  $form['mail'] = array(
    '#type' => 'markup',
    '#value' => $user->mail,
  );
  $edit_link = (0) ? '' : l(t('Edit'), 'lista/edit/'. $user->uid);
  $form['edit_user'] = array(
    '#type' => 'markup',
    '#value' => $edit_link,
  );
  $delete_link = (0) ? '' : l(t('Delete'), 'lista/delete/'. $user->uid);
  $form['delete_user'] = array(
    '#type' => 'markup',
    '#value' => $delete_link,
  );
 
  return $form;
}
 
function theme_listazas($form) {
  $header = $form['header']['#value'];
  $rows = array();
 
  foreach (element_children($form['user']) as $key) {
     // Build the table row.
    $rows[] = array(
      array('data' => drupal_render($form['user'][$key]['name'])),
      array('data' => drupal_render($form['user'][$key]['mail'])),
      array('data' => drupal_render($form['user'][$key]['edit_user'])),
      array('data' => drupal_render($form['user'][$key]['delete_user'])),
    );
  }
 
  $output = theme('table', $header, $rows);
  if ($form['pager']['#value']) {
    $output .= drupal_render($form['pager']);
  }
  $output .= drupal_render($form);
 
  return $output;
}
 
 
?>
Drupal verzió: 
Pasqualle képe

pl status alapjan (active, blocked)

function mymodule_menu() {
  $items['lista/userstatus/%'] = array(
    'title' => 'List users by status',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('listazas', 2),
    'access callback' => 'user_access',
    'access arguments' => array('access administration pages'),
    'type' => MENU_CALLBACK,
  );
 
function listazas(&$form_state, $status) {
...
  $result = pager_query('SELECT * FROM {users} u WHERE u.uid > 0 AND u.status = %d'. tablesort_sql($header), 30, 0, NULL, $status);
...

de ha a lista nem egy extrem admin felulet akkor inkabb a views modullal keszitenem a listat..

0
0
makgab képe

mire is jó a views module (http://drupal.org/project/views)? Views=nézetek?
Egy SQL query-t lehet vele készíteni?

G.

0
0
nevergone képe

Igen, többek közt... bátran próbáld is ki! :)

0
0
pp képe

Kattingatós felületen tudsz összerakni bármilyen listát(tartalom, felhasználó, taxonomy stb. ami meg van valósítva benne.) a megadott szempontok alapján. (de nem bármilyen sql-t)

pp

0
0
aboros képe

SELECT * FROM {users} u WHERE u.uid > 0

de azért egy ilyet elég könnyen :)

0
0

-
clear: both;

makgab képe

Magam irnék egy query-t.
A form_submit-ban szeretném meghívni a listazas függvényt, de a form függvényre ugrik.
Mit csinálok rosszul? A submit-ban hogyan tudom meghivni a listazas függvényt?

G.

<?php
// .module
...
$item['base/lekerd/ugylekerd'] = array(
  'title' => 'Lekérdezés',
  'page callback' => 'drupal_get_form'
  'page arguments' => array('ugylekerd_select_form'),
  ...
  'file' => 'mymodule.ugylekerd.inc',
  );
 
 
 
// A 'mymodule.ugylekerd.inc'-ben:
 
function ugylekerd_select_form{
  $form['adat'] = array(
   '#type' => 'textfield',
  ...
  );
  $form['submit'] = array(
   '#type' => 'submit',
   '#value' => t('Futtat'),
  );
}
 
...
 
function ugylekerd_select_form_submit(){
  ugylekerdlistazas($form_state['values']['adat']);     // itt visszaugrik az ugylekerd_select_form()-ra
}
 
 
function ugylekerdlistazas($adat) {
  $header = array(
    array('data' => t('ID'), 'field' => 's.ID', 'sort' => 'asc' );
    ...
  );
...
}
 
?>
0
0
Pasqualle képe

function ugylekerd_select_form_submit($form, &$form_state) {
  $adat = $form_state['values']['adat'];
  $form_state['redirect'] = 'base/lekerd/ugylekerd/'. $adat; 
}
 
function ugylekerd_listazas($form_state, $adat) {
  $adat = check_plain($adat);
  ...
}
0
0
makgab képe

A helyzet nem változott. Önmagát hivja meg. :O

A $form_state['redirect'] = 'base/lekerd/ugylekerd/'. $adat;
hogyan fogja meghívni az ugylekerd_listazas($form_state, $adat) függvényt?

Nem egészen világos. :(

Vagy kell egy menu item a .module-ban ehhez?

G.

0
0
aboros képe

az regisztrálja az útvonalat és meghatározza, hogy mi történjen (jelen esetben fusson az ugylekerd_listazas fgv) amikor az adott útvonalat látogatja meg valaki. enélkül a drupal honnan tudná, hogy melyik útvonallal mit kell kezdenie?

0
0

-
clear: both;

makgab képe

igen.

:)

Pl.:

<?php
$items[base/.../ugylekerd_listazas/%] = array (
  'page callback' => 'drupal_get_form',
  'page arguments' => array('ugylekerdezes_listazas', 4),
);
 
?>
0
0
makgab képe

Köszi, működik.
Egy kérdés maradt...
Az

ugylekerd_listazas($form_state, $adat)

miért is kell a $form_state (első) paraméternek?
Ha kihagyom nem jól működik, az $adat egy tömb (array) lesz. Ekkor ő lesz a $form_state?

G.

0
0
Pasqualle képe

ha drupal_get_form-al hivsz meg egy php fuggvenyt akkor a fuggveny elso parametere a $form_state.

0
0