Message d'avertissement

The subscription service is currently unavailable. Please try again later.

Themer une vue : petit problème

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Hello,

J'essaye de personnaliser l'affichage de mes vues, ca marche pas trop mal, je commence à saisir tout le potentiel de Drupal de ce coté là.

Voici la code que j'ai dans mon template.php pour personaliser ma vue (c'est basé sur le code par défaut que j'ai adapté un peu à des besoins spécifiques).

function phptemplate_views_view_list($view, $nodes, $type) {
  $fields = _views_get_fields();
  $j = 0;
  $last = '';
  $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'];
      }
    }

/* !MOFIF! -> On attribue la classe "last" au dernier ou aux deux derniers éléments de la vue suivant sa parité */
  if (sizeof($nodes)%2 == 0) {
      if ($i >= (sizeof($nodes)-2)) { $last = 'last '.'number-'.sizeof($nodes).' '; } else { $last = ''; }
  } else {
      if ($i >= (sizeof($nodes)-1)) { $last = 'last '.'number-'.sizeof($nodes).' '; } else { $last = ''; }
  }
$items[] = array(
        'data' => _phptemplate_callback('views-list-actualite', $vars),
        'class' => $last.'disc-' . $j,
'name' => $view->name,
);

if ($j >= 1) {
  $j = 0;
} else {
  $j++;
}

  }
  if ($items) {
    return theme('view_item_list', $items);
  }

}

function phptemplate_view_item_list($items = array(), $title = NULL, $type = 'ul') {
  #$output = '<div class="item-list">';
  $output = '';
  if (isset($title)) {
    $output .= '<h3>'. $title .'</h3>';
  }

  if (!empty($items)) {
    $class = $items[0]['name'];
    $output .= "<$type class="view view-$class">";
    foreach ($items as $item) {
      $output .= phptemplate_view_item_list_item($item);
    }
    $output .= "</$type>";
  }
  #$output .= '</div>';
  return $output;
}

function phptemplate_view_item_list_item($item) {
  $attributes = '';
  if (is_array($item)) {
    $data = $item['data'];
    foreach ($item as $key => $value) {
      if ($key != 'data')  {
        $attributes .= " $key="$value"";
      }
    }
  }
  else {
    $data = $item;
  }

  return "<li$attributes>$data</li>";
}

Ca marche plutot bien jusqu'ici, mais j'ai encore 2 div indésirable au début de ma vue

<div class='view view-actualite'><ul class="view view-actualite">

J'ai trouvé dans le handbook comment redéfinir ces div, c'est en mettant la fonction "theme_views_view function" dans mon template.php

function phptemplate_views_view($view, $type, $nodes, $level = NULL, $args = NULL) {
  $num_nodes = count($nodes);

  if ($type == 'page') {
    drupal_set_title(views_get_title($view, 'page'));
    views_set_breadcrumb($view);
  }

  if ($num_nodes) {
    $output .= views_get_textarea($view, $type, 'header');
  }

  if ($type != 'block' && $view->exposed_filter) {
    $output .= views_theme('views_display_filters', $view);
  }

  if ($num_nodes) {

    if ($level !== NULL) {
      $output .= views_theme('views_summary', $view, $type, $level, $nodes, $args);
    }
    else {
      $plugins = _views_get_style_plugins();
      $view_type = ($type == 'block') ? $view->block_type : $view->page_type;
      $output .= views_theme($plugins[$view_type]['theme'], $view, $nodes);
    }
    $output .= views_get_textarea($view, $type, 'footer');

    if ($type == 'block' && $view->block_more && $num_nodes >= $view->nodes_per_block) {
      $output .= theme('views_more', $view->real_url);
    }
  }
  else {
    $output .= views_get_textarea($view, $type, 'empty');
  }

  if ($view->use_pager) {
    $output .= theme('pager', '', $limit, $view->use_pager);
  }

  if ($output) {
    $output = "$output\n";
  }
  return $output;
}

Ca marche, les div que je voulais supprimer ne sont plus là, mais j'ai une erreur en haut de ma vue :

warning: Missing argument 3 for phptemplate_views_view_list() in D:\Taf\Mysociety\www\sites\mysite.com\themes\mytheme\template.php on line 118.

La ligne 118 c'est la ligne ou il y a ca : function phptemplate_views_view_list($view, $nodes, $type) { ... }

Un petit coup de pouce serait le bienvenue ^^

Merci

Version de Drupal :