[JAVA] Ich möchte die Anzeige der oberen Verwaltungsnavigationsleiste (Steuerungsmenü) in Liferay 7 / DXP steuern

Entsprechende Version

Liferay DXP SP1 oder höher / Liferay 7 CE

Einführung

Es gibt viele Projektanforderungen, die die Anzeige des Steuerungsmenüs oben in Liferay steuern möchten. Die Methode zur Behandlung eines solchen Falles wird beschrieben.

Offizielles Dokument: THEMENBEITRÄGE Offizielles Dokument: CONTEXT CONTRIBUTORS Die Erklärung zum Umgang damit wird in beschrieben, aber die tatsächliche Methode zum Erstellen eines Portlets wird hier erläutert.

Voraussetzungen

Es wird davon ausgegangen, dass der Liferay-Arbeitsbereich erstellt wurde und die Blade-Tools und verschiedene Tools zum Erstellen von Designs installiert wurden. Das folgende Dokument erläutert die Einrichtungsmethode.

Als Testszenario, der Standardrolle von Liferay, wird die Spezifikation implementiert, dass das Steuerungsmenü nur Benutzern mit Administratorrechten angezeigt wird.

Erstellen eines Vorlagenkontext-Mitwirkenden

Verschoben unter $ (liferay_workspace) / modules.

Wir müssen also einen Theme-Contributor erstellen, um das Control Menu-Bundle zu ersetzen. Wählen Sie in Liferay Developer Studio / IDE Datei-> Neu-> Liferay-Modulprojekt aus und wählen Sie unter Projektvorlagenname den Vorlagenkontextbeitrag aus.

Oder an der Kommandozeile

blade create -t template-context-contributor -p com.liferay.product.navigation.control.menu.theme.contributor -c SampleProductNavigationControlMenu sample-product-navigation-control-menu-theme-contributor

Erstellen Sie ein Modulprojekt mit dem Blade-Tool in.

Erstellen eines SampleProductNavigationControlMenuTemplateContextContributor

Öffnen Sie die Basisdatei des Steuerungsmenüs

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

Kopieren Sie den folgenden Teil in 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;
	}

