如何以编程方式创建 Drupal 8 视图

问题描述 投票:0回答:4

我正在尝试在 Drupal 8 中以编程方式创建一个视图。类似于 Drupal 7 中的 CRUD 日志模块。我在互联网上也找不到任何参考。

drupal drupal-views
4个回答
3
投票

虽然它不是以编程方式从头开始创建,但这里有一个简单的方法:

  • 使用后台创建视图
  • 使用配置管理器模块导出单个视图
  • 复制该 yml 文件并将其放置在基本自定义模块 /config/install 文件夹中
  • 删除包含 uuid 的第一行
  • (可选)如果需要并且了解其工作原理,请手动修改文件
  • 激活您的自定义模块将导入视图

2
投票

我成功地以编程方式创建了一个视图----我做了以下事情-- 1.创建文件夹--C:\xampp\htdocs\Drupal Instance\modules 2.创建一个YML信息文件--first_view.info并添加以下代码---- 名称: 第一视角 类型: 模块 描述:我的第一个 Drupal 8 查看 包装: 定制 核心:8.x 3. 创建安装文件---first_view.install 并添加以下代码到其中

    <?php

/**
 * @file
 * Install, schema, and uninstall functions for the First View module.
 */

use Drupal\field\Entity\FieldStorageConfig;
use Drupal\taxonomy\Entity\Term;

/**
 * Implements hook_install().
 */
function first_view_install() {

}

/**
 * Implements hook_uninstall().
 */
function first_view_uninstall() {

}

/**
 * Implements hook_schema().
 */
