Block Inhalt
am 23.04.2008 - 13:57 Uhr in
Ich habe einen Block erstellt, der eine View beinhaltet. Für den Block habe ich ein Template erstellt und das funktioniert soweit. Ich kann aber nur den gesamten Inhalt des Blocks formatieren $block->content. Ist es möglich auf die einzelnen Teile des Contents separat zuzugreifen? Als Beispiel: Mein Content besteht aus Name, Bild, Titel, ... . Ich möchte diese Elemente einzeln formatieren. Bitte um Hilfe!
- Anmelden oder Registrieren um Kommentare zu schreiben

Ja das geht, nutze am Besten
am 23.04.2008 - 14:15 Uhr
Ja das geht, nutze am Besten den mitgelieferten Wizard von Views (rechts unten bei den Ansichten). Darüber wählst du dann deinen Block aus, wählst z.B. Listenansicht, und lässt dir das Ganze anzeigen. Danach erhälst du einen Codeteil der in die template.php gehört, danach einen der als neue Datei erstellt gehört, meist in dieser Form: views-list-Deinblockname.tpl.php, zudem eine CSS-Datei bei der dir überlassen bleibt ob du sie nutzt, oder nicht.
In der views-list-Deinblockname.tpl.php findest du dann in aller Regel auch alle Felder die du dem View zugewiesen hast, und kannst sie themen und platzieren wie du willst.
Der Wizard erlaubt zudem nur Listenansichten, das kannst du aber umgehen indem zuvor erwähnten template-Teil folgendes ersetzt:
Suche:
if ($items) {return theme('item_list', $items);
}
}
Ersetze durch:
if ($items) {return implode(" ",$items);
}
}
Habe recht lange gebraucht das zu finden. :) Wenn du dazu noch Fragen hast melde dich ruhig, ist ein recht verworrenes Thema. :)
Grüße vom,
Genesis
Danke erstmal für die ...
am 23.04.2008 - 14:26 Uhr
Danke erstmal für die Hilfe, aber mein Block ist leer sobald ich die von dir angegebene Änderung mache. Muss ich da in meinem Template was ändern?
Normalerweise nicht.
am 23.04.2008 - 14:54 Uhr
Normalerweise nicht. Zumindest der Titel sollte z.B. ausgegeben werden, da dieser Standard ist, geauso wie der Content als solches. Für Felder die du in CCK erstellt hast musst du noch weitere template-Dateien erstellen. Und zwar haben diese folgenden Dateinamen: field-field_deinname.tpl.php
Du musst dazu mal schauen wie genau deine Feldbezeichnungen sind. Für jedes Feld musst du eine Datei erstellen, welche folgenden Inhalt hat, und das immer den Gleichen:
<?php if (!$field_empty) : ?>
<?php if ($label_display == 'hidden') : ?>
<?php print $label ?>:
<?php endif;?>
<?php foreach ($items as $delta => $item) :
if (!empty($item['view']) || $item['view'] === "0") : ?>
<?php if ($label_display == 'hidden') { ?>
<?php print $label ?>:
<?php } ?>
<?php print $item['view'] ?>
<?php endif;
endforeach;?>
<?php endif; ?>
Wird dein Block denn angezeigt wenn du nichts änderst? Wo genau lässt du ihn anzeigen? Hast du die Änderungen an der template.php vorgenommen, und liegt alles im Stammverzeichnis deines Themes?
Grüße vom,
Genesis
Hier mein source
am 23.04.2008 - 14:55 Uhr
Hier mein source von template.php:
<?php
function phptemplate_views_view_list_sidebar_view($view, $nodes, $type) {
$fields = _views_get_fields();
$taken = array();
// Set up the fields in nicely named chunks.
foreach ($view->field as $id => $field) {
$field_name = $field['field'];
if (isset($taken[$field_name])) {
$field_name = $field['queryname'];
}
$taken[$field_name] = true;
$field_names[$id] = $field_name;
}
// Set up some variables that won't change.
$base_vars = array(
'view' => $view,
'view_type' => $type,
);
foreach ($nodes as $i => $node) {
$vars = $base_vars;
$vars['node'] = $node;
$vars['count'] = $i;
$vars['stripe'] = $i % 2 ? 'even' : 'odd';
foreach ($view->field as $id => $field) {
$name = $field_names[$id];
$vars[$name] = views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view);
if (isset($field['label'])) {
$vars[$name . '_label'] = $field['label'];
}
}
$items[] = _phptemplate_callback('views-list-sidebar_view', $vars);
}
if ($items) {
return theme(" ", $items);
}
}
?>
views-list-sidebar_view.tpl.php:
<?php
drupal_add_css(path_to_theme() .'/views-list-sidebar_view.css');
?>
<?phpprint $field_name_value_label
?>
<?phpprint $field_name_value
?>
<?phpprint $field_degree_value_label
?>
<?phpprint $field_degree_value
?>
<?phpprint $field_expert_image_fid_label
?>
<?phpprint $field_expert_image_fid
?>
Wie gesagt, ich habe deine Änderung in Template.php durchgeführt: return theme(" ", $items);
und bekomme nur mehr einen leeren Block!
Bitte um weitere Hilfe!!
Mein Block wird in der
am 23.04.2008 - 15:02 Uhr
Mein Block wird in der rechten Sidebar angezeigt und die Änderungen habe ich in der Template.php vorgenommen. Alles liegt im Verzeichnis meines Themes.
Wie muss ich die Template Dateien benennen? block-FELDNAME.tpl.php? view-FELDNAME.tpl.php?
Ach ja, die Files habe ich mit dem Theme Designer der Views erstellt (template.php, views-list-sidebar_view.tpl.php und views-list-sidebar_view.css.
Thx
Die Tempaltedateien für die
am 23.04.2008 - 15:21 Uhr
Die Tempaltedateien für die Felder musst du deinen Feldern anpassen, nehmen wir mal eines als Beispiel:
field-field_degree.tpl.php
Das ist aber nur für die CCK-Felder!
Ansonsten stimmt da alles, bis auf eine Sache die ich nun erkennen würde. Der Code in der template.php wird mit
<?phpgeöffnet, und mit
?>
Also gehört es so in die template.php:
function phptemplate_views_view_list_sidebar_view($view, $nodes, $type) {
$fields = _views_get_fields();
$taken = array();
// Set up the fields in nicely named chunks.
foreach ($view->field as $id => $field) {
$field_name = $field['field'];
if (isset($taken[$field_name])) {
$field_name = $field['queryname'];
}
$taken[$field_name] = true;
$field_names[$id] = $field_name;
}
// Set up some variables that won't change.
$base_vars = array(
'view' => $view,
'view_type' => $type,
);
foreach (
$nodes as $i => $node) {
$vars = $base_vars;
$vars['node'] = $node;
$vars['count'] = $i;
$vars['stripe'] = $i % 2 ? 'even' : 'odd';
foreach ($view->field as $id => $field) {
$name = $field_names[$id];
$vars[$name] = views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view);
if (isset($field['label'])) {
$vars[$name . '_label'] = $field['label'];
}
}
$items[] = _phptemplate_callback('views-list-sidebar_view', $vars);
}
if ($items) {
return theme(" ", $items);
}
}
Die Dateien als solches sind absolut richtig benannt!
Grüße vom,
Genesis
Den php-Code habe ich nur
am 23.04.2008 - 15:59 Uhr
Den php-Code habe ich nur fürs Forum mit
<?php
?>
<?phpif (!$field_empty) :
?>
<?phpif ($label_display == 'hidden') :
?>
<?phpprint $label
?>
<?phpendif;
?>
<?phpforeach ($items as $delta => $item) :
if (!empty($item['view']) || $item['view'] === "0") :
?>
<?phpif ($label_display == 'hidden') {
?>
<?phpprint $label
?>
<?php}
?>
<?phpprint $item['view']
?>
<?phpendif;
endforeach;
?>
<?phpendif;
?>
die obrig beschriebenen Templates, CSS Dokumente gibts noch immer. Weiters habe ich die View auf Listenansicht (sonst klappt das mit dem Template ja nicht), aber ich bekomme nach wie vor nur den Titel des Blocks und keinen Inhalt. Das ist seit der Änderung auf return theme(" ", $items); so!
Danke für die Hilfe!