Problem/Motivation

Template suggestions use underscores but template files currently use hyphens. Now that we are using templates by default for themeable output, this is a little bit of mental gymnastics (phrase c/o @joelpittet) that seems unnecessary.

Originally this issue proposed that we have theme suggestions defined with hyphens but then that doesn't work too well for specific prepare/preprocess functions since they would need to be converted to underscores anyway. hook_theme_prepare_node--my_content_type() wouldn't fly.

Proposed resolution

Use underscores across the board. Theme functions, theme suggestions, and template filenames.

Before

node--my_content_type.html.twig

After

node__my_content_type.html.twig

Relevant code from drupal_find_theme_templates():

    // Transform - in filenames to _ to match function naming scheme
    // for the purposes of searching.
    $hook = strtr($template, '-', '_');

Remaining tasks

  • Discuss repercussions
  • Patch?

User interface changes

n/a

API changes

Theme suggestions would not be converted to hyphens for template files, so template files will use underscores by default.

Comments

star-szr’s picture

Fix error in API change section, add related issue

star-szr’s picture

Title: Use hyphens instead of underscores for theme suggestions » Use underscores instead of hyphens in template filenames
Issue summary: View changes

Updating the whole issue after discussing on the Twig call with @Mark Carver and @joelpittet.

star-szr’s picture

Issue summary: View changes

Removing "Updated: Comment #N" thing because every issue summary update gets a comment now…

mortendk’s picture

consistency is one of the many goals for the twig initiative - so its defently a +1 for me

webchick’s picture

So I'm definitely +1 from the consistency POV. We could eliminate some silly code like the quoted stuff in the issue summary.

However, I distinctly remember this being done for a reason, although alas I cannot remember the reason, and git blame only got me to #164122: Theme template file discovery does not translate _ into - properly which simply says this is what we do, not why. But IIRC we used - in template names because this was considered best practice something something. Argh. Maybe merlinofchaos remembers?

So I'd love to see more representation from front-end devs in here saying they like this change. It's obvious why theme system maintainers would want this change.

So not ready to pull "Approved API change" on this. Let's dig into why it was done, figure out of those reasons are still valid, and get more representation from other themers first.

ianthomas_uk’s picture

This would introduce double underscores into template names. Depending on the font these are not always obvious if you're not expecting them.

node__example.html.twig

This is particularly a problem for people unfamiliar with the platform conventions (as many people tweaking templates will be). It's also not easy to spot, as your shiny new template will just be ignored by Drupal with no error message.

star-szr’s picture

@ianthomas_uk - that's a very good point. We have made it easier to spot though, because twig_debug shows you which template is in use and which templates you can use: https://drupal.org/node/1922666

joelpittet’s picture

Should we bump this to D9 @Cottser?

star-szr’s picture

Version: 8.0.x-dev » 9.x-dev

Yes, thanks @joelpittet.

catch’s picture

Version: 9.x-dev » 8.3.x-dev

This could be done during template discovery with a bc layer in 8.x, or we could decide it's won't fix, but I don't think we should break all themes between 8.x and 9.x without a bc layer, so moving back.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.0-alpha1 will be released the week of January 30, 2017, which means new developments and disruptive changes should now be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.0-alpha1 will be released the week of July 31, 2017, which means new developments and disruptive changes should now be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.0-alpha1 will be released the week of January 17, 2018, which means new developments and disruptive changes should now be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.7.x-dev

Drupal 8.6.0-alpha1 will be released the week of July 16, 2018, which means new developments and disruptive changes should now be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.7.x-dev » 8.8.x-dev

Drupal 8.7.0-alpha1 will be released the week of March 11, 2019, which means new developments and disruptive changes should now be targeted against the 8.8.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.0-alpha1 will be released the week of October 14th, 2019, which means new developments and disruptive changes should now be targeted against the 8.9.x-dev branch. (Any changes to 8.9.x will also be committed to 9.0.x in preparation for Drupal 9’s release, but some changes like significant feature additions will be deferred to 9.1.x.). For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.9.x-dev » 9.1.x-dev

Drupal 8.9.0-beta1 was released on March 20, 2020. 8.9.x is the final, long-term support (LTS) minor release of Drupal 8, which means new developments and disruptive changes should now be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 9.1.x-dev » 9.2.x-dev

Drupal 9.1.0-alpha1 will be released the week of October 19, 2020, which means new developments and disruptive changes should now be targeted for the 9.2.x-dev branch. For more information see the Drupal 9 minor version schedule and the Allowed changes during the Drupal 9 release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Drupal 9.2.0-alpha1 will be released the week of May 3, 2021, which means new developments and disruptive changes should now be targeted for the 9.3.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.0-rc1 was released on November 26, 2021, which means new developments and disruptive changes should now be targeted for the 9.4.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.0-alpha1 was released on May 6, 2022, which means new developments and disruptive changes should now be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 10.1.x-dev

Drupal 9.5.0-beta2 and Drupal 10.0.0-beta2 were released on September 29, 2022, which means new developments and disruptive changes should now be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 10.1.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch, which currently accepts only minor-version allowed changes. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.