如何在Liferay中的速度模板中获取活动主题名称

时间:2013-09-30 07:42:20

标签: liferay liferay-velocity liferay-theme

我们为桌面网页使用一个主题,为网站的响应/移动版本使用另一个主题。但是对于移动设备,我们并不总是想要显示图像,如果我们可以从模板中限制它,那将是很好的,而不仅仅是用CSS隐藏它(因为它仍然加载图像,只是没有显示它)。

为此,我需要获取liferay当前活动主题ID或名称,以便我可以在模板中添加简单的if语句。

#if(${themename} == "desktopTheme")
<img src="foo.jpg"/>
#end

有没有人有想法如何获得它?我搜索并检查了很多liferay的论坛,但没有找到任何东西。

谢谢!

2 个答案:

答案 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