简体   繁体   中英

How do I alter a node template from a module in Drupal 8?

I would like my custom Drupal 8 module to force a different template for pages that match a certain URL. Here is my module structure:

/sass_edit
    /css
    /js
    /template
        builder_template.html.twig // this is the template file
    sass_edit.module
    ...
    sass_edit.*.yml // various yml files

These are the contents of builder_template.html.twig :

<h1>test</h1>

Here are the relevant lines of code in my .module file:

function sass_edit_theme_suggestions_alter(array &$suggestions, array $variables, $hook) {

  $current_path = \Drupal::service('path.current')->getPath();

  if(\Drupal::currentUser()->isAuthenticated() && strpos($current_path, "/builder/") >= 0) {
    $suggestions[] = 'builder_template';
  }

  // kint($suggestions);
  // die();
}

When I visit a page whose URL contains /builder/ , the code runs and adds the string builder_template to the $suggestions array. However, when the page is rendered, the new template is ignored. I have tried flushing caches, with no results.

I'm not sure how to proceed. All the documentation I've found refers to adding theme suggestions from a custom theme, not a custom module.

Any idea what I'm doing wrong? Thank you so much for any help!

Maybe you have a typo in the code you pasted but the folder where you have your templates overrides should be templates and not template as you wrote. Don't forget to flush caches after changing the name of the directory ;)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM