Liferay DXP SP1 ou version ultérieure / Liferay 7 CE
Il existe de nombreuses exigences de projet qui souhaitent contrôler l'affichage du menu de contrôle en haut de Liferay. La méthode de traitement d'un tel cas sera décrite.
Document officiel: THEME CONTRIBUTORS Document officiel: CONTEXT CONTRIBUTORS L’explication de la façon de le gérer est décrite dans, mais la méthode réelle de création d’un portlet est expliquée ici.
On suppose que l'espace de travail Liferay a été créé et que les outils de lame et divers outils de création de thème ont été installés. Le document suivant explique la méthode de configuration.
En tant que scénario de test, le rôle standard de Liferay, la spécification selon laquelle le menu de contrôle n'est affiché qu'aux utilisateurs disposant de privilèges d'administrateur est implémentée.
Déplacé sous $ (liferay_workspace) / modules.
Nous devons donc créer un contributeur de thème pour remplacer le bundle du menu de contrôle. Sélectionnez Fichier-> Nouveau-> Projet de module Liferay dans Liferay Developer Studio / IDE, et sélectionnez Contributeur de contexte de modèle dans Nom du modèle de projet.
Ou sur la ligne de commande
blade create -t template-context-contributor -p com.liferay.product.navigation.control.menu.theme.contributor -c SampleProductNavigationControlMenu sample-product-navigation-control-menu-theme-contributor
Créez un projet de module à l'aide de l'outil Blade dans.
Ouvrez le fichier de base du menu de contrôle
ProductNavigationControlMenuTemplateContextContributor.java
vi /liferay-portal/modules/apps/web-experience/product-navigation/product-navigation-control-menu-theme-contributor/src/main/java/com/liferay/product/navigation/control/menu/theme/contributor/internal/ProductNavigationControlMenuTemplateContextContributor.java
Copiez la partie suivante dans SampleProductNavigationControlMenuTemplateContextContributor.java.
@Override
public void prepare(
Map<String, Object> contextObjects, HttpServletRequest request) {
boolean isShowControlMenu = isShowControlMenu(request);
contextObjects.put("isShowControlMenu", String.valueOf(isShowControlMenuFlg));
}
protected boolean isShowControlMenu(HttpServletRequest request) {
ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
WebKeys.THEME_DISPLAY);
if (themeDisplay.isImpersonated()) {
return true;
}
if (!themeDisplay.isSignedIn()) {
return false;
}
User user = themeDisplay.getUser();
if (!user.isSetupComplete()) {
return false;
}
return true;
}
Ensuite, si vous affinez l'affichage uniquement si vous disposez des privilèges d'administrateur pour le rôle standard et ajoutez un processus pour définir une variable qui génère les conditions d'affichage du côté du thème, ce sera comme suit.
@Override
public void prepare(
Map<String, Object> contextObjects, HttpServletRequest request) {
//Écrivez une variable pour que Thème puisse juger si le menu est affiché ou non.
boolean isShowControlMenu = isShowControlMenu(request);
contextObjects.put("isShowControlMenu", String.valueOf(isShowControlMenu));
}
protected boolean isShowControlMenu(HttpServletRequest request) {
ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
WebKeys.THEME_DISPLAY);
if(!isAdmin(request)) {
return false;
}
if (themeDisplay.isImpersonated()) {
return true;
}
if (!themeDisplay.isSignedIn()) {
return false;
}
User user = themeDisplay.getUser();
if (!user.isSetupComplete()) {
return false;
}
return true;
}
/**
* Extra check for test
*
* @param request
* @return
*/
protected boolean isAdmin(HttpServletRequest request) {
ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
WebKeys.THEME_DISPLAY);
boolean bRet = false;
try {
//Je souhaite l'afficher uniquement lorsque j'ai des privilèges d'administrateur.
//Ici, pour des raisons d'explication, le rôle est acquis sous forme de chaîne de caractères, mais il peut être préférable d'utiliser l'ID de rôle dans le projet réel.
//(Étant donné que le nom de rôle de l'administrateur peut changer dans le projet réel. Si l'ID de rôle peut changer pour chaque base de données, il peut être préférable d'utiliser une chaîne de caractères telle que Administrateur comme clé.)
Role adminRole = RoleLocalServiceUtil.getRole(themeDisplay.getCompanyId(), "Administrator");
List<Role> roles = themeDisplay.getUser().getRoles();
for(Role role : roles) {
if(role.getName().equals(adminRole.getName())) {
bRet = true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return bRet;
}
Ensuite, modifiez le fichier bnd.bnd comme suit.
bnd.bnd
Bundle-SymbolicName: sampleproductnavigationcontrolmenutemplatecontextcontributor
Bundle-Version: 2.0.6
Liferay-Releng-Module-Group-Description:
Liferay-Releng-Module-Group-Title: Product Navigation
Liferay-Theme-Contributor-Type: product-navigation-control-menu
Web-ContextPath: /product-navigation-control-menu-theme-contributor
Bundle-Version, Liferay-Theme-Contributor-Type et Web-ContextPath copient le bnd.bnd de ProductNavigationControlMenuTemplateContextContributor.java inclus dans le DXP actuel.
Maintenant que le contributeur de thème est prêt,
blade deploy
Déployez avec, puis créez un thème.
Accédez au répertoire $ (liferay_workspace) / themes et créez un thème avec le thème classique Liferay CE. (Voir Comment créer un thème dans Liferay 7 / DXP)
Changer ce qui suit
init-custom.ftl
<#if isShowControlMenuFlg>
css_class = css_class?replace("has-control-menu", "")
css_class = css_class?replace("open", "")
</#if>
Après avoir changé la classe CSS comme
portal_normal.ftl
<@liferay.control_menu />
À
portal_normal.ftl
<#assign isShowControlMenu = htmlUtil.escape(isShowControlMenu!) />
<#if "true" == isShowControlMenu >
<@liferay.control_menu />
</#if>
changer en,
gulp deploy
Déployez avec.
Si vous déployez le contributeur / thème ci-dessus, les utilisateurs disposant de privilèges d'administrateur devraient voir le menu de contrôle et aucun autre utilisateur ne devrait le voir.
Recommended Posts