1

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

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

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

有谁知道如何获得它?我搜索并检查了许多liferay的论坛,但没有找到任何东西。

谢谢!

4

2 回答 2

3

我的建议是不要硬编码主题的名称,而是使用现成的主题设置。只需将您的主题配置为“桌面”或“移动”样式并检查此属性。这样您就可以涵盖许多不同的主题,而无需对特定主题进行硬编码。

此外,各种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

最后,您可能还想考虑使用设备检测 API以更精细的粒度确定当前设备的实际功能

于 2013-09-30T08:15:29.193 回答
2

建议你使用themeId whis 也是独一无二的。它的内容如下:xxx_WAR_xxxtheme

#if($themeDisplay.getThemeId().equalsIgnoreCase("<dektop theme id>"))
### your logic here
#end

高温高压

于 2013-09-30T08:15:58.950 回答