+ Antworten
Ergebnis 1 bis 2 von 2

Thema: Mehrere Probleme bei eigenem Modul

  1. #1
    Neu an Board
    Registriert seit
    27.06.2007
    Beiträge
    51
    Bedankte sich
    2
    Erhielt 2 Danksagungen
    in 2 Beiträgen

    Standard Datenbankabfragen und AJAX in eigenem Modul

    Hallo,

    momentan versuch ich mich an einem Shoutcast Modul für Joomla 1.0.x (weil die Zielseite drauf läuft). In diesem Modul werden zuerst einige Daten vom Shoutcast Server abgefragt, dann einige Datenbankabfragen getätigt, das alles ausgegeben und zuletzt mittels eines AJAX-Scripts refreshed.

    Ich hab die Software vorher als externes PHP-Script genutzt, möchte es aber eben jetzt als richtiges Modul (aus offensichtlichen Gründen, wie Platzierung, Konfiguration etc.) nutzen. Für sich alleine genommen funktioniert das Teil auch wunderbar, insbesondere auch mit dem include-Modul mod_include.

    Die Datenbankabfragen habe ich jetzt umgeschrieben, so dass ich die interne Abfragenfunktion nutze:

    Code:
    <?php
    defined( '_VALID_MOS' ) or die( 'Restricted access' );
    // Datenbankfunktionen
    function getUsername($userId){
    //Usernamen abfragen
      $abfrage = "SELECT name FROM #__users WHERE id=" . $userId;
      $database->setQuery( $abfrage );
      if ($database->loadObjectList()){
        $rows = $database->loadObjectList();
        return $rows->name;
      }
      return "Unbekannt";
    }
    
    function getAvatar($userId){
    //User Bild abfragen
        $abfrage = "SELECT avatar FROM #__comprofiler WHERE id=" . $userId;
        $database->setQuery( $abfrage );
        if ($database->loadObjectList()){
          $rows = $database->loadObjectList();
          return $rows->avatar;
        }
        return "\"http://www.joomlaportal.de/images/stories/sendungen/no_image.jpg\" style=\"float:left;width:120px;margin:3px 3px 3px 3px;\"";
    }
    
    function getWunschbox($userId){
    //Status abfragen
        $abfrage = "SELECT cb_wunschboxan FROM #__comprofiler WHERE id=" . $userId;
        $database->setQuery( $abfrage );
        if ($database->loadObjectList()){
          $rows = $database->loadObjectList();
          return $rows->cb_wunschboxan;
        }
        return 'Nein';
    }
    
    function getTelefon($userId){
    //Status abfragen
    
        $abfrage = "SELECT cb_studiotelefon FROM #__comprofiler WHERE id=" . $userId;
        $database->setQuery( $abfrage );
        if ($database->loadObjectList()){
          $rows = $database->loadObjectList();
          return $rows->cb_studiotelefon;
        }
        return 'Nein';
    }
    ?>
    Die UserID wird über ein Feld an den Shoutcastserver vorher übergeben, dann ja ausgelesen und danach die Funktionen mit der ID als Parameter in der Ausgabefile aufgerufen.

    1. Problem an dieser Stelle
    : Sobald die erste Abfrage getätigt wurde, wird noch der Rest der Seite geladen, an dem keine Abfragen mehr stattfinden, und dann einfach der Seitenaufbau beendet.

    Das zweite Problem, das vermutlich irgendwie mit dem ersten Problem zusammenhängt, ist die Refreshfunktion. Da ich ja die Zeile
    Code:
    defined( '_VALID_MOS' ) or die( 'Restricted access' );
    nicht entfernen will, muss ich ja quasi die gesamte Seite aufrufen, und dann die entsprechende Div abfragen. Leider funktioniert der Refresh auch irgendwie nicht. Hier meine script.php für den refresh:
    Code:
    <?php
    defined( '_VALID_MOS' ) or die( 'Restricted access' );
    ?>
    
    <script type="text/javascript" language="javascript">
    // Matchcode Search script
    // Catching a string from an input field and get it into a get var to display
    // a external Website inclusive some GetVars in an Container
    
    var bustcachevar=1 //bust potential caching of external pages after initial request? (1=yes, 0=no)
    var loadedobjects=""
    var rootdomain="http://"+window.location.hostname
    var bustcacheparameter=""
    
    function ajaxpage(url, containerid){
       var page_request = false
       if (window.XMLHttpRequest) // if Mozilla, Safari etc
          page_request = new XMLHttpRequest()
       else if (window.ActiveXObject){ // if IE
          try {
             page_request = new ActiveXObject("Msxml2.XMLHTTP")
          }
          catch (e){
             try{
                page_request = new ActiveXObject("Microsoft.XMLHTTP")
             }
             catch (e){}
          }
       }
       else
       return false
       page_request.onreadystatechange=function(){
       loadpage(page_request, containerid)
    }
    
    if (bustcachevar) //if bust caching of external page
       bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
       page_request.open('GET', url+bustcacheparameter, true)
       page_request.send(null)
    }
    
    function loadpage(page_request, containerid){
       if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
       document.getElementById(containerid).innerHTML=page_request.responseText
    }
    
    function loadobjs(){
       if (!document.getElementById)
          return
          for (i=0; i<arguments.length; i++){
             var file=arguments[i]
             var fileref=""
             if (loadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
             if (file.indexOf(".js")!=-1){ //If object is a js file
                fileref=document.createElement('script')
                fileref.setAttribute("type","text/javascript");
                fileref.setAttribute("src", file);
             }
             else if (file.indexOf(".css")!=-1){ //If object is a css file
                fileref=document.createElement("link")
                fileref.setAttribute("rel", "stylesheet");
                fileref.setAttribute("type", "text/css");
                fileref.setAttribute("href", file);
             }
          }
          if (fileref!=""){
             document.getElementsByTagName("head").item(0).appendChild(fileref)
             loadedobjects+=file+" " //Remember this object as being already added to page
          }
       }
    }
    
    // Get inputs over
    function checkName() {
        ajaxpage('domain' , 'shoutcastdiv');
    }
    iv = setInterval("checkName()",15000);
    checkName();
    </script>
    Ich hab den Code nicht selber geschrieben, verstehe ihn aber halbwegs. In der checkname() wird die Adresse zur Seite, die sich ändert angegeben, sowie die entsprechende Div.

    Sonst ist auf der Seite kein Javascript vorhanden, also wirds auch von keiner anderen Komponente / Modul blockiert - es versagt schlichtweg von sich aus den Dienst.

    Was mach ich hier falsch? Ich denke nicht, dass es wirklich am Javascript Code liegt, da der im Originalprogramm einwandfrei funktioniert - erst seit der "Umwandlung" zum Modul klappts nicht. Und irgendwie hab ich die Hoffnung, dass sich das Thema auch erledigt, wenn die DB-Abfragen klappen. Das hätte für mich auch erst mal Priorität.

    EDIT: Verdammt... ich glaub es liegt am Includen von PHP Dateien, die die Zeile
    Code:
    defined( '_VALID_MOS' ) or die( 'Restricted access' );
    enthalten. Kein Wunder, wenn die Abfragen dann nicht klappen. Da schau ich mal nach ner Lösung...

    EDIT #2: Daran liegts nicht, die Zeile kommt in den includierten Files gar nicht vor... So langsam gehen mir die Ideen aus...

    EDIT: #3: So, ich kann das DB-Problem mittlerweile eingrenzen. Nehmen wir mal beispielhaft die
    Code:
    function getUsername($userId){
    //Usernamen abfragen
      $abfrage = "SELECT name FROM #__users WHERE id=" . $userId;
      $database->setQuery( $abfrage );
      if ($database->loadResult()){
        $rows = $database->loadResult();
        return $rows;
      }
      return "Unbekannt";
    }
    Das Teil returned überhaupt nichts, weil ab der Zeile
    Code:
      $database->setQuery( $abfrage );
    nicht mehr weitergearbeitet wird. Da steckt der Wurm drin, und ich weiß nicht, warum...
    Geändert von Lareth (16.12.2010 um 13:20 Uhr)

  2. #2
    Neu an Board
    Registriert seit
    27.06.2007
    Beiträge
    51
    Bedankte sich
    2
    Erhielt 2 Danksagungen
    in 2 Beiträgen

    Standard

    Im Anhang mal das komplette Modul zum schauen... Achtung: Keine Ahnung ob das Teil sicher ist, deswegen nicht auf Live-Sites verwenden.

    Konnte das Problem mit den Datenbankabfragen lösen: Die If-Bedingung war falsch, und global $database nicht eingebunden.
    Nur das Ajax-Refresh klappt noch nicht.

    EDIT: Hab das jetzt mit jquery gelöst.
    Angehängte Dateien
    Geändert von Lareth (16.12.2010 um 13:19 Uhr)

+ Antworten

Lesezeichen

Berechtigungen

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