我们为桌面网页使用一个主题,为网站的响应/移动版本使用另一个主题。但是对于移动设备,我们并不总是想要显示图像,如果我们可以从模板中限制它,那将是很好的,而不仅仅是用CSS隐藏它(因为它仍然加载图像,只是没有显示它)。
为此,我需要获取liferay当前活动主题ID或名称,以便我可以在模板中添加简单的if语句。
#if(${themename} == "desktopTheme")
<img src="foo.jpg"/>
#end
有没有人有想法如何获得它?我搜索并检查了很多liferay的论坛,但没有找到任何东西。
谢谢!
答案 0 :(得分:3)
我的建议是不对主题名称进行硬编码,而是使用随时可用的theme settings。只需将主题配置为“桌面”或“移动”样式并检查此属性即可。这样,您可以涵盖许多不同的主题,而无需对特定主题进行硬编码。
此外,各种ThemeDisplay.getTheme*()
方法可帮助您在任何地方获取所需信息。
这是你的主题的一些未经测试的伪代码(我只是在这里输入,从未编译/部署,你可能想为VM的东西添加空检查)
<?xml version="1.0"?>
<!DOCTYPE look-and-feel PUBLIC "-//Liferay//DTD Look and Feel 6.0.0//EN" "http://www.liferay.com/dtd/liferay-look-and-feel_6_0_0.dtd">
<look-and-feel>
<compatibility>
<version>6.1.0+</version>
</compatibility>
<theme id="my-desktop-1" name="My First Desktop Theme">
<settings>
<setting key="mobile" value="false" />
</settings>
</theme>
</look-and-feel>
<?xml version="1.0"?>
<!DOCTYPE look-and-feel PUBLIC "-//Liferay//DTD Look and Feel 6.0.0//EN" "http://www.liferay.com/dtd/liferay-look-and-feel_6_0_0.dtd">
<look-and-feel>
<compatibility>
<version>6.1.0+</version>
</compatibility>
<theme id="my-mobile-1" name="My First Mobile Theme">
<settings>
<setting key="mobile" value="true" />
</settings>
</theme>
</look-and-feel>
然后,在VM或JSP或其他代码中:
#if( ! $themeDisplay.getSetting("mobile"))
## more resources, desktop only, here.
#end
#if( $themeDisplay.getSetting("mobile")
## mobile only stuff here.
#end
最后,您可能还想考虑使用Device Detection API以更精细的粒度确定当前设备的实际功能
答案 1 :(得分:2)
建议你使用themeId whis也是独一无二的。它的东西如下: xxx_WAR_xxxtheme
#if($themeDisplay.getThemeId().equalsIgnoreCase("<dektop theme id>"))
### your logic here
#end
HTH