Как использовать несколько тем одновременно

Я ищу способ использовать несколько тем в одном приложении XPages, причем каждая тема активна в другом разделе приложения. Например, для поддержки одного приложения .nsf как с общедоступным веб-сайтом (пользовательская тема), так и с CMS с темой OneUI.

Вы можете указать, какая тема будет использоваться во всем приложении, на вкладке Свойства XPage в свойствах приложения. Также можно изменить тему сеанса пользователя с помощью этого кода:

context.setSessionProperty("xsp.theme", <theme_id>)

Но оба параметра устанавливают тему для всех страниц в текущем .nsf, и я ищу способ указать тему X для одной части приложения и тему Y для второй части.

Это возможно?


person Thimo Jansen    schedule 20.02.2012    source источник


Ответы (5)


На любой странице, которая должна использовать альтернативную тему, используйте следующий синтаксис, чтобы применить свойство непосредственно к корню представления:

<xp:view>
<xp:this.properties>
<xp:parameter name="xsp.theme" value="alternateThemeName" />
</xp:this.properties>
</xp:view>
person Tim Tripcony    schedule 20.02.2012
comment
К сожалению, я порадовался рано, я не могу заставить его работать. Это первые 9 строк XPage: ‹?xml version=1.0 encoding=UTF-8?› ‹xp:view xmlns:xp=ibm.com/xsp/core xmlns:xc=ibm. com/xsp/custom› ‹xp:this.properties› ‹xp:parameter name=xsp.theme value=oneuiv2.1 /› ‹/xp:this.properties› Я не вижу разницы в страница. Что может быть, что я упускаю? - person Thimo Jansen; 21.02.2012
comment
Похоже, это одно из свойств, которое нельзя установить непосредственно для корня представления. Я изучаю это и дам вам знать, что я найду. - person Tim Tripcony; 21.02.2012

Я пробовал все вышеперечисленное, но ни один из них не работал для меня. Но я нашел решение:

Вставьте это в событие представления beforeRenderResponse:

context.setSessionProperty("xsp.theme", "yourAlternateThemeName")

Есть одна проблема: после того, как вы использовали этот способ, вы должны использовать его всегда и на каждой странице, поскольку он устанавливает свойство сеанса, которое сохраняется, пока вы вошли в систему.

person Oliver Busse    schedule 02.05.2013

Только что разговаривал с коллегой Тони Макгакиным.

Вы можете изменить тему на странице. Во всех свойствах XPage выберите свойства данных и создайте новое свойство с именем «xsp.theme» и значением «yourThemeName».

person Niklas Heidloff    schedule 21.02.2012
comment
Привет, Никлас, спасибо за ответ. Если я прав, это то же самое, что и ответ Тима Трипкони, и я не смог заставить это работать. Я также пробовал этот подход (через графический интерфейс), но все равно безрезультатно. - person Thimo Jansen; 22.02.2012

Хотя мне нравится идея иметь темы для конкретных страниц, исходя из конкретного варианта использования, который вы описываете, «правильный» способ сделать это — иметь два отдельных приложения XPage, привязанных к одному и тому же внутреннему хранилищу данных. Это не только упрощает указание разных тем для каждой из них, но также упрощает ACL (при условии, что у вас будут разные люди, обращающиеся к общедоступному сайту, а не к CMS), упрощает настройку производительности за счет разных настроек для каждого приложения. , и даже без настроек, специфичных для приложения, должно немного улучшить производительность только из-за поведения загрузчика классов Java: каждый NSF действует как отдельный ClassLoader, а каждый XPage или пользовательский элемент управления в вашем NSF приводит к хранению отдельного файла класса. Таким образом, теоретически, если функции вашего общедоступного сайта требуют от вас создания 5 XPages, а функции CMS охватывают 10 XPages, простое разделение их на два отдельных приложения упрощает для загрузчика классов получение класса для любой страницы, которую загружает пользователь. , потому что ему не нужно игнорировать классы, которые ему никогда не понадобятся, просто чтобы найти тот класс, который ему нужен в данный момент. Так что я все еще испытываю искушение найти способ заставить темы для конкретных страниц работать только для «крутого» фактора, но для этой конкретной цели я бы рекомендовал использовать два разных приложения полностью, с разными темами, назначенными каждому .

person Tim Tripcony    schedule 22.02.2012
comment
Я понимаю вашу точку зрения и ценю ее. Всегда есть выбор: хранить все в одной БД или разделить. В этом случае выбор хранить все в одной БД был легким. Простота обслуживания и настройки важнее, чем максимальная производительность или правильное выполнение действий (TM). В CMS всего 3 XPage (на данный момент), и это экшн-сайт, который будет работать всего 3 месяца. После этого он будет заархивирован и будет запущена новая копия. Так что очень важно иметь его только на одной БД. - person Thimo Jansen; 23.02.2012
comment
В этом случае я согласен: постепенное улучшение производительности за счет разделения пользовательского интерфейса, вероятно, даже не будет заметно, если для функций CMS требуется только 3 элемента XPage. Я собираюсь продолжать играть с идеей темы для конкретной страницы, пока позволяет время, просто потому, что я согласен, что было бы здорово начать работать. - person Tim Tripcony; 23.02.2012

Я не так много знаю о темах, но не можете ли вы проверить в своей теме (с некоторыми ssjs), в каком корневом каталоге (по идентификатору?) вы находитесь, и в соответствии с этим включить правильные стили, css и другие ресурсы?

person jjtbsomhorst    schedule 21.02.2012