How to customize Page Tile Programmatically from your Theme File
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.