Saját modulból kezelt saját táblákat szeretnék Views2-vel listázni.
A keresés és listázás maga jó, de a szövegekhez kapcsolódó összes link (Link to Node) mindig 0-t hoz.
Érthetőbben mindig www.akarmi.hu/node/0
Mi hiányozhat még?
A modulnev.views.inc így néz ki:
// implementation attempt of hook_views_data function family_tree_views_data() { // Define the base group of this table. Fields that don't // have a group defined will go into this field by default. $data['ft_person']['table']['group'] = t('Családfa személy'); // For other base tables, explain how we join $data['ft_person']['table']['join'] = array( 'node' => array( 'left_table' => 'node', 'left_field' => 'nid', 'field' => 'pe_drupal_nid', ), ); $data['ft_person']['pe_family_name'] = array( 'title' => t('Családnév'), 'help' => t('Családfában szereplő személy családneve'), 'field' => array( 'handler' => 'views_handler_field_node', // default 'click sortable' => TRUE, ), 'filter' => array( 'handler' => 'views_handler_filter_string', // default 'label' => t('Név'), ), 'sort' => array( 'handler' => 'views_handler_sort', // default ), ); ...... return $data; }
Drupal verzió:
Fórum:
views_handler_field_node <=> pe_drupal_nid
Az a gond, hogy a views_handler_field_node a nid oszloppal dolgozik mig neked pe_drupal_nid oszlopod van az ft_person tablaban.
Ha a pe_drupal_nid oszlopot atnevezned nid-re az ft_person tablaban akkor mukodne a kod.
Ha nem akarod atnevezni az oszlopot akkor sajat handler-t kell irnod a views_handler_field_node alapjan ahol a nid helyett mindenhol pe_drupal_nid-et hasznalsz.
meg egy kiegeszites:
a join reszhez betennem, hogy 'type' => 'INNER', igy nem kell a node listat meg kulon szurni, mert igy csak olyan node-okat fog kivalasztani amik szerepelnek a sajat tabladban is.
Köszönöm, kipróbálom
Köszönöm, kipróbálom.
Majd jelentkezem az eredménnyel.
Tényleg az volt a hiba
Átneveztem az oszlopot 'nid'-re és jó lett, köszönöm.
Csak át kellett a modulban is írni a hivatkozásokat is.
Azt hittem, hogy a join ezt automatikusan megoldja:
Én úgy érzem, hogy ez egy kis hiányossága a Views-nak...
Szerintem csak ezért nem kellene minden típushoz (numeric, string, date stb.) külön handlert írni.
Nem szeretem az egyforma mezőket.
Azért nem szoktam adatbázisokban egyforma mezőneveket használni, mert akkor nem kell minősíteni őket (táblanév.név). Inkább az első két karakterben jelölöm a tábla nevét.
Most a Views miatt több 'nid' mezőm lesz, így aliast kell használni, és a 'select * from' sem működik több táblánál.
De ez szokás kérdése biztos.
szerintem ez rossz szokas
en szeretem ha minden tablaban az egyforma adatok egyforma nevvel szerepelnek. Kar, hogy a Drupal sem kovetkezetes ebbol a szempontbol (pl cid, pid mast jelenthet tablatol fuggoen).
a "SELECT * FROM ... JOIN ..." forma mukodik alias nelkul is, itt egy pelda:
gondolom az tortenik, hogy ha a join-olt tablaban azonos nevu oszlop szerepel az kimarad (vagy auto alias-t kap? nem tudom)
hianyossag
egesz biztosan lehetne a views_handler_field_node helyett egy altalanosabb handler-t irni ami kepes lenne barmilyen oszlopnevvel osszekapcsolni a node tablat, de a legotobb modulnak es az alap Drupalnak is elegendo ez a handler.
ez igazabol nem ertem. hogyan jutottunk el a tabla oszlop nevetol a oszlop tipusahoz? nem latom az osszefuggest.. A tipusok szerinti kulon handler-re szukseg van mert mas opciok kellenek az admin feluletre es altalaban maskepp is kell megjeleniteni..