Views 2 tetszőleges SQL Select-tel?

Patuzzi képe

A Views 2 API-ját használva nem lehet egy általam írt tetszőleges SQL select-et használni a listázáshoz?
Néha kényelmesebb nekem megírni a Select-et, mint Base ill. join táblákat stb. meghatározni...

Drupal verzió: 
Pasqualle képe

nem

0
0
Patuzzi képe

Szomorú...
Kösz.

0
0
Illyés Edit képe

Már miért ne lehetne? Lekérdezi az adatokat, összerendezi őket, aztán szépen átadja a Views sminkfüggvényeknek, vagy aminek akarja.

Más kérdés, hogy ez nem egyszerűbb, hanem jóval bonyolultabb, mint az egyenes út, nekem biztos egy napig tartana kideríteni, hogy milyen formában kell minek átadni a listázásom eredményét :)

Állítólag már a views_query_alter() is működik, bár én még sose próbáltam.

0
0
Pasqualle képe

en ugy ertettem, hogy az SQL lekerdezest akarja atadni, nem az eredmenyhalmazt..

csak arra hasznalni a views-t, hogy egy kesz listat sminkeljen. Hat nem tudom. Se rendezes, se filtereles, se argument, se az oszlopok sorrendjenek valtoztatasa nem mukodhet ugy. Szinte minden beallitast elfelejthet, ami a views admin feluleten van. Semmi haszna nem lenne a views modult igy hasznalni szerintem.

A viewsnak tudnia kell mindent az adatrol, hogy a views funkciok mukodjenek..

0
0
Illyés Edit képe

Views 1 alatt előfordult, hogy nem lehetett összekattintgatni a lekérdezést, a views_query_alter() akkor még nem működött, viszont kellett volna a valamelyik widget (ha jól emlékszem, a felfedett szűrős), és akkor egy kollégám ezt a módszert használta. De többnyire tényleg nem éri meg :)

0
0
Patuzzi képe

Nem tudtam megoldani (szerény tudásommal) Views 2 API-val egy lekérdezést, ezért gondoltam a saját Select-re.
Tényleg a Select eredményét szerettem volna átadni a Views-nak rendezés, szűrés miatt, ne kelljen azt megírni.

De itt az API problémám, múltkor is kaptam tőletek segítséget:

Táblák: USERS(Drupal saját) <- FB_KEZELO <- FB_CEG
API-val az első kettőt sikerült összekötni, megjelentek a Views2 UI-ban, de FB_CEG-et FB_KEZELO-vel már nem, akkor sem ha az összekötő mező ugyanolyan nevű (cg_id).
A "cg_megnev" mezőt nem tudom a listába felvenni.

Pedig az Advanced Help is így írja le:

function freebus_views_data() {
 
  $data['fb_kezelo']['table']['group']  = t('FreeBus kezelő csoport');
 
  $data['fb_kezelo']['table']['join'] = array(
    'users' => array(
      'left_table' => 'users',
      'left_field' => 'uid',
      'field' => 'kz_uid',
      'type' => 'INNER',
     ),
  );
 
  $data['fb_kezelo']['kz_jog'] = array(
    'title' => t('Jog'),
    'help'  => t('Jogosultság'),
    ...
  );
 
  //------------------------------------------------------
  $data['fb_ceg']['table']['group']  = t('FreeBus cég csoport');
 
  $data['fb_ceg']['table']['join'] = array(
    'fb_kezelo' => array(
      'left_table' => 'fb_kezelo',
      'left_field' => 'kz_cg_id',   // ha 'cg_id', akkor sem jó!
      'field'      => 'cg_id',
      'type'       => 'INNER',
     ),
  );
 
  $data['fb_ceg']['cg_megnev'] = array(
    'title' => t('Cégnév'),
    'help'  => t('FreeBus cég neve'),
    ...
  );
  return $data;
}
0
0
Pasqualle képe

mivel ['table']['base']-t nem hasznalsz gondolom user alapu viewt akarsz letrehozni.

szerintem ez hianyzik:

  $data['fb_ceg']['table']['join'] = array(
...
    'users' => array( // <<< itt megadom mi a view alapja
      'left_table' => 'fb_kezelo',
      'left_field' => 'kz_cg_id', // <<< fb_kezelo.kz_cg_id kapcsolom az
      'field' => 'cg_id',  // <<< fb_ceg.cg_id oszplohoz
      'type' => 'INNER',
    ),
  );

tehat amikor a users tabla a view alapja akkor ki lehessen valasztani az admin feluleten a fb_ceg adatokat is, az fb_kezelo tablan keresztul.. Az erdekesseg az, hogy nem azt irtam le, hogy vegul a user tablahoz hogyan jutok el csak egy lepest az iranyaba. A ['fb_kezelo']['table']['join'] segitsegevel jutunk el a FB_CEG > FB_KEZELO > USERS tablahoz..
0
0
Patuzzi képe

Úgy tűnik, így már működik, köszönöm.
Kicsit át kell éreznem a Views2 lelkivilágát.

A múltkor is beszéltünk róla, de van egy kicsi bug-ja a Views2-nak szerintem.
Mert ha nem egyforma a két táblában a mezők neve, akkor ugyan megtalálja a kapcsolatot, de mindenáron select-álni akar egy nid-et is, ami nem kell nekünk: pl:

function freebus_views_data() {
  ...
  $data['fb_kezelo']['table']['join'] = array(
    'users' => array(
      'left_table' => 'users',
      'left_field' => 'uid',
      'field' => 'kz_uid',
      'type' => 'INNER', // all nodes have an author.
     ),
  );  ...
}

esetén ez a select (egy kz_jog nevű mezőt választva):

SELECT users.uid AS uid,
fb_kezelo.kz_jog AS fb_kezelo_kz_jog,
fb_kezelo.nid AS fb_kezelo_nid
FROM users users
INNER JOIN fb_kezelo fb_kezelo ON users.uid = fb_kezelo.kz_uid

Tehát megtalálja az eltérő mező alapján a kapcsolatot, csak a select listában nem kellene a nid mező.
Én nem szeretem az egyforma mezőket, mert alias kell mindig hozzájuk.

0
0
Pasqualle képe

az biztos, hogy nem ez a join okozza +nid selectet..
szerintem valahol hasznalsz egy mezot amit a views_handler_field_node-al (vagy belole szarmaztatott handler-rel) probalsz megjeleniteni..

0
0
Patuzzi képe

Köszi, végignézem a kódot, hátha benne maradt valahol egy nid.
Majd jelentkezem.

0
0
Patuzzi képe

Köszi, végignézem a kódot, hátha benne maradt valahol egy nid.
Majd jelentkezem.

0
0