Login-Popup öffnen oder Ereignis auslösen, wenn die Taste gedrückt wird

Es gibt einen einfachen Weg: Der Button hat die Klasse sign-up-button

Beim Klicken wird das Registrierungs-Popup geöffnet. Anstatt a: href ist eine Anmeldung zu verwenden


Ich habe api.decorateWidget('post: after', helper verwendet

Aber es gibt NAME:LOCATION, das einzigartig ist, um einen Code-Schnipsel am Ende des Artikels einzufügen.

Oder den Ort, an dem man NAME: LOCATION findet.

post:after sollte funktionieren, wenn Sie neue Elemente am Ende eines Beitrags hinzufügen möchten. Beachten Sie, dass Sie ein Leerzeichen zwischen post: und after haben.

Ich denke, das hängt mit dem zusammen, was Sie versuchen zu tun.

Wenn Sie immer noch Probleme haben, posten Sie bitte den Rest des Codes, den Sie verwenden.

Danke für deine Hilfe (besonders für Neueinsteiger)
Dies ist der gesamte Code

<script type="text/discourse-plugin" version="0.8.25">
    const user = api.getCurrentUser();
    if (!user) {
    api.decorateWidget('post:after', helper => {
        let h = helper.h, attrs = helper.attrs;
        // console.log(attrs);
        return helper.h('div.fixed-bottom-bar.d-none.d-lg-block',
            [
                helper.h('div.wrapper',
                    [
                        helper.h('div.logo',
                            helper.h('img', {
                                src: 'https://thuvienmuasam.com/uploads/default/original/1X/776142524c0d5c0430a603fde63a8bad2f77b267.svg',
                                alt: 'ThuVienMuaSam'
                            })
                        ),
                        helper.h('div.content.d-flex.justify-content-between.ml-1',
                            [

                                helper.h('div.float-left',
                                    [
                                        helper.h('span.title','Willkommen in der Einkaufsbibliothek!'),
                                        helper.h('br'),
                                        helper.h('span.text',
                                            [
                                                helper.h('span','Beginne '),
                                                helper.h('a.text-primary.cursor-pointer.sign-up-button',{ href: '/signup'},
                                                    helper.h('strong','einen TVMS-Account zu registrieren')
                                                ),
                                                helper.h('span',' um noch mehr interessante Beiträge von '),
                                                helper.h('a',{ href: '/u/'+helper.attrs.username },
                                                    helper.h('strong',""+helper.attrs.username),
                                                ),
                                            ])
                                    ]),
                                helper.h('div.float-right.d-flex.align-items-center',
                                    helper.h('button.btn-primary.btn',{type:'button'},
                                        helper.h('a', { href: '/signup'},
                                            helper.h('span.d-button-label','Beitreten')
                                        ),
                                    )

                                ),
                            ]
                        ),
                    ]
                )
            ]
        );
    });
}
</script>

Ich habe helper.h(‘a’, { href: ‘/signup’} verwendet, aber beim Klicken auf den Button wird die Seite neu geladen, anstatt das Registrierungs-Fenster sofort anzuzeigen.

Danke, dass du deinen Code geteilt hast :+1:

Wenn du möchtest, dass die Anmelde- bzw. Registrierungs-Modals direkt angezeigt werden, musst du die integrierten Aktionen showLogin und showCreateAccount verwenden.

Anstatt also folgendes:

helper.h(
  "button.btn-primary.btn",
  { type: "button" },
  helper.h(
    "a",
    { href: "/signup" },
    helper.h("span.d-button-label", "Tham Gia")
  )
)

solltest du für das Registrierungs-Modal so etwas verwenden:

helper.attach("button", {
  label: "sign_up",
  className: "btn-primary btn-small sign-up-button",
  action: "showCreateAccount"
})

oder für das Anmelde-Modal folgendes:

helper.attach("button", {
  label: "log_in",
  className: "btn-primary btn-small login-button",
  action: "showLogin",
  icon: "user"
})

Ich möchte noch anmerken, dass ich es für sehr benutzerunfreundlich halte, unter jedem Beitrag für anonyme Nutzer ein Banner mit den Registrierungs-/Anmelde-Buttons einzufügen, und würde davon abraten. Allerdings kenne ich deinen konkreten Anwendungsfall nicht so genau. Hast du schon darüber nachgedacht, das Banner bzw. Bild stattdessen oben auf deiner Website anzuzeigen, anstatt es in jeden einzelnen Beitrag einzufügen?

Vielen Dank, dass du zurückgekommen bist und alle Fragen beantwortet hast :smile:

Ich möchte neue Benutzer jetzt verbessern, dafür brauche ich Maßnahmen.
Derzeit funktioniert es nur auf dem PC.
Ich durchsuche Artikel über Cookies, um sie ausblenden oder verbergen zu können, wenn Benutzer auf „Ausblenden

wo platziere ich diesen Code in meinem Mint-Theme?

Sie können eine neue Theme-Komponente erstellen und sie an Ihr Theme anhängen.

Ich hoffe, das hilft. :+1:

in Mint-Theme, wo soll dieser Code platziert werden?

Haben Sie die Schritte ausprobiert, die @Arkshine bereitgestellt hat?
Da Sie keine Remote-Themes bearbeiten können, ist es am besten, Ihre eigene Theme-Komponente zu erstellen und diese zum Mint-Theme hinzuzufügen.

Ich erhalte console.error(“API oder showLogin-Funktion sind nicht verfügbar.”);

Ich habe die Schritte befolgt, aber als ich die Anmeldeseite erreichte, wurde das Modell nicht automatisch geöffnet.

<script type="text/discourse-plugin" version="0.8.25">
    // Funktion zur Überprüfung, ob die aktuelle Seite die Anmeldeseite ist
    function isLoginPage() {
        return window.location.pathname === "/login";
    }

    // Anmeldeaktion auslösen, wenn die Seite geladen wird
    document.addEventListener("DOMContentLoaded", function() {
        console.log("DOMContentLoaded-Ereignis ausgelöst.");
        
        // Überprüfen, ob die aktuelle Seite die Anmeldeseite ist
        if (isLoginPage()) {
            console.log("Aktuelle Seite ist die Anmeldeseite.");
            
            // Anmeldeaktion auslösen
            if (typeof api !== "undefined" && typeof api.showLogin === "function") {
                console.log("API und showLogin-Funktion sind verfügbar.");
                api.showLogin();
            } else {
                console.error("API oder showLogin-Funktion sind nicht verfügbar.");
            }
        } else {
            console.log("Aktuelle Seite ist nicht die Anmeldeseite.");
        }
        
        // Das Anmelde-Button-Element abrufen
        const loginButton = document.getElementById("loginButton");

        // Ein Klickereignis auf den Anmelde-Button auslösen, um das Anmelde-Modal zu öffnen
        if (loginButton) {
            loginButton.click();
        }
    });
</script>

Ich erhalte die Konsolenausgabe: console.error(“API oder showLogin-Funktion sind nicht verfügbar.