How to customize Page Tile Programmatically from your Theme File

This is a community-contributed tutorial. This tutorial is over a year old and may not apply to your version of Concrete CMS.
May 11, 2016

Instruction

Copy and paste (override) the following code where Loader::element('header_required'); is.

[Page Title] - [1st Level's Page Title] | [Site Name]

Page Title Format:

  • Page Title - Site name
  • Page Title | Page Title of 1st page - Site name

Since Concrete CMS 5.7.5.7, the site name supports multilingual. Register your site name in Engish at [Dashboard] - [System & Setting] - [Basics] - [Site Name]. And then, use [Dashboard] - [System and Setting] - [Multilingual] - [Translation Interface] to enter the multilingual site name.

Page Description & Page Keyword

You can define your page description and page keyword programmatically. My sample code will try to use the programmatically defined $pageDescrition and $pageMetaKeywords, but if the admin already set Meta Description or Collection Descriton, then concrete will try to use those first.

Sample

<?php
    $metaTitle = $c->getCollectionAttributeValue('meta_title');
    if ($metaTitle) $pageTitle = $metaTitle;

    if (!$pageTitle)
    {
        $siteName = h(\Config::get('concrete.site'));
        $collentionName = $c->getCollectionName();

        $isRoot = null;
        $trail = $nh->getTrailToCollection($c);
        if (is_array($trail) && count($trail) > 1) {
            $count = count($trail);
            array_splice($trail, $count - 1);
            $deptC = array_pop($trail);
            $deptName = h($deptC->getCollectionName());
        } else {
            $isRoot = true;
        }           
        if ($isRoot) {
            $pageTitle = $collentionName . ' - ' . $siteName;
        } else {
            $pageTitle = $collentionName . ' | ' . $deptName . ' - ' . $siteName;
        }
    }

    $thisPageDescription = $c->getAttribute('meta_description');
    if (!$thisPageDescription) $thisPageDescription = $c->getCollectionDescription();
    if ($thisPageDescription) $pageDescription = $thisPageDescription;

    $thisPageMetaKeywords = $c->getAttribute('meta_keywords');
    if ($thisPageMetaKeywords) $pageMetaKeywords = $thisPageMetaKeywords;

    Loader::element('header_required',
        array(
            'pageTitle' => $pageTitle,
            'pageDescription' => isset($pageDescription) ? $pageDescription : '',
            'pageMetaKeywords' => isset($pageMetaKeywords) ? $pageMetaKeywords : '',
        )
    );

[Page Title] - [Previous level's Page Title] | [Sitename]

Page Title Format:

  • Page Title - Site name
  • Page Title | Page Title of Parent page - Site name

The rest is the same as first one.

Sample Code

<?php
    $metaTitle = $c->getCollectionAttributeValue('meta_title');
    if ($metaTitle) $pageTitle = $metaTitle;

    if (!$pageTitle)
    {
        $siteName = h(\Config::get('concrete.site'));
        $collentionName = $c->getCollectionName();

        $isRoot = null;
        $trail = $nh->getTrailToCollection($c);
        if (is_array($trail) && count($trail) > 1) {
            $deptC = array_shift($trail);
            $deptName = h($deptC->getCollectionName());
        } else {
            $isRoot = true;
        }           
        if ($isRoot) {
            $pageTitle = $collentionName . ' - ' . $siteName;
        } else {
            $pageTitle = $collentionName . ' | ' . $deptName . ' - ' . $siteName;
        }
    }

    $thisPageDescription = $c->getAttribute('meta_description');
    if (!$thisPageDescription) $thisPageDescription = $c->getCollectionDescription();
    if ($thisPageDescription) $pageDescription = $thisPageDescription;

    $thisPageMetaKeywords = $c->getAttribute('meta_keywords');
     if ($thisPageMetaKeywords) $pageMetaKeywords = $thisPageMetaKeywords;

    Loader::element('header_required',
        array(
            'pageTitle' => $pageTitle,
            'pageDescription' => isset($pageDescription) ? $pageDescription : '',
            'pageMetaKeywords' => isset($pageMetaKeywords) ? $pageMetaKeywords : '',
        )
    );

If you have more detail and specific way of doing it. I can help you as well.

Recent Tutorials
Edit domains and sitemaps
Apr 4, 2025
By myq.

How to create a sitemap when using an edit domain

Block Types and CIF Data
Apr 2, 2025
By mlocati.

This tutorial describes how Concrete works with blocks data, and how you can create custom block types that works well when exporting and importing data with the CIF XML format.

Customize the default page title
Mar 12, 2025

Change the default " :: " and/or "site name :: page title" formatting separator to something else.

Configure Composer to work with a Page Type
Feb 20, 2025
By myq.

Fix the "Unable to load block into composer. You must edit this content from within the context of the page." error message

Permissions for editors in a multilingual site
Feb 2, 2025
By myq.

How to set up a multilingual Concrete CMS site for groups of language-specific editors

Restoring deleted pages using advanced search
Jan 16, 2025
By myq.

How to recover deleted pages when there are more than a few to choose from.

Improvements?

Let us know by posting here.