+ Telepítés

WindowsLinuxMac

+ Keresés

Views 2 API - nincs node ID

Patuzzi képe

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:

<?php
// 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ó: 
Pasqualle képe

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.

0
0
Patuzzi képe

Köszönöm, kipróbálom.
Majd jelentkezem az eredménnyel.

0
0
Patuzzi képe

Á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:

<?php
$data['ft_person']['table']['join'] = array(
'node' => array(
'left_table' => 'node',
'left_field' => 'nid',
'field' => 'pe_drupal_nid',
),
);
// ...
?>

É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.

0
0
Patuzzi képe

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.

0
0
Pasqualle képe

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:
<?php
$result = db_query("SELECT * FROM {node} n JOIN {node_revisions} nr ON n.nid = nr.nid ORDER BY n.nid");

while ($row = db_fetch_object($result)) {
print $row->nid .' '. $row->title .'
';
}
?>
gondolom az tortenik, hogy ha a join-olt tablaban azonos nevu oszlop szerepel az kimarad (vagy auto alias-t kap? nem tudom)

0
0
Pasqualle képe

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.

nem kellene minden típushoz (numeric, string, date stb.) külön handlert írni

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..

0
0