簡體   English   中英

如何以編程方式創建 Drupal 8 視圖

[英]How to create a Drupal 8 view programmatically

我正在嘗試在 Drupal 8 中以編程方式創建一個視圖。類似於 Drupal 7 中的 crud 日志模塊。我在互聯網上也找不到任何參考資料。

我成功地以編程方式創建了一個視圖----我做了以下-- 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;
}

按照上述步驟....當我們安裝並啟用模塊時,會在數據庫中創建一個表...您必須填充它才能在視圖中看到一些數據...不要忘記添加表中的虛擬數據.....之后轉到結構/視圖---然后單擊“添加視圖”----為視圖命名---然后您將能夠看到該表“顯示”下拉框中的名稱---在這種情況下,表名稱是“第一視圖表”...我希望這篇文章會有所幫助....

雖然它不是以編程方式從頭開始創建的,但這里有一個簡單的方法:

  • 使用后台創建視圖
  • 使用配置管理器模塊導出單個視圖
  • 復制該 yml 文件並將其放在基本的自定義模塊 /config/install 文件夾中
  • 刪除包含 uuid 的第一行
  • (可選)如果需要並且了解其工作原理,請手動修改文件
  • 激活您的自定義模塊將導入視圖

您可以通過 ConfigEntityStorage 創建一個新的視圖。

在 UI 中創建視圖。 將視圖的 YAML 配置文件導出到模塊中的路徑,刪除 UUID。

// view config is in `my_module/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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM