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...
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.
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..
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 :)
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;}
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..
Ú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.
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..
nem
nem
Ez egyértelmű volt
Szomorú...
Kösz.
bonyolít
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.
a valaszom tovabbra is nem
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..
előfordult
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 :)
Konkrétan
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:
users <-> fb_ceg
mivel
['table']['base']
-t nem hasznalsz gondolom user alapu viewt akarsz letrehozni.szerintem ez hianyzik:
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..Már kicsit érthetőbb...
Ú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:
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.
en nem talalkoztam ilyen bug-gal
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..
Megnézem
Köszi, végignézem a kódot, hátha benne maradt valahol egy nid.
Majd jelentkezem.
Megnézem
Köszi, végignézem a kódot, hátha benne maradt valahol egy nid.
Majd jelentkezem.