Table View: Titel mal verlinkt mal nicht
Eingetragen von mart1n (40)
am 06.01.2009 - 17:59 Uhr in
am 06.01.2009 - 17:59 Uhr in
Hallo Leute,
folgende Situation:
Ich habe eine Table View in der zwei Inhaltstypen angezeigt werden. In der Tabelle wird unter anderem der Node Titel angezeigt.
Ich möchte nun, dass wenn ein Node vom Typ1 ist der Node Titel auf die Node verlinkt wird. Ist ein Node vom Typ2 soll der Node Titel nur normaler Text und kein Link sein.
Ich habe es zuerst in der template.php über eine phptemplate_views_handle_field_ funktion und anschließend über eine phptemplate_views_view_table_ funktion probiert. Allerdings weiß ich nicht, wie ich den Inhaltstyp abfragen kann um dann eben einmal verlinken zu können und einmal nicht.
Gruss Martin
- Anmelden oder Registrieren um Kommentare zu schreiben
Node typ
am 07.01.2009 - 10:00 Uhr
Moin!
Immer noch das Problem aus dem IRC von gestern (unten nochmal der Code)?
In der
phptemplate_views_view_table_
, die Du gezeigt hattest, wurde doch das node-Objekt verwendet, um die einzelnen Zeilen zu erzeugen. Dieses Objekt enthält unter Anderem auch den von Dir gesuchten Inhaltstyp:$node->type
.Zusätzlich kannst Du das node-Objekt an eine Theme-Funktion für das Feld übergeben, so dass Du auch in dieser Funktion Zugriff auf sämtliche Attribute des Objekts (inkl. des Inhaltstyps) hast (siehe unten).
Die Funktion
views_theme_field()
sucht zuerst nach der Funktiontheme_views_handle_field_<VIEWNAME>_<TABLENAME>_<FIELDNAME>()
, dann nachtheme_views_handle_field_<TABLENAME>_<FIELDNAME>()
und zu guter Letzt nachtheme_views_handle_field()
.Alle drei Funktionen erwarten 3 Argumente:
$fields, $field, $data
. In$data
steht das übergeben node-Objekt, so dass Du mit$data->type
den Inhaltstyp bekommen solltest.<?php
function phptemplate_views_view_table_blah_erledigt($view, $nodes, $type) {
$fields = _views_get_fields();
foreach ($nodes as $node) {
$row = array();
foreach ($view->field as $field) {
if ($fields[$field['id']]['visible'] !== FALSE) {
$cell['data'] = views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view);
$cell['class'] = "view-field ". views_css_safe('view-field-'. $field['queryname']);
$row[] = $cell;
}
}
$rows[] = $row;
}
$table = theme('table', $view->table_header, $rows, array('cellspacing'=>'0', 'border'=>'0'));
$fieldset = array(
'#title' => t('Erledigte Sachen (!numrows)', array('!numrows' => $GLOBALS['current_view']->num_rows)),
'#description' => t('Eine Liste aller erledigten Sachen (standardmäßig ausgeblendet).'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#value' => $table,
);
return theme('fieldset', $fieldset);
}
function phptemplate_views_handle_field($fields, $field, $data) {
print 'Inhaltstyp: ' . $data->type;
}
?>
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Morgen, ja richtig immernoch
am 07.01.2009 - 10:52 Uhr
Morgen,
ja richtig immernoch das gleiche Problem.
Ich habs jetzt nochmal versucht aber im Array $data gibts bei mir kein type.
Das ist alles was ich über
<?php
function phptemplate_views_handle_field_node_title($fields, $field, $data) {
print "<pre>";
print_r($data);
print "</pre>";
return check_plain($data->$field['queryname']);
}
?>
für einen node bekomme
stdClass Object
(
[nid] => 425
[field_alarm_value] => 2008-10-21T10:36:00
[node_data_field_alarm_field_alarm_value] => 2008-10-21T10:36:00
[node_data_field_einsatznummer_0_field_einsatznummer_0_value] => 5-013
[node_title] => Angebranntes Essen
[node_changed] => 1229766493
[date_id] => Array
(
)
[date_repeat_show] =>
)
Gruss Martin
view
am 07.01.2009 - 11:06 Uhr
Hm, seltsam.
Naja, macht ja nichts. Dann holen wir uns den Typ halt selbst :-).
Entweder Du lädst Dir das komplette Node-Objekt mittels node_load() (ist jedoch zu performancehungrig für diese kleine Abfrage), oder Du schreibst die Abfrage selbst:
<?php
function my_node_get_type($node) {
$type = null;
$nid = 0;
if (is_object($node)) {
if (isset($node->type)) {
return $node->type;
}
$nid = $node->nid;
}
elseif (is_numeric($node)) {
$nid = $node;
}
if ($nid > 0) {
$result = db_query('SELECT nid, type FROM {node} WHERE nid = %d', $nid);
$nd = db_fetch_object($result);
return $nd->type;
}
return $type;
}
?>
Mit dieser Funktion (die Du irgendwo in die template.php packst, kannst Du dann den Typ eines Node-Objekts oder einer Node-Id bestimmen.
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Jipiee funktioniert! Vielen
am 07.01.2009 - 11:43 Uhr
Jipiee funktioniert!
Vielen Dank
Gruss Martin