单独去除Joomla首页中页面标题(Page Title)的网站名称
一般的企业网站或外贸网站,我们都会把后台 - 全局设置 - 前台 - 页面 Title 中加入网站名称 的选项,选择 “之后”;也就是说,如果你的网站名称是“野草工作室”,你的某篇文章名称是“怎样升级到Joomla 6?”,那你开启了该选项后,实际的页面标题(Page Title)是“怎样升级到Joomla 6? - 野草工作室”。
但是,对于首页来说,我们更习惯把网站名称放在最前面,假如我们自定义首页的名称是“野草工作室,提供Joomla建站服务”,那如果开启上面选项,实际页面标题就是“野草工作室,提供Joomla建站服务 - 野草工作室”,这样就会重复了,这样不利于SEO,也不符合阅读习惯。
于是就有了既想开启“在页面标题中加入网站名称”的需求,也希望首页排除在外,首页不要添加网站名称的想法,那怎么实现?思路如下:
- 获取当前实际页面标题(包含网站名称)并把网站名称和连接符去除
- 判断当前是否是首页
- 如果是首页即输出修改后的网页标题
use Joomla\CMS\Factory;如果上面代码,能够在Joomla的默认模板cassiopeia中运行,但是如果使用的模板是Yootheme Pro,即会提示
$app = JFactory::getApplication();
$menu = Factory::getApplication()->getMenu();
$isHomePage = ($menu->getActive() == $menu->getDefault());
$title = $this->getTitle();
$titleAfter =' - ' . $app->getCfg( 'sitename' );
$titleHomePage = str_replace ($titleAfter,'',$title);
if ($isHomePage)
{
$this->setTitle( $titleHomePage );
}
Class "YOOtheme\JFactory" not found,是因为使用的是Joomla 4或更高的版本,JFactory已经被弃用,替换为Joomla\CMS\Factory。所以,您需要将代码中的JFactory替换为Factory,并确保代码符合Joomla 4的命名空间要求。
解决方法:
- 代码中替换
JFactory为Factory,JFactory::getApplication()和其他JFactory的引用需要更新为Factory::getApplication()。 - 检查命名空间和类加载在Joomla 4或更高版本中,确保已经正确加载了命名空间
Joomla\CMS\Factory,您不需要手动引入它,Joomla 会自动加载这个命名空间。(所以下面代码中已移除) - 修改后的代码(并重新优化):
$app = Factory::getApplication();
$menu = $app->getMenu();
$isHomePage = ($menu->getActive() == $menu->getDefault());
$title = $this->getTitle();
$titleSuffix = ' - ' . $app->getCfg('sitename');
// 如果有标题且是首页,移除网站名称部分
if ($title && $isHomePage) {
$this->setTitle(str_replace($titleSuffix, '', $title));
} else {
$this->setTitle($title);
}