-
-
Save Abby805/30dddfb743b6ccf472a402081b99e532 to your computer and use it in GitHub Desktop.
| <?php | |
| /** | |
| * @file | |
| * Example of some commonly used functions. | |
| */ | |
| use Drupal\Core\Link; | |
| use Drupal\Core\Url; | |
| use Drupal\Component\Utility\Html; | |
| use Drupal\node\Entity\Node; | |
| /** | |
| * Implements hook_preprocess_html(). | |
| */ | |
| function hook_preprocess_html(&$variables) { | |
| // If is homepage. | |
| $variables['attributes']['class'][] = \Drupal::service('path.matcher') | |
| ->isFrontPage() ? 'frontpage' : ''; | |
| // Node type class. | |
| $variables['attributes']['class'][] = isset($variables['node_type']) ? 'page-node-type--' . $variables['node_type'] : ''; | |
| // Logged in class. | |
| $variables['attributes']['class'][] = $variables['logged_in'] ? 'logged-in' : 'logged-out'; | |
| } | |
| /** | |
| * Implements hook_preprocess_node(). | |
| */ | |
| function hook_preprocess_node(&$variables) { | |
| $node = $variables['node']; | |
| $type = $node->getType(); | |
| $mode = $variables['view_mode']; | |
| $variables['attributes']['class'][] = 'node-type-' . $type; | |
| $variables['attributes']['class'][] = 'node-mode-' . $mode; | |
| $variables['attributes']['class'][] = 'node-type-' . $type . '-mode-' . $mode; | |
| // Example of how to build a link the "Drupal" way | |
| // You probabbly get the value in the quotes from a field | |
| // It might need another URL::fromXYZ function, depending on input | |
| // See https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.6.x | |
| $my_url = URL::fromUri('https://www.some-url.com/'); | |
| // Set the text or markup you want inside the link | |
| $my_text = t('Click Me!'); | |
| // Set any attributes you want as an array | |
| $link_options = [ | |
| 'attributes' => [ | |
| 'target' => '_blank', | |
| 'class' => ['btn', 'btn--large'], | |
| ], | |
| ]; | |
| $my_url->setOptions($link_options); | |
| // See https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Link.php/function/Link%3A%3AfromTextAndUrl/8.5.x | |
| $my_full_link = Link::fromTextAndUrl($my_text, $my_url)->toString(); | |
| } | |
| /** | |
| * Implements hook_preprocess_media(). | |
| */ | |
| function hook_preprocess_media(&$variables) { | |
| $mediaType = $variables['media']->bundle(); | |
| $variables['attributes']['class'][] = 'media-entity'; | |
| $variables['attributes']['class'][] = 'media-type-' . $mediaType; | |
| } | |
| /** | |
| * Implements hook_preprocess_menu(). | |
| */ | |
| function hook_preprocess_menu(&$variables) { | |
| if (!isset($variables['attributes']['class'])) { | |
| $variables['attributes']['class'] = []; | |
| } | |
| if (!isset($variables['menu_name'])) { | |
| return; | |
| } | |
| $variables['attributes']['class'][] = 'menu--' . $variables['menu_name']; | |
| } | |
| /** | |
| * Implements hook_preprocess_field(). | |
| */ | |
| function hook_preprocess_field(&$variables) { | |
| $field_name = $variables['field_name']; | |
| // Add a class specifying what field we're looking at. | |
| if (!isset($variables['attributes']['class'])) { | |
| $variables['attributes']['class'] = []; | |
| } | |
| $name_class = 'field-name--' . $field_name; | |
| $variables['attributes']['class'][] = $name_class; | |
| // Add a class to field labels. | |
| if (!isset($variables['title_attributes']['class'])) { | |
| $variables['title_attributes']['class'] = []; | |
| } | |
| $variables['title_attributes']['class'][] = 'field-label'; | |
| $variables['title_attributes']['class'][] = 'field-label--' . $field_name; | |
| } | |
| /** | |
| * Implements hook_form_FORM_ID_alter(). | |
| */ | |
| function hook_form_search_block_form_alter(&$form, $form_state) { | |
| // Adds a placeholder value to the search form. | |
| $form['keys']['#attributes']['placeholder'] = t('Search'); | |
| } | |
| /** | |
| * Implements hook_theme_suggestions_HOOK_alter(). | |
| */ | |
| function hook_theme_suggestions_field_alter(array &$suggestions, array $variables) { | |
| // Set custom template suggestions for fields. | |
| switch ($variables['element']['#field_name']) { | |
| case 'field_something': | |
| case 'field_something_else': | |
| $suggestions[] = 'field__something_or_other'; | |
| break; | |
| } | |
| } | |
| /** | |
| * Implements template_preprocess_block(). | |
| */ | |
| function hook_preprocess_block(&$variables) { | |
| // Custom block type helper classes. | |
| if (!isset($variables['elements']['content']['#block_content'])) { | |
| return; | |
| } | |
| $bundle = $variables['elements']['content']['#block_content']->bundle(); | |
| $bundle_class = str_replace('_', '-', $bundle); | |
| if (!isset($variables['attributes']['class'])) { | |
| $variables['attributes']['class'] = []; | |
| } | |
| $variables['attributes']['class'][] = Html::cleanCssIdentifier('block--bundle-' . $bundle_class); | |
| } |
Thanks, Abby! This might be more obvious if I had a easily available dev environment to test out dsm on at the moment, but I'm curious about the parts reading ->bundle(). Is that some kind of function or method available to certain variables or parts of the render arrays (that I'm guessing returns a list of media types or blocks in the above cases)?
Hey @maxstarkenburg! Yep, it's pretty much exactly as you said - ->bundle() is available on I believe any entity, and will return the machine name of the bundle (i.e. content type, media type, block type, etc.). The official explanation of it is at https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21EntityInterface.php/function/EntityInterface%3A%3Abundle/8.2.x, though it's pretty sparse.
From https://docs.google.com/presentation/d/15t7lhJQfaEAJIESjBkpMfCJPXRWgZI473eOv6QSsHWY/edit?usp=sharing