Wenn Sie die Anzeige nur eingrenzen, wenn Sie über Administratorrechte für die Standardrolle verfügen, und einen Prozess zum Festlegen einer Variablen hinzufügen, die die Anzeigebedingungen auf der Themenseite ausgibt, sieht dies wie folgt aus.

    @Override
    public void prepare(
        Map<String, Object> contextObjects, HttpServletRequest request) {

        //Schreiben Sie eine Variable, damit Theme beurteilen kann, ob das Menü angezeigt wird oder nicht.
        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 {

            //Ich möchte es nur anzeigen, wenn ich Administratorrechte habe.
            //Zur Erläuterung wird hier die Rolle als Zeichenfolge erfasst. Es ist jedoch möglicherweise besser, die Rollen-ID im eigentlichen Projekt zu verwenden.
            //(Da sich der Rollenname des Administrators im tatsächlichen Projekt ändern kann. Wenn sich die Rollen-ID für jede Datenbank ändert, ist es möglicherweise besser, eine Zeichenfolge wie Administrator als Schlüssel zu verwenden.)
            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;
    }	

Ändern Sie als Nächstes die Datei bnd.bnd wie folgt.

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 und Web-ContextPath kopieren bnd.bnd von ProductNavigationControlMenuTemplateContextContributor.java, das im aktuellen DXP enthalten ist.

Jetzt, da der Theme Contributor bereit ist,

blade deploy

Bereitstellen mit und dann Design erstellen.

Thema erstellen

Wechseln Sie in das Verzeichnis $ (liferay_workspace) / themes und erstellen Sie ein Thema mit dem klassischen Liferay CE-Thema. (Siehe So erstellen Sie ein Thema in Liferay 7 / DXP)

Ändern Sie Folgendes

init-custom.ftl


<#if isShowControlMenuFlg>
    css_class = css_class?replace("has-control-menu", "")
    css_class = css_class?replace("open", "")
</#if>

Nach dem Ändern der CSS-Klasse wie

portal_normal.ftl


<@liferay.control_menu />

Zu

portal_normal.ftl


<#assign isShowControlMenu = htmlUtil.escape(isShowControlMenu!) />
<#if "true" == isShowControlMenu >
	<@liferay.control_menu />
</#if>

ändern,

gulp deploy

Bereitstellen mit.

Wenn Sie den obigen Contributor / Theme bereitstellen, sollten Benutzer mit Administratorrechten das Steuerungsmenü sehen und keine anderen Benutzer sollten es sehen.

Recommended Posts

Ich möchte die Anzeige der oberen Verwaltungsnavigationsleiste (Steuerungsmenü) in Liferay 7 / DXP steuern
Ich möchte die Farbe des Steuerungsmenüs oben in Liferay 7 / DXP ändern
Ich möchte den Namen des Posters des Kommentars anzeigen
[Rails] Ich möchte das Linkziel von link_to auf einer separaten Registerkarte anzeigen
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
Ich möchte die JSP des offenen Portlets bei der Entwicklung von Liferay kennen
[Ruby] Ich möchte veröffentlichte Artikel in der Reihenfolge des neuesten Datums anzeigen
Ich möchte bei der Registrierung in der Datenbank eine Fehlermeldung anzeigen
Ich möchte den Inhalt der Absicht var_dump
Ich möchte den Wert in Ruby erhalten
Ich möchte eine TraceId in das Protokoll einbetten
Ich möchte die Antwort der Janken-App wissen
Ich möchte die Bildlaufposition von UITableView zurückgeben!
[Active Admin] Ich möchte den Umfang der Sammlung angeben, die in select_box angezeigt werden soll
Ich möchte die Protokollausgabeeinstellung von UtilLoggingJdbcLogger ändern
Ich möchte die maximale Dateigröße für das Hochladen von Dateien für jede URL in Spring Boot steuern
Ich möchte im gespeicherten Zustand zum selben Bildschirm wechseln
Ich möchte den Inhalt von Assets in der mit capistrano erstellten Umgebung von Grund auf neu erstellen
[Ruby] Ich möchte die Reihenfolge der Hash-Tabelle umkehren
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
Ich möchte die Methode des Controllers kennen, bei der die Ausnahme im ExceptionHandler von Spring Boot ausgelöst wurde
Ich möchte den Ablauf der Spring-Verarbeitungsanforderungsparameter verstehen
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
Ich möchte die Eingabe begrenzen, indem ich den Zahlenbereich einschränke
Ich möchte den oberen Rand in der UITableView von Grouped entfernen (schnell)
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
[Android] Ich möchte den Listener über die Schaltfläche in ListView abrufen
Ich möchte die Pulldown-Menüelemente beim Senden eines Formulars in Rails in CSV importieren und aus den DB-Daten anzeigen.
[Ruby] Ich möchte nur das ungerade Zeichen in der Zeichenfolge ausgeben
Ich möchte Bilder mit REST Controller von Java und Spring anzeigen!
[Swing] So zeigen Sie einen beliebigen Namen in der Menüleiste des Mac an
[Ruby] Ich möchte nur den Wert des Hash und nur den Schlüssel extrahieren
So wechseln Sie die Anzeige des Header-Menüs für jede Übergangsseite
Ich möchte das Argument der Annotation und das Argument der aufrufenden Methode an den Aspekt übergeben
Ich möchte ein chinesisches (koreanisches) PDF mit dünnen Berichten anzeigen
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
Ich habe versucht, den CPU-Kern mit Ruby voll auszunutzen
Ich möchte den Feldnamen des [Java] -Felds erhalten. (Alter Ton)
Ich möchte, dass Sie Enum # name () für den Schlüssel von SharedPreference verwenden
Ich möchte @Autowired in Servlet verwenden
Wenn Sie die Testabdeckung privater Methoden in JUnit erfüllen möchten
Ich möchte den Wert von Cell unabhängig vom CellType (Apache POI) transparent erhalten.
[Swift] So ändern Sie die Reihenfolge der Balkenelemente in Tab Bar Controller [Anfänger]
Entwicklungsnotiz ~ Ich möchte nur das erste Bild anzeigen, das mehrmals gepostet wurde ~
Ich möchte den Inhalt der Anfrage sehen, ohne vier oder fünf zu sagen
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten