2011-05-02 98 views
1

頁面標題SEO WebSphere Portal中(頁標題)

有沒有辦法來dinamically更改頁面標題在運行時?

我知道您可以在門戶級別更改頁面標題,但此解決方案 不提供任何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獲取此的一種方式。

+1

如果你有更多東西要添加到它,請編輯你的問題。這是一個Q/A網站,而不是論壇。 – dandan78 2011-05-04 09:37:01

回答

0

我只是想更新這個問題,提到有一個新的功能,使更好的方式來實現這個相同的目標。

新的Web內容查看器(286)利用JSR 286中稱爲兩階段渲染的新功能,其中創建了一個名爲doHeaders的新事件。在doHeaders事件下,可以修改響應以添加頭部中的元素(如標題)。

現在的Web內容查看器提供了一個頁面顯示標題設置,使您能夠從內容做選擇。

現在剩下的只是讓我們的開發人員設置Web內容的其他元素,例如:規範元素/鏈接,元標記等。但我認爲新的Web內容文件夾功能可以使我們能夠在主題層面。

祝你有好運的每一個有意識的Lotus Web Content Management開發人員。

2

我將介紹缺失的WCM部分,因爲我已經實現了該部分。我將能夠給你所需的信息,但沒有準備好的代碼。它只是從流中讀取,然後寫入其他文章,所以你應該能夠理解這個想法。使用Portal 6.1最合理的方法是針對此要求開發Servlet Filter。你想要做的是:

  1. 使WCM組件打印出你想要注入到html標題的正確信息。這通常意味着例如導航器組件打印當前路徑/標題。
  2. 將這些組件添加到演示文稿模板中。你想要什麼它可能使用HTML評論標籤<!---->和一些計劃,你可以稍後從生成的HTML解析。
  3. 構建一個servlet過濾器,如果它是html/xhtml(使用MIME類型),則從ServletResponse讀取整個頁面。當你這樣做的時候解析評論。現在,用html標題部分中的正確標記重新編寫一個新頁面。
  4. 重新注入新的響應頁面,這個頁面有正確的html頁眉。

不幸的是,這是你必須採取的方式。甚至沒有隱藏/私有的API可以讓你從WCM渲染portlet的應用程序上下文中獲取你想要的內容,並將其放入html頭文件中。另外,您必須將servlet過濾器添加到wps應用程序。這裏常見的問題是在編輯web.xml後必須重新部署它。

該servlet過濾器的性能影響可以忽略不計(僅佔總數的百分比),並且該方法簡單地起作用。根據我的經驗,這對搜索引擎優化的目的非常有效,您可以通過這種方式從WCM獲取幾乎任何信息。

+1

謝謝大家,這聽起來很有希望。我會試試看。 – sonar 2011-08-30 21:38:01