Ergebnis 1 bis 9 von 9

Thema: Im geschützten Bereich Inhalte abhängig nach Anzahl Tage nach Anmelde-Datum ausgeben

  1. #1
    Contao-Nutzer
    Registriert seit
    05.04.2011.
    Beiträge
    165

    Standard Im geschützten Bereich Inhalte abhängig nach Anzahl Tage nach Anmelde-Datum ausgeben

    Hallo zusammen,
    ich benutze das Eintritts-Datum aus xtmembers als Start-Datum für einen OnlineKurs.
    Jeden Tag sollen neue Inhalte ausgegeben werden, abhängig vom Start-Datum.
    Wenn der entsprechende Tag noch nicht ist, wird eine dementsprechende Meldung ausgegeben.
    Die Unterseiten werden also erst freigeschaltet, wenn der Xte Tag nach Anmeldung ist.

    Im Augenblick stehe ich etwas auf dem Schlauch. Wie prüfe ich das ab?

    Mein erster Ansatz:
    Die Unterseiten sind ja nur für bestimmte MitgliederGruppen zugelassen.
    Wo ist hierfür die Abfrage? Kann ich hier auch die MitgliederDaten abfragen?

    Am besten wär es für mich, wenn ich es pro Artikel abprüfen könnte.

    Ich danke euch für einen Ansatz.
    Liebe Grüße ele

  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

    An die Felder des eingeloggten Mitglieds kommt man so (kann man in einem Template verwenden).
    PHP-Code:
    if(FE_USER_LOGGED_IN)
    {
      
    $objMember = \FrontendUser::getInstance();

      
    // Beispiel für das Feld tl_member.dateAdded
      
    dump($objMember->dateAdded);

    An die Felder von tl_page kommt man direkt ohne ein Model zu instanziieren.
    PHP-Code:
    global $objPage;

    dump($objPage->id$objPage->alias$objPage->protected$objPage->groups); 
    Wobei die Werte hier schon aufbereitet sind, d.h. ->groups ist zum Beispiel leer, wenn ->protected leer ist, obwohl in tl_page.groups ein serialisiertes Array der Gruppen-IDs drin steht. Und das serialisierte Array von $objPage->groups wird hier direkt als PHP-Array ausgegeben.

    Wenn man an die tatsächlichen Inhalte der Felder möchte, kann man auch ein Model instanziieren.
    PHP-Code:
    global $objPage;

    $pageModel = \PageModel::findByPk($objPage->id);

    echo 
    '<h1>$objPage</h1>';
    dump($objPage->id$objPage->alias$objPage->protected$objPage->groups);

    echo 
    '<h1>$pageModel</h1>';
    dump($pageModel->id$pageModel->alias$pageModel->protected$pageModel->groups);

    echo 
    '<h1>$objPage complete</h1>';
    dump($objPage); 
    Geändert von Andreas (30.04.2017 um 00:40 Uhr)
    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-Nutzer
    Registriert seit
    05.04.2011.
    Beiträge
    165

    Standard

    Puh, dass muss ich ers mal schlucken.
    Ich danke dir für den Ansatz.

    Das Programm läuft mehrere Wochen.
    D.h. ich könnte jetzt für jede Woche ein mod_article-Template aufbereiten, in dem ich das Datum abprüfe?
    Hast du noch einen Tipp wie das geht eine Gültigkeit von 7 Tagen abzuprüfen?
    Ich habe die Funktion DateTime::diff gefunden.
    Damit müsste ich doch errechnen können, ob der Zeitunterschied vom Start-Datum und Tages-Datum X Tage oder größer beträgt.
    Richtig?

    Evtl. benötige ich ja auch nur ein Template, wenn ich Variablen für die MindestAnzahl Gültigkeit festlegen könnte.

    LG ele
    Geändert von ele (30.04.2017 um 08:11 Uhr)

  4. #4
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.949

    Standard

    Zitat Zitat von ele Beitrag anzeigen
    D.h. ich könnte jetzt für jede Woche ein mod_article-Template aufbereiten, in dem ich das Datum abprüfe?
    Hast du noch einen Tipp wie das geht eine Gültigkeit von 7 Tagen abzuprüfen?
    Wenn Du, wie von @andreas beschrieben, über $objMember->dateAdded das Datum (den Timestamp des Hinzufügens des Users hast und über time() den Zeitstempel von "jetzt" bekommst, kannst Du die Zeitdifferenz ausrechnen. Wenn die dann größer ist als eine Woche, dann kannst Du die von Dir gewünschte Aktion durchführen.

    Heißt: Du brauchst nur ein Template. Das berechnet die Zeitdifferenz selbst.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  5. #5
    Contao-Nutzer
    Registriert seit
    05.04.2011.
    Beiträge
    165

    Standard

    Danke fiedsch, das war auch gerade mein Ansatz, den ich im Beitrag oben verbessert hatte.
    Codetechnisch stehe ich da aber noch etwas auf dem Schlauch. So groß sind meine Programmierkenntnisse nicht.
    Ich habe ja auch mehrere Wochen

  6. #6
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.949

    Standard

    Bzgl. der Variablen für die Mindestzahl der Tage, die vergangen sein müssen, bis der Inhalt angesehen werden darf würde ich es so machen, daß ich das als neues/zusätzliches Feld im Inhaltselement oder Artikel machen würde. Wenn aber
    Zitat Zitat von ele Beitrag anzeigen
    So groß sind meine Programmierkenntnisse nicht.
    wird das wohl nichts :-(

    Nichtsdestotrotz: zeig doch mal Deinen Code!
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  7. #7
    Contao-Nutzer
    Registriert seit
    05.04.2011.
    Beiträge
    165

    Standard

    na, ich denke schon, dass ich das hinbekomme. Ich dachte, ich könnte das erst einmal aus Zeitgründen umgehen.
    Sauberer ist es natürlich und machen wollte ich das auch schon immer.
    Dann werde ich mich daran probieren.
    Ich danke euch erst einmal und melde mich evtl. wieder
    Gruß ele
    Geändert von ele (30.04.2017 um 10:03 Uhr)

  8. #8
    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

    Guck mal, ob du mit der Erweiterung [inserttags] was anfangen kannst. Damit kann man Ausgaben zeitlich steuern.

    Ansonsten hier mal ein Ansatz für ein Template.
    PHP-Code:
    <?php
    /*
    Jetzt     = 1.100.000
    Anmeldung = 1.000.000
    Tage      =         7
    EinTag    =    86.400
    KursEnde  = Anmeldung + Tage x EinTag

    StartKurs1 = Anmeldung + 0 x EinTag
    StartKurs2 = Anmeldung + 1 x EinTag
    ...
    StartKurs7 = Anmeldung + 6 x EinTag
    */

    // Vairables
    $days        7;
    $articles    = array(1234567);// Article IDs
    $now         time();
    $resigned    = \FrontendUser::getInstance()->resigned;
    $oneDay      86400;
    $courseEnd   $resigned $days $oneDay;
    $courseStart = array();



    // Build the array of course start timestamps
    for($i 0$i $days$i++)
    {
      
    $courseStart[] = $resigned $i $oneDay;
    }

    // Output logic
    if($now $courseEnd)
    {
      
    // Get the right article
      
    foreach($courseStart[] as $key => $start)
      {
        if(
    $start $now)
        {
          echo \
    Controller::getArticle($key);
          break;
        }
      }
    }
    else
    {
      
    $GLOBALS['TL_LANG']['CUSTOM']['noCourse'] = 'Your course has finished.'// Should be in system/config/langconfig.php
      
    echo $GLOBALS['TL_LANG']['CUSTOM']['noCourse'];
    }

    ?>
    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

  9. #9
    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 ele Beitrag anzeigen
    Puh, dass muss ich ers mal schlucken.
    Ich danke dir für den Ansatz.
    Das war ja erstmal nur, damit du weißt, wie man in einem Tempate an die Felder von tl_member (aktuell eingeloggt) und die Felder von tl_page kommt.

    Kurz:
    PHP-Code:
    // tl_member (eingeloggtes Mitglied)
    $fieldname = \FrontendUser::getInstance()->fieldname

    // tl_page
    global $objPage;
    $fieldname $objPage->fieldname
    Ich gehe davon aus, dass du parallel immer einen Blick in die DB wirfst, mit phpMyAdmin, HeidiSQL o.ä.
    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
  •