Contao-Camp 2024
Ergebnis 1 bis 5 von 5

Thema: Abonnierte Newsletter im Klartext anzeigen

  1. #1
    Contao-Nutzer Avatar von Schmidty
    Registriert seit
    06.06.2011.
    Ort
    Pforzheim
    Beiträge
    203

    Standard Abonnierte Newsletter im Klartext anzeigen

    Hallo, ein angemeldetes Mitglied soll auf einer (geschützten) Seite seine gespeicherten Daten anschauen können. Dazu wurde eine Seite erstellt, mit den entsprechenden Inserttags werden die Inhalte ausgegeben (z.B.: Vorname: {{user::firstname}}, Familienname: {{user::lastname}} usw.). Das funktioniert auch, aber bei den abonnierten Newslettern wird nur die ID des Newsletters angezeigt, nicht der Name des Newsletters.

    Newsletter: {{user::newsletter}} liefert als Ergebnis: Newsletter: 1, 2

    Wie können die Namen der Newsletter auf der Seite ausgegeben werden, so dass die Ausgabe so aussieht: Newsletter: Newsletter A, Newsletter B

    Ich habe schon folgende Varianten probiert, diese funktionieren aber nicht.

    PHP-Code:
    {{if member_newsletter=="1"}}Newsletter A{{endif}}{{if member_newsletter=="2"}}Newsletter B{{endif}}{{if member_newsletter=="1, 2"}}Newsletter ANewsletter B{{endif}} 
    PHP-Code:
    {{if {{user::newsletter}}=="1"}}Newsletter A{{endif}}{{if {{user::newsletter}}=="2"}}Newsletter B{{endif}}{{if {{user::newsletter}}=="1, 2"}}Newsletter ANewsletter B{{endif}} 
    Danke für Eure Hilfe.

  2. #2
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Frage vorab: Warum benutzt du nicht das Modul Personendaten? Dort kann man alle Daten sehen und wenn erlaubt bestimmte Daten ändern und neu speichern.

    Wenn du es unbedingt als Freitext im BE mit dazwischen eingeschobenen Member-Daten ausgeben möchtest, kannst du das am besten so machen.
    HTML-Code:
    Hallo {{file::member.php?f=firstname}},
    
    du hast die Newsletter {{file::member.php?f=newsletter}} abonniert.
    templates/member.php:
    PHP-Code:
    <?php

    // übergebene Variable "f" (Feld aus tl_member)
    $field = \Input::get('f');

    // das eingeloggte Mitglied ermitteln
    $member = \FrontendUser::getInstance();

    // wenn es das Feld in tl_member gibt
    if($member->$field)
    {
      switch(
    $field)
      {
        case 
    'newsletter':
          
    $nl $member->newsletter;
          foreach(
    $nl as $id)
          {
            
    $nlTitles[] = \NewsletterChannelModel::findByPk($id)->title;
          }
          
    $return implode(', '$nlTitles);
          break;

        default:
          
    $return $member->$field;
      }

      echo 
    $return;
    }
    Kurze Erklärung:

    Wenn in einem Datensatz Datensätze einer anderen Tabelle als ID referenziert werden, dann muss man sich die dazugehörigen Daten über das entsprechende Model holen.

    In tl_member werden natürlich nur die IDs der Newsletter-Kanäle gespeichert. Z.B. die 1 und die 3. Mit diesen IDs holt man sich dann aus tl_newsletter_channel das Feld welches man möchte, z.B. tl_newsletter_channel.title.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  3. #3
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Gibt es solche "if-Inserttags" überhaupt? Ich glaube nicht. Sieht so aus, als wolltest du da irgendwie eine Scriptsprachenlogik auf Inserttags anwenden. Inserttags sind nur Texte, welche ganz zum Schluss vor Ausgabe des HTML-Codes mit PHP gesucht, analysiert und dann entsprechend ersetzt werden.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  4. #4
    Contao-Nutzer Avatar von Schmidty
    Registriert seit
    06.06.2011.
    Ort
    Pforzheim
    Beiträge
    203

    Standard

    Hallo Andreas,

    Danke für das Skript, das funktioniert. Allerdings muss man die User-ID übergeben, sonst bekommt man eine Fehlermeldung:
    HTML-Code:
    Hallo {{file::member.php?f=id}},
    Jetzt gleich eine Zusatzfrage: Wie kann man User-ID übergeben werden ohne eine Ausgabe im Frontend?

    Im NotificationCenter funktioniert die folgende Variante, deshalb habe ich das auch im Frontend ausprobiert.
    HTML-Code:
    {{if member_newsletter=="1"}}Newsletter A{{endif}}{{if member_newsletter=="2"}}Newsletter B{{endif}}{{if member_newsletter=="1, 2"}}Newsletter A, Newsletter B{{endif}}
    Zitat Zitat von Andreas Beitrag anzeigen
    Gibt es solche "if-Inserttags" überhaupt? Ich glaube nicht. Sieht so aus, als wolltest du da irgendwie eine Scriptsprachenlogik auf Inserttags anwenden. Inserttags sind nur Texte, welche ganz zum Schluss vor Ausgabe des HTML-Codes mit PHP gesucht, analysiert und dann entsprechend ersetzt werden.
    Das war nur ein Test ob es eventuell damit funktioniert...


    NACHTRAG: Das Modul Personendaten zeigt alles richtig an, aber der Benutzer kann dann die Daten auch bearbeiten. Ich habe keine Einstellung gefunden um das Editieren zu deaktivieren.
    Geändert von Schmidty (17.03.2018 um 20:49 Uhr)

  5. #5
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Schmidty Beitrag anzeigen
    Danke für das Skript, das funktioniert. Allerdings muss man die User-ID übergeben, sonst bekommt man eine Fehlermeldung:
    Kann ich nicht bestätigen. Wenn im FE kein Mitglied eingeloggt ist, passiert nichts. Wenn ein Mitglied eingeloggt ist, dann sind die Daten des Mitglieds in der Variable $member gespeichert.

    Zitat Zitat von Schmidty Beitrag anzeigen
    Jetzt gleich eine Zusatzfrage: Wie kann man User-ID übergeben werden ohne eine Ausgabe im Frontend?
    Diese Frage wird sich erübrigen.

    Zitat Zitat von Schmidty Beitrag anzeigen
    ... NotificationCenter funktioniert die folgende Variante, deshalb habe ich das auch im Frontend ausprobiert.
    Ja, ich denke das ist speziell im NotificationCenter nutzbar. Ich glaube nicht, dass diese Konstrukte jetzt überall im Core mit Inserttags funktionieren wenn NC installiert ist.

    Zitat Zitat von Schmidty Beitrag anzeigen
    Das Modul Personendaten zeigt alles richtig an, aber der Benutzer kann dann die Daten auch bearbeiten. Ich habe keine Einstellung gefunden um das Editieren zu deaktivieren.
    Ja, das gibt es nicht. Du kannst das Template anpassen. Die Feldnamen stehen in $this->editable. Zur Ausgabe entweder die Feldwerte über ein FrontendUserObject, oder ein MemberModelObject holen. Beim FrontendUser sind einige serialisierte Arrays bereits in ein Array umgewandelt. Das MemberModel bringt die Werte, wie sie in der DB stehen. Hier mal ein Beispiel.
    PHP-Code:
    <?php

    $memberObj   
    = \FrontendUser::getInstance();
    $memberModel = \MemberModel::findByPk($memberObj->id);

    echo 
    '<h1>FrontendUserObject</h1>';
    foreach(
    $this->editable as $fieldname)
    {
      echo 
    '<pre><b>'.$fieldname.'</b>: ';
      
    print_r$memberObj->$fieldname);
      echo 
    '</pre>';
    }

    echo 
    '<h1>MemberModelObject</h1>';
    foreach(
    $this->editable as $fieldname)
    {
      echo 
    '<pre><b>'.$fieldname.'</b>: ';
      
    print_r$memberModel->$fieldname);
      echo 
    '</pre>';
    }
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •