页面标题
有没有办法在运行时动态更改页面标题?
我知道您可以在门户级别更改页面标题,但此解决方案不提供任何 SEO 价值,因为它不会更改页面中的 TITLE 标记。
对于我所看到的更改门户标题的方式是非常静态的(这些是全局设置):
- 更改主题策略中的bannerTitleText
- 如果不存在,请将bannerTitleTextResourceBundle 和bannerTitleTextResourceKey 调整为所需的值。
- 否则,在主题配置中全局设置标题
我们的目标是能够在页面级别设置标题,以便它可以在页面之间更改并包含相关页面的关键字。
实际上,如果这可以从 WCM 完成,那将是最理想的。
更新
我注意到 WebSphere Portal 6.1.5 中的默认主题是附加页面标题,因此检查了主题并且确实足够 jspInit.jspf 有一些以下新方法:
private static com.ibm.portal.state.service.PortalStateManagerServiceHome portalStateManagerServiceHome;
// (This goes in the jspInit constructor)
portalStateManagerServiceHome = (com.ibm.portal.state.service.PortalStateManagerServiceHome) ctx.lookup("portal:service/state/PortalStateManager");
protected com.ibm.portal.state.service.PortalStateManagerService getStateManagerService( javax.servlet.ServletRequest request, javax.servlet.ServletResponse response ) throws Exception {
final com.ibm.portal.state.service.PortalStateManagerService psms = portalStateManagerServiceHome.getPortalStateManagerService( (javax.servlet.http.HttpServletRequest) request, (javax.servlet.http.HttpServletResponse) response );
return psms;
}
protected boolean isStaticPage( javax.servlet.ServletRequest request, javax.servlet.ServletResponse response ) throws com.ibm.portal.ModelException {
final com.ibm.portal.model.NavigationSelectionModelProvider nsmProvider = navigationSelectionModelHome.getNavigationSelectionModelProvider();
final com.ibm.portal.navigation.NavigationSelectionModel nsm = nsmProvider.getNavigationSelectionModel(request, response);
final com.ibm.portal.navigation.NavigationNode currentNavNode = (com.ibm.portal.navigation.NavigationNode) nsm.getSelectedNode();
final com.ibm.portal.content.ContentNode currentContentNode = currentNavNode.getContentNode();
return currentContentNode.getContentNodeType().equals( com.ibm.portal.content.ContentNodeType.STATICPAGE );
}
protected com.ibm.portal.navigation.NavigationNode getSelectedNode( final javax.servlet.ServletRequest request, javax.servlet.ServletResponse response ) throws com.ibm.portal.ModelException {
com.ibm.portal.model.NavigationSelectionModelProvider nsmProvider = navigationSelectionModelHome.getNavigationSelectionModelProvider();
com.ibm.portal.navigation.NavigationSelectionModel nsm = nsmProvider.getNavigationSelectionModel(request, response);
return (com.ibm.portal.navigation.NavigationNode) nsm.getSelectedNode();
}
protected String getSelectedNodeTitle( final javax.servlet.ServletRequest request, javax.servlet.ServletResponse response ) throws com.ibm.portal.ModelException {
final String title;
if ( localizedContextHome != null ) {
com.ibm.portal.model.LocalizedContext context = localizedContextHome.getLocalizedContext( (javax.servlet.http.HttpServletRequest) request );
title = context.getTitle( getSelectedNode( request, response ) );
} else {
title = "";
}
return title;
}
添加后,我能够从 6.1.5 主题复制 head_title.jspf;其中包括以下新行:
<c:set var="selectedNodeTitle" value="<%=getSelectedNodeTitle(request, response)%>" />
<title><c:out value="${siteTitle} - ${selectedNodeTitle}"/></title>
现在剩下的就是想办法从 WCM 中获取它。