Drupal

Creating a Custom-Templated Content Type Page in Drupal 11 (Node Names: About, Services, How-We-Work)

How to Create Custom Page Templates for Specific Pages in Drupal Without a Content Type

Drupal’s flexible theming system allows you to load unique Twig templates for individual pages based on their titles or paths—without needing a custom content type. In this guide, you’ll learn how to create custom Twig templates for five specific pages: **About**, **Services**, **How-We-Work**, **Careers**, and **Contact**.


Step 1: Create the Pages

  1. Navigate to Content:
    • Go to Content > Add content.
  2. Use the Default “Basic page” Content Type:
    • Create five pages with titles exactly as follows: About, Services, How-We-Work, Careers, and Contact.

Step 2: Create Specific Templates for Each Page

  1. Create Twig Template Files:In your custom theme folder, create the following template files:
    
    themes/custom/acesoftech/templates/page--about.html.twig
    themes/custom/acesoftech/templates/page--services.html.twig
    themes/custom/acesoftech/templates/page--how-we-work.html.twig
    themes/custom/acesoftech/templates/page--careers.html.twig
    themes/custom/acesoftech/templates/page--contact.html.twig
    
  2. Add Template Content:Here’s an example structure you can use and customize:
    <div class="custom-page-wrapper">
      <header class="page-header">
        <h1>{{ node.title }}</h1>
      </header>
    
      <main class="page-body">
        {{ content.body }}
      </main>
    
      <footer class="page-footer">
        <p>&copy; {{ "now"|date("Y") }} Acesoftech</p>
      </footer>
    </div>
    

    Repeat this structure for each of the five templates and customize as needed.


Step 3: Alter Theme Suggestions Based on Page Title

Open your acesoftech.theme file and add this code to dynamically assign custom Twig templates based on node title:

function acesoftech_theme_suggestions_page_alter(array &$suggestions, array $variables) {
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
    if ($node instanceof \Drupal\node\NodeInterface) {
      $title = strtolower($node->getTitle());
      switch ($title) {
        case 'about':
          $suggestions[] = 'page__about';
          break;
        case 'services':
          $suggestions[] = 'page__services';
          break;
        case 'how-we-work':
          $suggestions[] = 'page__how_we_work';
          break;
        case 'careers':
          $suggestions[] = 'page__careers';
          break;
        case 'contact':
          $suggestions[] = 'page__contact';
          break;
      }
    }
  }
}

> ⚠️ Make sure to replace spaces and dashes with underscores (`how-we-work` becomes `how_we_work`) in template file names.


Step 4: Clear Drupal Cache

For Drupal to detect your new templates:

  • Via Admin UI: Go to Configuration > Development > Performance and click Clear all caches.
  • Via Drush: Run the following command in terminal:
    drush cache:rebuild

Conclusion

You now know how to create custom Twig templates for individual pages like “About”, “Services”, “How-We-Work”, “Careers”, and “Contact” using only their node titles—no need for a custom content type. This approach is perfect for static pages that need unique layouts, while keeping everything lightweight and simple.

Leave a Reply

Your email address will not be published. Required fields are marked *