function first_view_schema() {
 $schema['first_view_table'] = [
    // Example (partial) specification for table "node".
    'description' => 'The base table for first_view.',
    'fields' => [
      'id' => [
        'description' => 'The primary identifier for a node.',
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ],
      'name' => [
        'description' => 'The name of Employee.',
        'type' => 'varchar',
        'length' => 32,
        'not null' => TRUE,
        'default' => '',
      ],
      'age' => [
        'description' => 'The age of employee.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ],
      'is_active' => [
        'description' => 'The activity of employee.',
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ],
      'timestamp' => [
        'description' => 'The timestamp of employee.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ],
      'project_code' => [
        'description' => 'The project code of employee.',
        'type' => 'varchar',
        'length' => 32,
        'not null' => TRUE,
        'default' => 0,
      ],
    ],

    'unique keys' => [
      'id' => ['id'],
    ],
    // For documentation purposes only; foreign keys are not created in the
    // database.

    'primary key' => ['id'],
  ];
  return $schema;
}

4。创建文件---first_view.views.inc 并添加以下代码--

  <?php

/**
 * Implements hook_views_data().
 */
function first_view_views_data() {




  $data = [];


  $data['first_view_table'] = []; 
  $data['first_view_table']['table'] = []; 
  $data['first_view_table']['table']['group'] = t('First View table');
  $data['first_view_table']['table']['provider'] = 'first_view_module';

  $data['first_view_table']['table']['base'] = [

    'field' => 'id',
    'title' => t('First View table'),
    'help' => t('First View table contains example content and can be related to nodes.'),
    'weight' => -10,
  ];


  $data['first_view']['table']['join'] = [

    'node_field_data' => [
      'left_field' => 'id',
      'field' => 'id',
      'extra' => [
        0 => [
          'field' => 'published',
          'value' => TRUE,
        ],
        1 => [
          'left_field' => 'age',
          'value' => 1,
          'numeric' => TRUE,
        ],
        2 => [
          'field' => 'published',
          'left_field' => 'is_active',
          'operator' => '!=',
        ],
      ],
    ],
  ];


  $data['first_view_table']['table']['join']['node_field_data'] = [

    'left_table' => 'foo',
    'left_field' => 'id',
    'field' => 'id',
    'extra' => [
      ['left_field' => 'project_code', 'field' => 'project_code'],
      ['field' => 'age', 'value' => 0, 'numeric' => TRUE, 'operator' => '>'],
    ],
  ];


  $data['first_view_table']['id'] = [
    'title' => t('Example content'),
    'help' => t('Relate example content to the node content'),

    'relationship' => [
      'base' => 'node_field_data',
      'base field' => 'id',
      'id' => 'standard',
      'label' => t('Example node'),
    ],
  ];


  $data['first_view_table']['name'] = [
    'title' => t('Name'),
    'help' => t('Just a Name field.'),
    'field' => [
      'id' => 'standard',
    ],

    'sort' => [
      'id' => 'standard',
    ],

    'filter' => [
      'id' => 'string',
    ],

    'argument' => [
      'id' => 'string',
    ],
  ];


  $data['first_view_table']['project_code'] = [
    'title' => t('Project Code'),
    'help' => t('Just a Project code field.'),
    'field' => [
      'id' => 'standard',
    ],

    'sort' => [
      'id' => 'standard',
    ],

    'filter' => [
      'id' => 'string',
    ],

    'argument' => [
      'id' => 'string',
    ],
  ];

  $data['first_view_table']['age'] = [
    'title' => t('Age'),
    'help' => t('Just a numeric field.'),

    'field' => [
      'id' => 'numeric',
    ],

    'sort' => [
      'id' => 'standard',
    ],

    'filter' => [
      'id' => 'numeric',
    ],

    'argument' => [
      'id' => 'numeric',
    ],
  ];


  $data['first_view_table']['is_active'] = [
    'title' => t('Is Active'),
    'help' => t('Just an on/off field.'),

    'field' => [
      'id' => 'boolean',
    ],

    'sort' => [
      'id' => 'standard',
    ],

    'filter' => [
      'id' => 'boolean',
      'label' => t('Published'),
      'type' => 'yes-no',
      'use_equal' => TRUE,
    ],
  ];


  $data['first_view_table']['timestamp'] = [
    'title' => t('Timestamp'),
    'help' => t('Just a timestamp field.'),

    'field' => [
      'id' => 'date',
    ],

    'sort' => [
      'id' => 'date',
    ],

    'filter' => [
      'id' => 'date',
    ],
  ];


  $data['views']['area'] = [
    'title' => t('Text area'),
    'help' => t('Provide markup text for the area.'),
    'area' => [
      'id' => 'text',
    ],
  ];

  return $data;
}

按照上述步骤...当我们安装并启用该模块时,会在数据库中创建一个表...您必须填充它才能在视图中查看一些数据...不要忘记在表中添加虚拟数据......之后转到结构/视图---然后单击“添加视图”----为你的视图命名---然后你将能够看到“显示”下拉框中的表名称---在本例中,表名称是“第一个视图表”...我希望这篇文章会对您有所帮助....


2
投票

您可以通过ConfigEntityStorage创建一个新的View。

在 UI 中创建视图。将视图的 YAML 配置文件导出到模块中的路径,删除 UUID。

// view config is in `my_module/config/install/views.view.my_view.yml`
// (uuid removed!)

$dir = drupal_get_path('module', 'my_module');
$fileStorage = new FileStorage($dir);
$config = $fileStorage->read('views.view.my_view');

/** @var \Drupal\Core\Config\Entity\ConfigEntityStorage $storage */
$storage = \Drupal::entityTypeManager()
  ->getStorage('view');

/** @var \Drupal\views\Entity\View $view */
$view = $storage->create($config);

$view->save();

0
投票

基于 Tim 的 2020,这适用于 Drupal 10:

/**
 * Add my_view as default view.
 */
function my_module_update_8001() {
  $dir = \Drupal::service('extension.path.resolver')->getPath('module', 'my_module') . '/config/install/';
  $fileStorage = new \Drupal\Core\Config\FileStorage($dir);
  $config = $fileStorage->read('views.view.my_view');

  /** @var \Drupal\Core\Config\Entity\ConfigEntityStorage $storage */
  $storage = \Drupal::entityTypeManager()
    ->getStorage('view');

  /** @var \Drupal\views\Entity\View $view */
  $view = $storage->create($config);

  $view->save();
}
© www.soinside.com 2019 - 2024. All rights reserved.