ilch Forum » Ilch Clan 1.1 » Fehlersuche und Probleme » Ladezeiten ewig bei Bildern im Forum

Geschlossen
  1. #1
    User Pic
    jackdaniels Mitglied
    Registriert seit
    10.10.2008
    Beiträge
    3
    Beitragswertungen
    0 Beitragspunkte
    Moin!
    Ich hab folgendes Problem:
    Wenn ein Benutzer in seiner Signatur oder Forumpost ein Bild einbindet, z.B. von imageshack, lädt die Seite je nach Server ewig. Jetzt grade war imageshack mal wieder langsam, d.h. mein Firefox braucht ewig die Seite darzustellen, weil er wohl erst die Bilder von imageshack lädt, und dann das clanscript weiter.
    Ich musste heute knapp eine Minute warten, bis ich das Thema sehen konnte.
    Das Problem habe übrigens nicht nur ich, da auch ein Mac mit Safari und ein Windows-Rechner mit Internet Explorer so lang brauchen. Die Rechner sind unabhängig was Netzwerk und ISP betrifft.
    Ich schliesse ein Serverproblem auch aus, da z.B. die Startseite unseres Clan normal lädt, und jegliche andere seiten auch nicht davon betroffen sind.
    Ich brauche also entweder nen Code oder ein Update...


    verwendete ilchClan Version: 1.1

    betroffene Homepage: externer Link
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Naja also eigentlich sollte der Browser den kompletten Code der Seite vor den Bildern erhalten.

    Wenn du allerdings den normalen BBCode einsetzt, wird die versucht die Breite der Bilder herauszufinden.

    Um dies zu Unterbinden, in der includes/func/bbcode.php (ab Zeile 164)
      	  $imgstr = $imgRs[1][$i].'://'.$imgRs[2][$i].'.'.$imgRs[3][$i];
          $size   = @getimagesize($imgstr);
    			$breite = $neueBreite = $size[0];
          $hoehe  = $neueHoehe  = $size[1];
          $er     = '';
          if (isset($endung[$size[2]]) OR !is_array($size)) {
            $er = '<img style="border: none;" src="'.$imgstr.'" />';
            if ( $breite > $max_breite ) {
              $neueHoehe  = intval($hoehe*$max_breite/$breite);
              $neueBreite = $max_breite;
              $er = '<a href="'.$imgstr.'" target="_blank"><img height="'.$neueHoehe.'" width="'.$neueBreite.'" style="border: none;" src="'.$imgstr.'" /></a>';
            }
          }
    durch
      	  $imgstr = $imgRs[1][$i].'://'.$imgRs[2][$i].'.'.$imgRs[3][$i];
            $er = '<img style="border: none;" src="'.$imgstr.'" />';
    ersetzen, dann sollte es zumindest die Seite schon anzeigen, auch wenn das Nachladen der Bilder den Browser noch etwas aufhalten sollte.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    jackdaniels Mitglied
    Registriert seit
    10.10.2008
    Beiträge
    3
    Beitragswertungen
    0 Beitragspunkte
    Yau nais scheint geklappt zu haben... Das aber breite Bilder (zb Desktophintergründe 1440*900) die Seite ziemlich in die breite ziehen lässt dich dadurch nicht vermeiden oder?
    Oder hab ich einfach ne Zeile zu viel oder wenig rausgenommen?
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Nein genau das braucht dann halt lange, man es aber durch Javascript erledigen lassen, also erst beim Client auf dem PC.

    Dazu müsstest du eine Datei erstellen include/includes/js/resizeImages.js
    function addonloadEvent(elm, evType, fn, useCapture)
    // addEvent and removeEvent
    // cross-browser event handling for IE5+,  NS6 and Mozilla
    // By Scott Andrew
    {
     if (elm.addEventListener){
       elm.addEventListener(evType, fn, useCapture);
       return true;
     } else if (elm.attachEvent){
       var r = elm.attachEvent("on"+evType, fn);
       return r;
     } else {
       alert("Handler could not be removed");
     }
    }
    
    addonloadEvent(window, "load", erstAmEndeLaden);
    
    function erstAmEndeLaden () {
      ResizeBBCodeImages();
    }
    
    //Funktion die alle Bilder des BBCodes der Funktion SetSize übergibt
    function ResizeBBCodeImages() {
      imgs = document.getElementsByTagName("img");
      for (ti=0;ti<imgs.length;ti++) {
        if (imgs[ti].className.indexOf("bbcode_image") != -1) {
          SetSize(imgs[ti]);
        }
      }
    }
    
    //Funktion zum Ändern der Bildgröße für zu große Bilder
    function SetSize(img){
      var maxw = 700;
      var w = img.width;
      var h = img.height;
      var toChange = false;
      if (w>maxw) {
        h = maxw * h / w;
        w = maxw;
        toChange = true;
        }
      if (toChange) {
        var src = img.getAttribute('src');
        if ( img.parentNode.nodeName.toLowerCase() == 'a' ) {
          img.setAttribute('width',w);
          img.setAttribute('height',h);
        } else {
          var ersatz = document.createElement('a');
          ersatz.setAttribute('href',src);
          ersatz.setAttribute('target','_blank');
          var newImg = document.createElement('img');
          newImg.setAttribute('src',src);
          newImg.setAttribute('width',w);
          newImg.setAttribute('height',h);
          newImg.setAttribute('border','0');
          ersatz.appendChild(newImg);
          img.parentNode.replaceChild(ersatz,img);
        }
      }
    }
    und dabei die Breite für dein Design anpassen, also in dieser Zeile die maximal Breite für Bilder angeben. var maxw = 700;

    Weiter muss diese Datei dann in dein Design eingebunden werden, dazu die index.htm deines Designs editieren, und über </head> folgende Zeile einfügen.
    	<script type="text/javascript" src="include/includes/js/allg.js"></script>


    Zu guter letzt ist dann halt noch die Funktion, die schon geändert wurde nochmals zu ändern, hier mal die komplette Funktion. (in der includes/func/bbcode.php)

    function bbcode_images ($s) {
      preg_match_all('/\[img\](http|https):\/\/([^\ \?&=\#\"\n\r\t<>]+)\.(gif|jpeg|jpg|png)\[\/img\]/Ui',$s,$imgRs);
      
      if ( isset ($imgRs[0][0]) ) {
        for($i=0;$i<count($imgRs[0]);$i++) {
      	  $imgstr = $imgRs[1][$i].'://'.$imgRs[2][$i].'.'.$imgRs[3][$i];
          $er = '<img class="bbcode_images" style="border: none;" src="'.$imgstr.'" />';
          $s = str_replace($imgRs[0][$i],$er,$s);
        }
      }
      return($s);
    }
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    jackdaniels Mitglied
    Registriert seit
    10.10.2008
    Beiträge
    3
    Beitragswertungen
    0 Beitragspunkte
    hm danke nochmal... aber es kommt jetzt
    Fatal error: Cannot redeclare bbcode_images() (previously declared in /var/www/vhosts/unconnected-clan.de/httpdocs/include/includes/func/bbcode.php:152) in /var/www/vhosts/unconnected-clan.de/httpdocs/include/includes/func/bbcode.php on line 165
    Ich habe deswegen
    //function bbcode_images ($s) auskommentiert, und in den header der seite muss natürlich resizeImages.js und nicht allg.js...
    Ich hoffe das ich damit jetzt kein risiko eingehe ^^
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Du sollst die Funktion ersetzen und nicht ans Ende einfügen. wie gesagt, das ist die ganze Funktion von dem, was du weiter oben was geändert hattest, du musst halt wie schon gesagt, die komplette Funktion (funtion NAME (...) { .... }) ersetzen.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Fehlersuche und Probleme

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten