✍️
Dev Patterns
  • Dev Patterns: Introduction
  • Drupal 8
    • Form Alter
      • data-twig-suggestion preprocess
      • Address field #after_build
    • Language
      • Language direction classes
      • Set twig variables for languages
      • Get the language direction (PHP)
    • Routes
      • Alter page title based on route
    • Preprocess Page
      • Preprocess users
      • Check if a node has body content and create a variable
    • Preprocess HTML
      • Check node ids and field values in preprocess_html
      • Add a body class based on route
    • General Theming
      • Preprocess Paragraph
      • Paragraph theme hook for a specific field value
      • Field theme hook suggestion based on the entity string
    • Twig
      • Twig include file
      • Twig loops
      • Loop index
    • Page alter
      • Page title theme hook
      • Page content type theme hook
      • Region alter
    • Users
      • Twig user variables
      • User view mode theme hook
    • Fields
      • Replace field name
      • Count number in a multi-value field array
    • Terminal
      • Query block ids for use with twig tweak
      • Check for available updates in terminal
  • Drupal 7
    • Create View modes programtically
    • Node form alter
    • Element Children
Powered by GitBook
On this page

Was this helpful?

  1. Drupal 8
  2. General Theming

Field theme hook suggestion based on the entity string

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 * Used to add a generic field twig template without any
 * wrapping divs to have more
 * control over styles.
 *
 * @see: https://www.previousnext.com.au/blog/bare-templates-removing-unnecessary-markup-twig-files
 */
function dev_patterns_theme_suggestions_field_alter(&$hooks, $vars) {
  // Get the element names passed on when a page is rendered.
  $name = $vars['element']['#field_name'];

  // Define the field element.
  $element = $vars['element'];

  // Build the string layout for the fields,
  // these fields will use the no-markup twig template.
  // <entity type>:<bundle name>:<view mode>:<field name>.
  $bare_hooks = [
    'block_content:picture_button:rectangular:field_button_link',
    'block_content:picture_button:rectangular:field_picture_button_image',
    'block_content:callout:full:body',
    'media:event_cta_image:tile:thumbnail',
    'paragraph:links_downloads:default:field_links_downloads',
    'paragraph:slider:default:field_slides',
    'paragraph:slider:slide:field_slides',
  ];

  // Build the actual var structure from second parameter.
  $hook = implode(':', [
    $vars['element']['#entity_type'],
    $vars['element']['#bundle'],
    $vars['element']['#view_mode'],
    $vars['element']['#field_name'],
  ]);

  // Check if the strings match and assign the bare template.
  if (in_array($hook, $bare_hooks, TRUE)) {
    $hooks[] = 'field__no_markup';
  }
}

PreviousParagraph theme hook for a specific field valueNextTwig

Last updated 5 years ago

Was this helpful?