Maison >développement back-end >tutoriel php >Exposer des tables à des vues dans Drupal 7

Exposer des tables à des vues dans Drupal 7

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌original
2025-02-21 08:39:10272parcourir

Exposing Tables to Views in Drupal 7

Concepts clés

Ce didacticiel montre comment intégrer les tables de base de données Drupal 7 personnalisées avec le module Views, permettant de puissantes capacités de requête et de présentation de données. Nous couvrirons la prise de vue de la structure de table de votre module, la définition de gestionnaires de champs pour l'affichage, le filtrage et le tri et l'établissement de relations entre les tables à l'aide de jointures. Le processus exploite les gestionnaires de vues - classes gérant les opérations d'affichage, de tri et de filtrage - permettant la personnalisation au-delà des fonctionnalités par défaut.

Ce guide se concentre sur les tables non représentées comme des entités Drupal. Pour l'intégration d'entité avec les vues, veuillez vous référer à d'autres ressources.

Un exemple de module, "Expose", est disponible (détails du référentiel omis pour la concision). Le tableau exposed (structure détaillée ci-dessous) sera utilisé pour la démonstration. Les exemples de données peuvent être insérés à l'aide de cette commande MySQL:

<code class="language-sql">INSERT INTO `exposed` (`id`, `name`, `deadline`, `node_id`) VALUES (1, 'Danny', 1399477939, 1), (2, 'Peter', 1399477957, 2);</code>

Intégration de votre table avec les vues

L'intégration implique deux étapes clés: information des vues sur votre module et définition de la structure de votre table.

Étape 1: Informer les vues sur votre module

implémenter hook_views_api() dans le fichier .module de votre module:

<code class="language-php">/**
 * Implements hook_views_api().
 */
function expose_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'expose') . '/includes/views',
  );
}</code>

Cela spécifie la version API des vues et l'emplacement de vos fichiers liés aux vues.

Étape 2: Définition de la structure de votre table

Créer expose.views.inc (dans le répertoire spécifié ci-dessus) et implémenter hook_views_data():

<code class="language-php">/**
 * Implements hook_views_data().
 */
function expose_views_data() {
  $data = array();
  $data['exposed']['table']['group'] = t('Exposed');
  $data['exposed']['table']['base'] = array(
    'title' => t('Exposed'),
    'help' => t('Contains records exposed to Views.'),
  );
  // Field definitions (see below)
  return $data;
}</code>

Ce code définit le groupe de la table et le désigne comme une table de base, ce qui la rend disponible dans l'interface des vues. Les définitions de champ (détaillées suivantes) seront ajoutées ici.

Étape 3: Définition des champs

Dans hook_views_data(), ajoutez des définitions de champ pour chaque colonne:

<code class="language-php">// ... (previous code) ...

// ID field
$data['exposed']['id'] = array(
  'title' => t('ID'),
  'help' => t('Record ID'),
  'field' => array('handler' => 'views_handler_field_numeric'),
  'sort' => array('handler' => 'views_handler_sort'),
  'filter' => array('handler' => 'views_handler_filter_numeric'),
);

// Name field
$data['exposed']['name'] = array(
  'title' => t('Name'),
  'help' => t('Record name'),
  'field' => array('handler' => 'views_handler_field'),
  'sort' => array('handler' => 'views_handler_sort'),
  'filter' => array('handler' => 'views_handler_filter_string'),
);

// Deadline field
$data['exposed']['deadline'] = array(
  'title' => t('Deadline'),
  'help' => t('Record deadline'),
  'field' => array('handler' => 'views_handler_field_date'),
  'sort' => array('handler' => 'views_handler_sort_date'),
  'filter' => array('handler' => 'views_handler_filter_date'),
);

// ... (Node ID field and join definition - see below) ...

return $data;</code>

Cela spécifie les gestionnaires pour l'affichage (field), le tri (sort) et le filtrage (filter) pour chaque colonne. Les gestionnaires appropriés (par exemple, numérique, chaîne, date) sont sélectionnés en fonction des types de données.

Étape 4: Gestion des relations (rejoindre)

pour rejoindre le tableau node en utilisant la colonne node_id:

<code class="language-php">// ... (previous code) ...

// Join definition
$data['exposed']['table']['join'] = array(
  'node' => array(
    'left_field' => 'nid',
    'field' => 'node_id',
  ),
);

// Node ID field
$data['exposed']['node_id'] = array(
  'title' => t('Node ID'),
  'help' => t('Node ID'),
  'field' => array('handler' => 'views_handler_field_node'),
  'sort' => array('handler' => 'views_handler_sort'),
  'filter' => array('handler' => 'views_handler_filter_numeric'),
  'relationship' => array(
    'base' => 'node',
    'field' => 'node_id',
    'handler' => 'views_handler_relationship',
    'label' => t('Node'),
  ),
  'argument' => array(
    'handler' => 'views_handler_argument_node_nid',
    'numeric' => TRUE,
    'validate type' => 'nid',
  ),
);

return $data;</code>

Ceci définit la jointure et spécifie le gestionnaire views_handler_field_node pour l'affichage, permettant l'accès aux champs liés au nœud. Une relation et un argument sont également définis pour le filtrage et le filtrage contextuel basé sur l'ID de nœud.

Après implémentation de ces étapes, effacez le cache de Drupal. Votre table personnalisée doit désormais être accessible dans l'interface des vues.

Conclusion

Cette explication détaillée fournit un guide complet pour intégrer les tables personnalisées avec le module Views de Drupal 7. N'oubliez pas d'adapter les sélections de gestionnaires à vos types de données spécifiques et de tirer parti de la flexibilité des gestionnaires personnalisés pour les fonctionnalités avancées. La section FAQ de l'entrée d'origine a été omise car elle est largement couverte dans cette réponse raffinée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn