Form durch Query zusammenbauen
Eingetragen von drupalino (1064)
am 26.07.2010 - 19:29 Uhr in
am 26.07.2010 - 19:29 Uhr in
Hallo zusammen, ich baue gerade ein Modul.
Darin existiert ein Formular, welches Selectboxen enthält. Diese muss ich durch DB-Abfragen zusammenbauen lassen, nur ist da immer das Problem, dass ich eine verschachtelte Query habe und dadurch sich das Form zerreisst.
<?php
function my_form_form($form_state){
$forms = array();
// set vocabulary id #
$vid = 1;
$sql_vocabulary = "SELECT * FROM {term_data} WHERE vid = %d";
$result_vocabulary = db_query(db_rewrite_sql($sql_vocabulary), $vid);
while ($data_vocabulary = db_fetch_object($result_vocabulary)){
$form["$data_vocabulary->name"]['feed_item_length'] = array(
'#type' => 'select',
'#title' => t($data_vocabulary->name),
'#default_value' => variable_get('feed_item_length','teaser'),
'#options' => array(
$sql_ob = "SELECT * FROM {term_node} WHERE tid = $data->tid";
$result_ob = db_query($sql_ob);
while ($data_ob = db_fetch_object($result_ob)){
$sql_vi = "SELECT * FROM {node} WHERE vid = $data_ob->vid";
$result_vi = db_query($sql_vi);
while ($data_vi = db_fetch_object($result_vi)){
$data_vi->vid." => ".t($data_vi->vid),
}
}
),
'#description' => t('Global setting for the length of XML feed items that are output by default.'),
);
}
return $form;
}
?>
Wie kann ich das lösen, hat jemand einen Tipp?
Habe auch schon das in einer externen funktion durchlaufen lassen, damit wird es richtig zusammengebaut als String, aber der kann dann wohl nicht innerhalb der my_form_form function nicht mehr richtig verarbeitet werden
- Anmelden oder Registrieren um Kommentare zu schreiben
Also wenn du mir kurz den
am 26.07.2010 - 20:35 Uhr
Also wenn du mir kurz den Teil:
'#options' => array(
$sql_ob = "SELECT * FROM {term_node} WHERE tid = $data->tid";
erklärst und mir sagst, was du denn in deinem #options Array haben willst, kann ich dir vielleicht auch helfen, aber so bekomme ich es gerade leider nicht zusammen.
______________________________________
Drupalentwicklung und Beratung, Drupal Business Application Framework
<?php
am 26.07.2010 - 20:47 Uhr
<?php
$form['feed']['feed_item_length'] = array(
'#type' => 'select',
'#title' => t('Display of XML feed items'),
'#default_value' => variable_get('feed_item_length','teaser'),
'#options' => array(
'title' => t('Titles only'),
'teaser' => t('Titles plus teaser'),
'fulltext' => t('Full text'),
),
'#description' => t('Global setting for the length of XML feed items that are output by default.'),
);
?>
wäre ja ein Select Formular.
Nun habe ich ja ein Select erstellt mit dem obersten Query und in
'#options' => array(
$sql_ob = "SELECT * FROM {term_node} WHERE tid = $data->tid";
Baue ich dann mit dem Sub-Query die Options für das Selectfeld zusammen.
gruss
drupalino
Also auch auf die Gefahr hin,
am 26.07.2010 - 21:07 Uhr
Also auch auf die Gefahr hin, dass ich mich etwas weit aus dem Fenster lehne, so
'#options' => array(
$sql_ob = "SELECT * FROM {term_node} WHERE tid = $data->tid";
$result_ob = db_query($sql_ob);
while ($data_ob = db_fetch_object($result_ob)){
$sql_vi = "SELECT * FROM {node} WHERE vid = $data_ob->vid";
$result_vi = db_query($sql_vi);
while ($data_vi = db_fetch_object($result_vi)){
$data_vi->vid." => ".t($data_vi->vid),
}
}
),
wird das nix. Ich würde es mal so versuchen, dass du dir ne Funktion _modulname_get_term_options baust, die dir das so umbaut, wie du es brauchst. Du kannst denke ich keine SQL Querys in ein Array stecken und hoffen, dass Sie ausgeführt werden (von dem Semikolon im Array, das zu einem Fehler führen würde mal abgesehen. Bau dir also ein Funktion, die saubere Querys ausführt und dir ein Array der Form (key=>Value) mit deinen Werten zurückgibt.
Ich hoffe das passt so für dich.
Grüße
Manuel
______________________________________
Drupalentwicklung und Beratung, Drupal Business Application Framework
Also ich weiß beim besten
am 26.07.2010 - 21:12 Uhr
Also ich weiß beim besten Willen nicht, wie das funktionieren soll...
Bei den Options muss ein Array aus Werten angegeben werden, du gibst da ein Array mit einer SQL-Anweisung usw. an. Also ich habe echt keine Ahnung, wie genau das von statten gehen söllte.
Und warum machst du die ganzen Abfragen usw. nicht schon vorher? Also so:
<?php
function my_form_form($form_state){
$forms = array();
// set vocabulary id #
$vid = 1;
$sql_vocabulary = "SELECT * FROM {term_data} WHERE vid = %d";
$result_vocabulary = db_query(db_rewrite_sql($sql_vocabulary), $vid);
while ($data_vocabulary = db_fetch_object($result_vocabulary)){
$options = array();
$sql_ob = "SELECT * FROM {term_node} WHERE tid = $data->tid";
$result_ob = db_query($sql_ob);
while ($data_ob = db_fetch_object($result_ob)){
$sql_vi = "SELECT * FROM {node} WHERE vid = $data_ob->vid";
$result_vi = db_query($sql_vi);
while ($data_vi = db_fetch_object($result_vi)){
$options[$data_vi->vid] = t($data_vi->vid);
}
}
$form["$data_vocabulary->name"]['feed_item_length'] = array(
'#type' => 'select',
'#title' => t($data_vocabulary->name),
'#default_value' => variable_get('feed_item_length','teaser'),
'#options' => $options,
'#description' => t('Global setting for the length of XML feed items that are output by default.'),
);
}
return $form;
}
?>
Der Tag war echt heute zu
am 26.07.2010 - 21:27 Uhr
Der Tag war echt heute zu lange....
man man man, ihr zwei habt ja so recht. Ich gehöre geschlagen ;-)
Aber genauso einen "Anstubser" habe ich gebraucht ;-)
Vielen Dank
gruss
drupalino