+ Antworten
Ergebnis 1 bis 8 von 8

Thema: Modul nur bedingt laden

  1. #1
    Wohnt hier Avatar von aruttkamp
    Registriert seit
    01.09.2004
    Ort
    Bergisches Land
    Alter
    49
    Beiträge
    2.934
    Bedankte sich
    112
    Erhielt 453 Danksagungen
    in 429 Beiträgen

    Standard Modul nur bedingt laden

    Hallo !

    ich möchte gerne ein Modul nur unter bestimmten Umständen laden.
    Konkret geht es um den mod_lettermansubscribe.php

    Hier stelle ich mir vor , dass das Modul nur dann geladen wird, wenn der User noch
    keinen Newsletter abonniert hat.

    Wie ich feststelle ob oder ob nicht ist mir klar. das ist kein Problem.

    Ich bekomme es nicht hin , das Modul zu "beenden" wenn die Bedingung erfüllt ist.

    Gibt es da eine Möglichkeit ?

    Andreas

  2. #2
    Gehört zum Inventar
    Registriert seit
    18.02.2005
    Beiträge
    8.841
    Bedankte sich
    85
    Erhielt 2.269 Danksagungen
    in 1.936 Beiträgen

    Standard

    Das wird auch nicht wirklich gut funktionieren. Du würdest eine Beziehung zwischen dem
    jeweiligen User und seiner gespeicherten Emailadresse benötigen. Da sich vermutlich jeder
    User nur mit seiner Email eintragen kann, wird eine Identifizierung schwierig.
    Im Prinzip hast du drei Möglichkeiten:
    IP - wenig sicher, unbrauchbar
    Session - relativ sicher, nur bis zum Ende der Sitzung
    Cookie - mittelmäßig sicher, unbegrenztes Setzen zwar möglich, aber löschen geht immer,
    zudem kann man nicht sicherstellen, dass auch wirklich ein Cookie auch gesetzt wurde.

    So gesehen gibt es keine wirklich gute Methode so etwas zu basteln. Cookie setzen wäre
    also der sinnvollste Ansatz. Vielleicht sogar in Mischung mit der Session.
    Sobald das Formular versendet wurde, wird ein Cookie auf dem Rechner des Absenders
    gespeichert. "J!" ermittelt das bereits ein Cookie existiert und blendet das Modul aus.
    Im Prinzip nicht schwierig umzusetzen. Mit PHP kannst du sehr einfach Cookies setzen,
    mosGetParam liefert den Rückgabewert.

    Grüße
    ec

  3. #3
    Wohnt hier Avatar von aruttkamp
    Registriert seit
    01.09.2004
    Ort
    Bergisches Land
    Alter
    49
    Beiträge
    2.934
    Bedankte sich
    112
    Erhielt 453 Danksagungen
    in 429 Beiträgen

    Standard

    Hallo ecomeback !

    Ich habe nicht klar genug ausgedruckt. Mir geht es nur darum ein Modul nur bedingt zu laden.
    Wie ich das mit dem NL mache ist mir klar. Das kann nicht gehen , wenn der user nicht angemeldet ist und nicht mit seiner Emailadresse registriert wurde. Das ist aber nicht mein Problem.

    Ich möchte das Modul quasi mit der 2. Codezeile beenden , wenn eine bestimmte Bedignung erfüllt ist. Das bekomme ich einfach nicht hin.
    Es wird immer die Überschrift ausgegeben und dann eine endlos lange Ausgabe die nicht beendet wird.
    Genau das würde ich gerne verhindern.

    Ich such gleich mal meinen Experementiercode draus und poste ihn noch , dann wirds gaub ich klarer.

    Andreas

  4. #4
    Gehört zum Inventar
    Registriert seit
    18.02.2005
    Beiträge
    8.841
    Bedankte sich
    85
    Erhielt 2.269 Danksagungen
    in 1.936 Beiträgen

    Standard

    Ich such gleich mal meinen Experementiercode draus und poste ihn noch , dann wirds gaub ich klarer.
    Dann schieß mal los.

    Grüße
    ec

  5. #5
    Wohnt hier Avatar von aruttkamp
    Registriert seit
    01.09.2004
    Ort
    Bergisches Land
    Alter
    49
    Beiträge
    2.934
    Bedankte sich
    112
    Erhielt 453 Danksagungen
    in 429 Beiträgen

    Standard

    Hallo ecomeback,

    hier der "Bastelcode". dieser entstammt dem o.g. Modul.
    an der gekennzeichneten Stelle möchte ich das Modul halt einfach beenden.
    Habe es mit "Die()" probiert, aber dann bleibt das unendlich lange leere Modul stehen-

    Andreas

    Code:
    <?php
    ...
    
    defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
    global $my;
    
    	if( $my->id ) {
    
    		$q = "SELECT subscriber_id FROM `#__letterman_subscribers` WHERE user_id=".$my->id.' OR subscriber_email=\''.$my->email.'\'';
    		$database->setQuery($q); $subscriber = $database->loadResult();
    
    		if( empty($subscriber)) {
    --> Hier passiert nix
    		}
    		else {
    --> Hier möchte ich das Modul beenden
    		}
    	}
    
    /**
     * Configuration
     * ------------------
     */
    if( !file_exists($mosConfig_absolute_path . "/components/com_letterman/letterman.php")) {
    	echo '<p>This module requires the Letterman component.</p>';
    }
    ...

  6. #6
    Gehört zum Inventar
    Registriert seit
    18.02.2005
    Beiträge
    8.841
    Bedankte sich
    85
    Erhielt 2.269 Danksagungen
    in 1.936 Beiträgen

    Standard

    Da liegt der Hase nicht im Pfeffer. Wie beenden? Ich habe überhaupt keine Vorstellung,
    was da passiert bzw.passieren soll. Du kannst das Modul ansich nicht beenden. Allerdings
    frage ich mich wie du auf ein "unendlich" langes Modul kommst. Wird da etwas ausgegeben?

    Also mit dem Code kannst ich so erst einmal nichts anfangen.

    Grüße
    ec

  7. Erhielt Danksagungen von:


  8. #7
    Wohnt hier Avatar von aruttkamp
    Registriert seit
    01.09.2004
    Ort
    Bergisches Land
    Alter
    49
    Beiträge
    2.934
    Bedankte sich
    112
    Erhielt 453 Danksagungen
    in 429 Beiträgen

    Standard

    Erstmal danke fürs draufgucken.

    Ich denke , mein ansatz ist der falsche. Ich muss, wenn ich das Modul wirklich nicht laden will früher ansetzen und es gar nicht erst zum aufruf des moduls kommen lassen.

    Evtl. baue ich mir nur die ausgabe des Moduls um.

    Bis dann

    Andreas

  9. #8
    Gehört zum Inventar
    Registriert seit
    18.02.2005
    Beiträge
    8.841
    Bedankte sich
    85
    Erhielt 2.269 Danksagungen
    in 1.936 Beiträgen

    Standard

    So gesehen richtig.

    Ich würde vorschlagen du bastelst dir eine spezielle PHP Datei, die du dann einbindest.
    Das könnte so aussehen.

    PHP-Code:
    <?php
    defined
    '_VALID_MOS' ) or die( 'no direct access' );
    class 
    TemplateHelper
    {
         function 
    loadLetterman($position,$style=-2)
         {
        global 
    $database$my;

        if( 
    $my->id 
        {
            
    $query "SELECT subscriber_id FROM #__letterman_subscribers"
                
    ."\n WHERE user_id=".(int)$my->id
                
    ."\n OR subscriber_email=".$database->Quote($my->email)
                ;
            
    $database->setQuery($query); 
            
    $result $database->loadResult();

            if(empty(
    $result)) 
            {
                          return 
    mosLoadModules($position,$style);
                      }
             }
       }
    }
    ?>
    Diese bindest du dann im Temlate mit
    PHP-Code:
    require_once(dirname(__FILE__).'/php/helper.php'); 
    ein.

    Dann kannst du ein wenig aufgeräumter agieren.
    PHP-Code:
    <?php TemplateHelper::loadLetterman('right',-2); ?>
    Grüße
    ec

+ Antworten

Lesezeichen

Berechtigungen

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