Pouvez-vous appeler un modèle de vues Drupal pour plusieurs vues?
-
20-08-2019 - |
Question
J'ai utilisé l’assistant Views Theming pour générer un modèle et il m’a donné le bloc de code suivant à insérer dans template.php.
Je préférerais simplement conserver le modèle unique, afin que toutes mes fonctions appellent le même et que, plutôt que d'écrire plusieurs versions de la même fonction, je me demande s'il est possible de chaîner les noms de fonctions ensemble. Quelque chose comme:
function phptemplate_views_view_list_recent_articles($view, $nodes, $type),
phptemplate_views_view_list_popular_articles($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-first-with-abstract', $vars);
}
if ($items) {
return theme('item_list', $items);
}
}
Merci,
Steve
La solution
Vous pouvez simplement demander aux modèles dont vous avez besoin d'appeler une version de la fonction réelle.
Quelque chose comme:
function phptemplate_views_view_list_recent_articles($view, $nodes, $type){
actual_template_function($view, $nodes, $type);
}
function phptemplate_views_view_list_popular_articles($view, $nodes, $type){
actual_template_function($view, $nodes, $type);
}
Autres conseils
Une correction ci-dessus m'a ralentie pendant une heure et demie ... votre besoin d'inclure une déclaration:
return actual_template_function($view, $nodes, $type);
En dehors de cela, fonctionne très bien.