From drupal-core
Manage Drupal Views -- creating views, configuring displays, adding fields/filters/sorts/relationships/contextual filters, setting formats, page/block settings, and more.
npx claudepluginhub ajv009/drupal-devkitThis skill uses the workspace's default tool permissions.
Views is Drupal's query builder and display system for creating dynamic listings of content, users, taxonomy terms, and more.
Guides field type selection, entity CRUD operations, view modes, and content modeling for Drupal 10/11. Use when designing content types, selecting fields, or using Entity API.
Provides expert guidance on Webflow CMS architecture and best practices for planning collections, setting up relationships, optimizing content structure, and troubleshooting issues.
Configures TYPO3 v14 Records List Types extension for backend Records module with grid, compact, teaser, custom views, thumbnails, drag-and-drop, dark mode via TSconfig + Fluid templates. Use for custom record listings.
Share bugs, ideas, or general feedback.
Views is Drupal's query builder and display system for creating dynamic listings of content, users, taxonomy terms, and more.
node_field_data for content, users_field_data for users, taxonomy_term_field_data for taxonomy terms, media_field_data for media, comment_field_data for comments.Handlers are the building blocks of a view's query and output:
/articles/% where % is a taxonomy term ID).All handler operations use the same tools (AddHandler, UpdateHandler, RemoveHandler, ListHandlers) with a handler_type parameter.
Different filter types require different value formats. The tools auto-normalize, but for reference:
{"value": "1"} for true, {"value": "0"} for false{"value": {"article": "article"}}. Multiple: {"value": {"article": "article", "page": "page"}}{"value": {"en": "en"}}{"value": "some text"}The tools automatically convert between formats when needed, so either format will work.
Before adding handlers, use GetViewsData to discover available table+field combinations:
table="node_field_data") for fields on a specific entity typeThe result tells you what table and field values to use in AddHandler.
Each display has a style plugin (how to arrange items) and a row plugin (what each item looks like):
Style plugins (set via SetDisplayFormat):
default -- Unformatted list (each row in a div)table -- HTML table with sortable columns. Options: columns, info (column settings), default sort, sticky headersgrid -- CSS grid layout. Options: columns count, alignmentgrid_responsive -- Responsive CSS gridhtml_list -- HTML ul/ol list. Options: type (ul/ol), classRow plugins:
fields -- Render individual fields (most common with table/grid/list styles)entity:node -- Render full node using a view mode (teaser, full, etc.)entity:user, entity:taxonomy_term, etc. -- Entity rendering for other types| # | Tool | Operation | Description |
|---|---|---|---|
| 1 | ListViews | Read | Lists all views with their id, label, base_table, status, and display count |
| 2 | GetView | Read | Gets full details of a view including all displays with their types, titles, and key settings overview |
| 3 | CreateView | Write | Creates a new view with the given id, label, description, and base_table. Automatically creates a default display |
| 4 | DeleteView | Write | Deletes a view by its machine name. Permanently removes the view and all its displays |
| 5 | GetDisplay | Read | Gets full details of a specific display including all settings, handlers, style/row plugins, access, pager, and page/block settings |
| 6 | AddDisplay | Write | Adds a new display (page, block, feed, attachment, etc.) to a view. Returns the generated display_id |
| 7 | DeleteDisplay | Write | Deletes a display from a view. Cannot delete the "default" display |
| 8 | UpdateDisplaySettings | Write | Updates display-level options via a JSON settings object. Supports: title, css_class, use_ajax, group_by, use_more, access, pager, cache, exposed_form, and more |
| 9 | SetDisplayFormat | Write | Sets the style (format) and row plugins for a display. Style types: table, default, grid, grid_responsive, html_list. Row types: fields, entity:node, entity:user, etc. |
| 10 | UpdatePageBlockSettings | Write | Updates display-type-specific settings. For pages: path, menu, tab_options. For blocks: block_description, block_category, allow |
| 11 | ListHandlers | Read | Lists all handlers of a given type (field, filter, sort, relationship, argument, header, footer, empty) for a specific display |
| 12 | AddHandler | Write | Adds a handler (field, filter, sort, relationship, argument, header, footer, or empty) to a view display |
| 13 | UpdateHandler | Write | Updates an existing handler configuration by merging provided options into the existing config |
| 14 | RemoveHandler | Write | Removes a handler (field, filter, sort, relationship, argument, header, footer, or empty) from a view display |
| 15 | GetViewsData | Read | Searches available tables and fields from the Views data cache. Returns matching table+field combos with handler types and help text |
node_field_datapagefield)filter, table node_field_data, field status, options {"value": "1"})filter, table node_field_data, field type, options {"value": {"article": "article"}})sort, options {"order": "DESC"}){"exposed": true, "expose": {"label": "Content type", "identifier": "type"}, "value": {"article": "article"}}{"exposed_form": {"type": "basic", "options": {"submit_button": "Apply", "reset_button": true}}}block{"pager": {"type": "full", "options": {"items_per_page": 25, "offset": 0}}}{"pager": {"type": "mini", "options": {"items_per_page": 10}}}{"pager": {"type": "none", "options": {}}}{"pager": {"type": "some", "options": {"items_per_page": 5}}}{"access": {"type": "perm", "options": {"perm": "access content"}}}{"access": {"type": "role", "options": {"role": {"authenticated": "authenticated"}}}}{"access": {"type": "none", "options": {}}}header (or footer/empty), table views, field area_text_custom, options {"content": "My custom header text", "tokenize": false}views, field result, options {"content": "Displaying @start - @end of @total"}argument, appropriate table/field{"default_action": "default", "default_argument_type": "fixed", "default_argument_options": {"argument": "1"}}{"default_action": "default", "default_argument_type": "raw", "default_argument_options": {"index": 0}}{"specify_validation": true, "validate": {"type": "entity:node", "fail": "not found"}}relationship, e.g., table node_field_data, field uid for author{"admin_label": "Content author", "required": true}UpdateDisplaySettings accepts any display option as a key. Common ones:
title: The view title shown to userscss_class: CSS classes on the view wrapperuse_ajax: true/false -- AJAX-enable the viewgroup_by: true/false -- Enable aggregation (GROUP BY)use_more: true/false -- Show a "more" linkuse_more_always: true/false -- Show "more" even with fewer resultsuse_more_text: Text for the more linkexposed_block: true/false -- Put exposed form in a blocklink_display, link_url: Where "more" links pointentity:node with view_mode teaser) for rich content displays.