Contao-Camp 2024
Ergebnis 1 bis 6 von 6

Thema: Abonnenten des Newsletters zählen / in Template ausgeben - Anzahl der Abonnenten

  1. #1
    Contao-Nutzer
    Registriert seit
    04.05.2015.
    Beiträge
    13

    Standard Abonnenten des Newsletters zählen / in Template ausgeben - Anzahl der Abonnenten

    Hi,

    ich würde gerne die aktivierten Abonnenten zählen und in einem Template im Frontend (nl_default) ausgeben.
    Geht das halbwegs simpel oder hat jemand eine Idee, wie das am besten umgesetzt werden könnte?

    Danke Euch.

    Beste Grüße,
    Tom

  2. #2
    Contao-Nutzer
    Registriert seit
    04.05.2015.
    Beiträge
    13

    Standard Keiner eine Idee?

    Hat jemand evtl. einen Ansatz? Kann man das evtl. mittels einer einfachen DB-Abfrage lösen? Natürlich müsste die gecached werden und nicht bei jedem Seitenaufruf ausgeführt werden...

    Wäre wirklich sehr dankar für Hilfe...

    LG

  3. #3
    Contao-Fan
    Registriert seit
    27.06.2012.
    Beiträge
    600

    Standard

    suche mal nach database klasse verwenden. damit kannst du einfach sql abfragen machen. eine sql abfrage ist nicht so rechenintensiv, dass diese gecached wrden muss

    verwendest du contao3+?

    du kannst die klasse mit $db = Database::getInstance() laden und dann mit $db statements ausführen.

    Gesendet von meinem SM-G900F mit Tapatalk

  4. #4
    Contao-Nutzer
    Registriert seit
    04.05.2015.
    Beiträge
    13

    Standard Danke

    Hi valentin,

    danke, war der richtige Tipp, habe es letztendlich selber umgesetzt. Für alle, die es noch interessiert (Contao Version 3.4.5):

    1. in "system/modules/newsletter/modules/ModuleSubscribe.php" Template-Variablen um Subscriber-Variable erweitern (ca. Zeile 127)
    Code:
    // Default template variables
    $this->Template->email = '';
    $this->Template->channels = $arrChannels;
    $this->Template->showChannels = !$this->nl_hideChannels;
    $this->Template->submit = specialchars($GLOBALS['TL_LANG']['MSC']['subscribe']);
    $this->Template->channelsLabel = $GLOBALS['TL_LANG']['MSC']['nl_channels'];
    $this->Template->emailLabel = $GLOBALS['TL_LANG']['MSC']['emailAddress'];
    $this->Template->action = \Environment::get('indexFreeRequest');
    $this->Template->formId = 'tl_subscribe';
    $this->Template->id = $this->id;
    $this->Template->hasError = $blnHasError;
    
    // subscribers
    $this->Template->subscribers = $this->countRecipients();
    2. funktion "countRecipients" ergänzen
    Code:
    /**
    * Count all Recipients
    */
    protected function countRecipients()
    {
    	$this->import('Database');
    	$numberOfRecipients = $this->Database->prepare("SELECT COUNT(*) AS count FROM tl_newsletter_recipients")
    											 ->execute();
    
    	return $numberOfRecipients->count;
    }
    3. im Template nl_default Folgendes ergänzen ("subscribers" = oben ergänzter variablenname):
    Code:
    <?php echo $this->subscribers; ?>
    evtl. hilfts jemandem, bin aber kein programmierer und gibt sicherlich bessere wege, aber erstmal klappts

    lg tom

  5. #5
    Contao-Fan
    Registriert seit
    27.06.2012.
    Beiträge
    600

    Standard

    wenn du das im core machst, geht alles im modul mit dem nächsten update verloren. also am besten die abfrage direkt im template machen oder das modul erweitern.

    lg

    Gesendet von meinem SM-G900F mit Tapatalk

  6. #6
    Contao-Nutzer
    Registriert seit
    01.06.2012.
    Ort
    Freiburg
    Beiträge
    58

    Standard

    Altes Thema, aber ich habe mich gerade damit rumgeschlagen.
    Ich habe es (mithilfe dieses Threads) letztendlich per Template über eine direkte Datenbankabfrage gelöst:

    Template: nl_default.html5

    PHP-Code:
    ...
    </form>

    <?php
        $this
    ->import('Database');
        
        
    $objCount1 $this->Database->prepare("SELECT COUNT(*) AS cnt FROM tl_newsletter_recipients WHERE pid=1")->execute();
        
    $objCount2 $this->Database->prepare("SELECT COUNT(*) AS cnt FROM tl_newsletter_recipients WHERE pid=2")->execute();
        
        echo 
    'Newsletter 1 hat ' $objCount1->cnt ' Abonnenten.';
        echo 
    'Newsletter 2 hat ' $objCount2->cnt ' Abonnenten.';
        
    ?>
    Ggf. sollte man vor $this->import('Database'); noch ein if (!defined('TL_ROOT')) die('You cannot access this file directly!'); einfügen, um das ganze vor unberechtigtem Zugriff zu schützen? Oder ist das mittlerweile Geschichte?

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
  •