2013-07-09 54 views
1

我想根据页面中给定的参数创建某种类型的模板来显示不同的Portlet,例如查询字符串或请求参数。在Liferay Velocity模板中切换Portlet列

我有以下代码:

#if($request.getParameter('sneiders') == 'snuffles') 
    <div class="col1" id="col1">$processor.processColumn("col1")</div> 
#else 
    <div class="col2" id="col2">$processor.processColumn("col2")</div> 
#end 

的portlet列 “COL2” 正确显示,但在列的portlet “COL1”,它应该出现在/我的/ URL sneiders =称作Snuffles,以此,不?正确显示。不知怎的,LIFERAY只打印空的portlet,与CSS类portlet的静态

但是,如果我改变的事情一点:

#if($request.getParameter('sneiders') == 'snuffles') 
    <div class="col1" id="col1">$processor.processColumn("col1")</div> 
#elseif($request.getParameter('sneiders') == 'snuffzen') 
    <div class="col2" id="col2">$processor.processColumn("col2")</div> 
#else 
    <div class="col1" id="col1">$processor.processColumn("col1")</div> 
    <div class="col2" id="col2">$processor.processColumn("col2")</div> 
#end 

portlet将在任何这些情况正确地显示出来,这让我觉得你需要一个“默认”的情况下,将处理所有列

有人遇到过这个问题?这是一个问题还是我做错了什么?

任何帮助将不胜感激。 最好的问候

回答

2

如果我没有记错,您可能需要在布局中设置您的portlet,同时显示所有列,否则布局将无法正确保存。因此,当仅显示column-1时放置Portlet时,先前在第2列中设置的Portlet将会消失。

你可以考虑做这样的事情,所以你就可以正确设置布局(但用户将不能乱用的参数显示两列):

#if($themeDisplay.getPermissionChecker().isOmniadmin()) 
    <div class="col1" id="col1">$processor.processColumn("col1")</div> 
    <div class="col2" id="col2">$processor.processColumn("col2")</div> 
#elseif($request.getParameter('sneiders') == 'snuffles') 
    <div class="col1" id="col1">$processor.processColumn("col1")</div> 
#else 
    <div class="col2" id="col2">$processor.processColumn("col2")</div> 
#end 
+0

我知道这个线程是相当古老的,但我们只是使用这种方法,它运作得非常好!我们使用$ themeDisplay.isSignedIn()来代替 – madoke