Méthode pour masquage de portlet sur mobile

Julien Valéry · le 19/11/15 à 14:58

Bonjour,

Nous sommes sur une versions JCMS et souhaitons que certaines portlets ne s'affichent pas sur mobile.

Partisan du moins d'effort, je pensais utiliser en premier lieu qques attributs bootstrap css ajouté sur la portlet, par exemple 'xs-hidden'

Capture

mais dans ce cas, le header du skin de la portlet reste affiché.

Capture

 

Ce principe doit être conditionnel et je ne peux l'appliquer partout ( ds le gabari par exemple ).

 

 

 

Mots-clés mobile
16 pts
Maud Beaufils - le 19/11/15 à 15:07
Meilleure réponse

Ta méthode est la bonne mais il faut ajouter ces classes CSS au niveau de l'onglet Habillage de ton portlet.

Ainsi, la classe est ajoutée au niveau supérieur et tout ton portlet sera masqué.

#1

Merci Maud, cette approche étant bien plus simple que la mienne :)

Sylvain DEVAUX · le 19/11/15 à 15:15
11 pts
Julien Valéry · le 19/11/15 à 15:09

mais c'est super ça, merci bcp !!

0 pt
Sylvain DEVAUX · le 19/11/15 à 15:15

Le problème est que la classe hidden-xs doit venir se positionner sur le corps de la portlet, lui même entouré, ou pas d'un habillage. Vous constatez donc bien que le corps de la portlet disparaît, mais pas l'entête (son habillage) qui n'a pas "connaissance" de la classe hidden-xs.

 

Une possibilité serait de vous brancher dans une target, par exemple INCLUDE_BEFORE_TEMPLATE, puis, selon la portlet courante, et le mode d'affichage (mobile ou desktop), vous "informez" JCMS que la portlet ne doit pas être rendue.

Pour ce faire, il faut spécifier : 

if (!displayPortlet) {
  request.setAttribute("ShowPortalElement",Boolean.FALSE);
  return;
}

 

Pour détecter que vous êtes en mode smartphone, j'ai l'impression qu'il faille tester la présence de l'attribut de session suivant : 

SmartPhonePortalPolicyFilter.FORCE_SMARTPHONE_SESSION_ATTR

S'il est à true, l'affichage est mobile.

 

Donc, au final qqch comme cela dans votre JSP à brancher dans la target : 

boolean isSmartphoneMode = Util.toBoolean(request.getSession().getAttribute(SmartPhonePortalPolicyFilter.FORCE_SMARTPHONE_SESSION_ATTR), false);
boolean displayPortlet = false; // la règle métier ici
if (!displayPortlet && isSmartphoneMode) {
  request.setAttribute("ShowPortalElement",Boolean.FALSE);
  return;
}

 

 

1 pt