0

Actually twig only suggest templates files name like this:

<!-- FILE NAME SUGGESTIONS:
   * html--node--20.html.twig
   * html--node--%.html.twig
   * html--node.html.twig
   x html.html.twig
-->

But I would have 2 kinds of template suggestion (like on my D6 website): One based on page + content type : page--CONTENT-TYPE.html.twig And other based on nodes + content-type : node--CONTENT-TYPE.html.twig or page--node-CONTENT-TYPE.html.twig

Actually I have a function in my .theme file like this but nothing change about suggestions:

function starterpf_d8_2019_theme_suggestions_page_alter(&$suggestions, $variables) {
  $path = \Drupal::requestStack()->getCurrentRequest()->getPathInfo();
  if ($path != '/') {
    $path = trim($path, '/');
    $arg = str_replace(["/", '-'], ['_', '_'], $path);
    $suggestions[] = 'page__' . $arg;
  }
}

Code found here

Thanks for help

EDIT: after exploring the output HTML, I get the page suggestions like this:

<!-- FILE NAME SUGGESTIONS:
   x page--front.html.twig
   * page--node.html.twig
   * page.html.twig
-->

So, can I add different kind of suggestions with putting together part of your codes ? Like this:

function starterpf_d8_2019_theme_suggestions_page_alter(&$suggestions, $variables) {
  $path = \Drupal::requestStack()->getCurrentRequest()->getPathInfo();
  if ($path != '/') {
    $path = trim($path, '/');
    $arg = str_replace(["/", '-'], ['_', '_'], $path);
    $suggestions[] = 'page__' . $arg;
  }
  #Suggestions pour les nodes
   $node = \Drupal::routeMatch()->getParameter('node');
  if ($node instanceof \Drupal\node\NodeInterface) {
    $suggestions[] = 'page__' . $node->bundle();
    $suggestions[] = 'page__node_' . $node->bundle();
  }

  #Suggestions pour les types de contenus
   if ($node = \Drupal::routeMatch()->getParameter('node')) {
    $content_type = $node->bundle();
    $suggestions[] = 'page__'.$content_type;
  }
}

And if I only want to create a file like node--CONTENT-TYPE.html.twig instead of a page one ? Interesting in use of node--CONTENT-TYPE-nid.html.twig too. And what would be better to use ? Knowing that I include field datas inside template to theme easily them ? In some use cases I will need to theme depending taxonomy term, is this native with D8 ?

  • Explore the HTML output, there are dozens of templates and suggestions for every single URL, varying by context and content – Hudri Dec 20 '18 at 13:22
  • OK I will see if I need more suggestions or specific as work proceed. – webmaster pf Dec 20 '18 at 14:14
2

Try this out:

/**
 * Implements hook_theme_suggestions_page_alter().
 */
function myModule_theme_suggestions_page_alter(&$suggestions, $variables) {
  $node = \Drupal::routeMatch()->getParameter('node');
  if ($node instanceof \Drupal\node\NodeInterface) {
    $suggestions[] = 'page__' . $node->bundle();
    $suggestions[] = 'page__node_' . $node->bundle();
  }
}
1

hook_theme_suggestions_page_alter modifies suggestions for page.html.twig, if you want to change suggestions for html.html.twig you need to use hook_theme_suggestion_html_alter

function starterpf_d8_2019_theme_suggestions_html_alter(&$suggestions, $variables) {
  $path = \Drupal::requestStack()->getCurrentRequest()->getPathInfo();
  if ($path != '/') {
    $path = trim($path, '/');
    $arg = str_replace(["/", '-'], ['_', '_'], $path);
    $suggestions[] = 'html__' . $arg;
  }
}
1

Try this:

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function THEME_NAME_theme_suggestions_page_alter(array &$suggestions, array $variables) {

  if ($node = \Drupal::routeMatch()->getParameter('node')) {
    $content_type = $node->bundle();
    $suggestions[] = 'page__'.$content_type;
  }
}

Found here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.