页面标题
有没有办法在运行时以动态方式更改页面标题?
我知道您可以在门户级别更改页面标题,但此解决方案 不提供任何SEO值,因为它不会更改页面中的TITLE标记。
对于我所看到的,更改门户网站标题的方式非常静态(这些是全局设置):
我们的目标是能够在页面级别设置标题,以便它可以在页面之间进行更改并包含相关页面的关键字。
实际上,如果可以从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中获取此信息的方法。
答案 0 :(得分:2)
我将介绍缺少的WCM部分,因为我实现了它。我将能够为您提供所需的信息,但不是现成的代码。它只是从流中读取并反正写入其他内容,因此您应该能够掌握这个想法。使用Portal 6.1的最合理方法是为此要求开发Servlet Filter。你想要做的是:
<!--
-->
以及稍后可以从生成的html中解析的一些方案。不幸的是,这是你必须采取的方式。甚至没有隐藏/私有API可以让您从WCM渲染portlet的应用程序上下文中获取所需内容并将其放入html标头中。此外,您必须将servlet过滤器添加到wps应用程序。这里常见的问题是,在编辑web.xml之后必须重新部署它。
servlet过滤器的性能影响可以忽略不计(总共只有几个百分比),这种方法很简单。根据我的经验,它可以很好地用于搜索引擎优化目的,你几乎可以通过这种方式从WCM获得任何信息。
答案 1 :(得分:0)
我只是想更新这个问题,提到有一个新功能可以更好地实现同样的目标。
新的Web Content Viewer(286)利用了JSR 286中的一个新功能,称为两阶段渲染,其中创建了一个名为doHeaders的新事件。在doHeaders事件下,可以修改响应以便在头部添加元素,例如title。
现在,Web Content Viewer提供了页面显示标题设置,使您可以执行从内容中选择。
现在剩下的就是让开发人员从Web内容中设置其他元素,例如:规范元素/链接,元标记等。但我认为新的Web内容文件夹功能可以让我们在主题级别。
祝所有具有SEO意识的Lotus Web Content Management开发人员好运。