Saját MySql SELECET-ek elhelyezése

magor képe

Üdvözlök minden kedves olvasót!

Segítséget kérnék a problémám megoldásához. Szeretnék saját MySql selecteket beépíteni tartalomtípusba vagy saját modulba. Ezt hogyan kell megoldani? Hogyan kell olyan tömb értékét átadni, amit esetleg a settings.php töltök fel, de egy másik modul használja?
Előre is köszönöm a segítséget!

Nagy Gusztáv képe

Inkább azt mond el, mit szeretnél elérni, akkor tudunk tippeket adni.

0
0

Nagy Gusztáv

magor képe

Köszönöm szépen a figyelmedet.

Sokat olvasom itt az oldal fórúm témáit.Ennek alapján létrehoztam egy saját oldalt (modult) és abban van egy lebomló lista amit egy Select-tel szeretnék feltölteni. Erre kérnék egy kis segítséget!

$form['oldal_teszt']['teszt_select'] = array(
'#type' => 'select',
'#title' => 'teszt select doboz',
'#default_value' => 0,
'#options' => array('1 elem','2 elem','3. elem')

Ez működik, de úgy szeretném, hogy az array-t saját selectel töltsem fel!

Köszönöm!

0
0
Nagy Gusztáv képe

Mi lenne ennek az oldalnak a célja? Milyen funkciót valósítana meg?

Egyébként az oldal és a modul szavak egymásnak nem szinonímái, úgyhogy a kérdésed se értem még mindig.

0
0

Nagy Gusztáv

aboros képe

futtasd a lekérdezést és az eredmény alapján építsd fel a tömböt. mi akadálya ennek?
itt vannak az adatbázis réteggel kapcsolatos dolgok:
http://api.drupal.org/api/group/database/6

az űrlapok mindig két funkciót igényelnek. az egyik ami felépíti az űrlapot a formAPI szabályai szerint, a másik pedig amelyik megjeleníti azt a drupal_get_form() hívással. előbbibe beépíted a lekérdezésedet és felépíted az űrlapot. ez a módszer. a megjelenítő lehet többféle, lehet egy MENU_CALLBACK, vagy a hook_block egyik eleme, vagy még más dolgok. neked most a felépítő funkcióra kell figyelni..

function test_form($form_state) {
 
  # itt futtatsz egy lekerdezest es az eredmeny alapjan epited fel a tombot.

  return $form;
}
 
function test_page() {
  return drupal_get_form('test_form');
}

így.

0
0

-
clear: both;

magor képe

Köszönöm szépen a segítséget. A következő kódot találtam a fórum témák között, amit átalakítottam:

/** hook_menu implementálása **/
function jquery_teszt_menu() {
  $items['teszt'] = array (
    'title' => 'teszt',
    'page callback' => 'teszt_page',
    'access arguments' => array('access content'),
  );
  return $items;
}
 
/** hook_menu implementálása **/
function teszt_page() {
 
 
  /** Az űrlap generálása és megjeleníthetővé tétele  **/
  return drupal_get_form('jquery_teszt_form');
 
}
 
 
/** Űrlap beállítása **/
function jquery_teszt_form() {
 
 
mysql_connect("localhost", "root");
$eredmeny = mysql_db_query ("db_name","SELECT nid FROM node LIMIT 0 , 30 ");
while ($sor = mysql_fetch_array ($eredmeny));
 
 
   $form['teszt'] = array(
      '#type' => 'fieldset',
      '#title' => 'teszt mező',
      '#collapsible' => TRUE,
      '#collapsed' => FALSE,
   );
 
   $form['teszt']['teszt_select'] = array(
      '#type' => 'select',
      '#title' => 'teszt select doboz',
      '#default_value' => 0,
      '#options' => array($sor),
   );
   return $form;
}

Hibát nem dob, ne nem is tölti fel a 'teszt_select'-et. Megtudná mondani valaki, hogy mi lehet a hiba?

0
0
Bálint képe

Szia! Nincs szükség itt mysql_connect-re, és a mysql_db_query-t se használd, ezekre a drupal api mind megoldást nyújt!
Ezenkívül a $sor nevű tömbödet is rosszul akarod feltölteni, ez a ciklus így nem csinál semmit.
Valamint a teszt_select form elemnél az '#options' rész is rosszul van megadva.

Ezt a kódrészletet:

<?php
 
mysql_connect("localhost", "root");
$eredmeny = mysql_db_query ("db_name","SELECT nid FROM node LIMIT 0 , 30 ");
while ($sor = mysql_fetch_array ($eredmeny));
 
?>

cseréld le erre:
<?php
 
$queryResults = db_query("SELECT nid FROM {node} LIMIT 30");
while($line = db_fetch_object($queryResults))
{
  $list[] = $line->nid;
}
 
?>

És a már említett '#options'-ös sort erre:
<?php
  '#options' => $list,
?>

Így már működni fog.
Az itt használt számodra ismeretlen függvényekre rákereshetsz az api.drupal.org-on.
0
0
magor képe

Köszönöm szépen. Sokat segítettél!

0
0
magor képe

Szeretném tovább fejleszteni a saját modulomat. Most már kapcsolatot tudok teremteni a MySql-el és saját SELECT-el fel is tudom tölteni a legördülő listát. További legördülő listát is felvettem, amely tartalma dinamikusan változik és az előző legördülő listától függ. Ez egy újabb SELECT-et jelent, aminek persze már ez lesz bemenete. Ha jól tudom ehhez javascrip-t kell. Szeretném tudni, hagy valakinek van erre javasciptje? Valamint az újabb MySql-eleket hol kell elhelyezni?
Pár napja foglalkozom a Drupallal, PHP-vel, és a javascipt is új.
Hozzá adom a javasciptet hozzáadom a modulomhoz.

function jquery_teszt_page() {

/** A JS fájl hozzáadása **/
drupal_add_js(drupal_get_path('module', 'jquery_teszt').'/jquery_teszt.js');
/** Az űrlap generálása és megjeleníthetővé tétele **/
return drupal_get_form('jquery_teszt_form');

}

Kérnék valami támpontot, amin el tudnék indulni!
Köszönöm szépen!

0
0
Bálint képe

pp leírása alapján meg tudod csinálni:
http://palocz.hu/irasok/2007/dinamikus_select

Annyi, hogy ez 5.x-hez készült, de ha áttanulmányozod, és megérted, könnyen át tudod ültetni 6-osra.

0
0
magor képe

Köszönöm szépen.
Ismerem az oldalt, de kicsit nehézkes még megértenem amit ott látok.
Olvastam valahol, hogy maga a javascript nem tud kapcsolatot teremteni az adatbázissal. Ezért kell majd egy PHP kód, amiben le lesznek írva a MySql lekérdezések. A többi MySql lekérdezést is a jquery_teszt.module-ban tároljam el, amit elkészítettem (itt egy függvénybe tegyem be) ?
A javascriptet az oldal betöltésekor tölti be és az 1. legördülő listára való kattintáskor hajtódik végre. Ekkor kiolvassa a legördülő lista tartalmát, átadja a következő SELECT-nek, ami lefut és feltölti egy tömbbe az eredményeket, amelyek megjelennek a 2. legördülő listába.
Egyszerűnek hangzik, de kezdőnek elég nehéz…

0
0
Bálint képe

A leírásban a formproba_get_select2 függvény visszatérési értéke egy tömb, ez adja a második legördülő lista tartalmát. Itt kell megcsinálod az adatbázis lekérdezést, összerakni a tömböt, és visszatérni vele.

0
0
magor képe

Köszönöm szépen.

Szóval addig eljutottam, hogy írtam jQuery javascriptet, ami click eseménnyel kiolvassa a legördülő lista tartalmát. Ezt a értéket kellene átadni paraméterként PHP függvénynek, amiben egy SELECT utasítás van és megkapja ezt a paramétert.
Kérdésem: Melyik jQuery utasítással lehet függvények paramétert átadni, majd lefuttatni?

Tehát van egy javascript ami kiolvassa a klikk eseményre a legördülő lita értékét:
$("select").click(function() {
if ($("select").attr("name") == 'teszt_select') {
var ertek = $(this[value = $(this).val()]).text();
}
});

Majd a mobulomba van egy föggvény:

function formproba_get_select3($id)
{
 $queryResults = db_query("SELECT nid FROM {node} LIMIT 30 WHERE nid=%id");
while($line = db_fetch_object($queryResults))
{
  $list[] = $line->nid;
}
}

Ezt kellene meghívni a javasriptben! Köszönöm

0
0
Bálint képe

Te átnézted, amit linkeltem? Ott szépen le van írva, hogy hogyan kell ezt!
Ez a sor egy AJAJ kérést továbbít a megfelelő függvényednek az url-en keresztül meghívva azt, és abban átadva az értéket:

$.getJSON("/",{q: 'formproba/data/' + $(this).val()},formproba_feldolg);
0
0
magor képe

Persze, hogy megnéztem, csak nem igazán értettem akkor meg, gondoltam a saját fejemmel...majd én megcsinálom. Nem akart futni nekem amit ott csináltak, majd nekfutok mégegyszer. Köszönöm szépen!

0
0
magor képe

A megadott helyen említették, hogy át kell ezt írni, csak nem tudom, hogy mit?
Tudnál segíteni? Köszönöm

probaform_menu

function formproba_menu($may_cache) {
  global $user;
  $items = array();
 
    $items[] = array(
      'path' => 'formproba',
      'callback' => 'formproba_page', 
      'title' => 'Form próba',
      'access' => user_access('access content'),
      );
    $items[] = array(
      'path' => 'formproba/data',
      'callback' => 'formproba_data',
      'access' => user_access('access content'),
      'type' => MENU_CALLBACK);
  return $items;
} 
0
0
york képe

db_query("SELECT nid FROM {node} LIMIT 30");

Nem irunk LIMIT-et query-be, arra van a db_query_range fuggveny.
0
0
Bálint képe

Köszönöm, ma is tanultam valamit. :)

0
0