+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Wrapper iFrame height="auto"

  1. #1
    War schon öfter hier
    Registriert seit
    08.05.2007
    Beiträge
    161
    Bedankte sich
    15
    Erhielt 4 Danksagungen
    in 4 Beiträgen

    Standard Wrapper iFrame height="auto"

    Hallo Leute ich bin auf der Suche nach einer Lösung, die die Höhe der Wrapper-Seite automatisch anpasst.

    Wenn ich eine Seite mit dem Wrapper einsetzte und die Höhe entsprechend setze, funktioniert auf den ersten Blick alles tadellos. Aber bereits ein Klick im "iFrame" auf einen Link, der ein viel längere Seite aufruft, genügt und das Problem wird schnell sichtbar.

    Die Höhe der Wrapper-Seite bleibt bestehen und es taucht der unerwünschte Scrollbalken auf. Oder wenn der Scrollbalken deaktiviert wurde wird die Seite schlicht abgeschnitten.

    Nun habe ich mich an folgenden Lösungsvorschlag versucht, den ich im Netz gefunden hatte.

    Ok I see that tihis link don't working, so the solution I found is as following:
    You should change file in components/com_wrapper/wrapper.html.php

    Find the following code and comment it:
    <!--<script language="javascript" type="text/javascript">
    function iFrameHeight() {
    var h = 0;

    if ( !document.all ) {
    h = document.getElementById('blockrandom').contentDocu ment.height;
    document.getElementById('blockrandom').style.heigh t = h + 60 + 'px';
    } else if( document.all ) {
    h = document.frames('blockrandom').document.body.scrol lHeight;
    document.all.blockrandom.style.height = h + 20 + 'px';
    }
    }
    </script>-->
    This is the orignall function that wrapper uses.

    In the same file find the iFrame statement and replace it as follows:
    <iframe
    id="blockrandom" name="blockrandom"
    src="<?php echo $row->url; ?>"
    width="<?php echo $params->get( 'width' ); ?>"
    onload="setTimeout('DYNIFS.resize(\'blockrandom\') ;', 150)"
    scrolling="<?php echo $params->get( 'scrolling' ); ?>"
    align="top"
    frameborder="0"
    class="wrapper<?php echo $params->get( 'pageclass_sfx' ); ?>">
    Sorry, you can not view this content as your browser doesn't seem to support iFrames!
    </iframe>

    Next create file autoheight.js in template scripts folder and paste the following code:
    //
    // iFrame Auto Resize
    //
    var DYNIFS = {
    // Storage for known IFrames.
    iframes: {},
    // Here we save any previously installed onresize handler.
    oldresize: null,
    // Flag that tell us if we have already installed our onresize handler.
    ready: false,
    // The document dimensions last time onresize was executed.
    dim: [-1,-1],
    // Timer ID used to defer the actual resize action.
    timerID: 0,
    // Obtain the dimensions (width,height) of the given document.
    getDim: function(d) {
    var w=200, h=200, scr_h, off_h;
    if( d.height ) { return [d.width,d.height]; }
    with( d.body ) {
    if( scrollHeight ) { h=scr_h=scrollHeight; w=scrollWidth; }
    if( offsetHeight ) { h=off_h=offsetHeight; w=offsetWidth; }
    if( scr_h && off_h ) h=Math.max(scr_h, off_h);
    }
    return [w,h];
    },
    // This is our window.onresize handler.
    onresize: function() {
    // Invoke any previously installed onresize handler.
    if( typeof this.oldresize == 'function' ) { this.oldresize(); }
    // Check if the document dimensions really changed.
    var dim = this.getDim(document);
    if( this.dim[0] == dim[0] && this.dim[1] == dim[1] ) return;
    // Defer the resize action to prevent endless loop in quirksmode.
    if( this.timerID ) return;
    this.timerID = setTimeout('DYNIFS.deferred_resize();', 10);
    },
    // This is where the actual IFrame resize is invoked.
    deferred_resize: function() {
    // Walk the list of known IFrames to see if they need to be resized.
    for( var id in this.iframes ) this.resize(id);
    // Store resulting document dimensions.
    this.dim = this.getDim(document);
    // Clear the timer flag.
    this.timerID = 0;
    },
    // This is invoked when the IFrame is loaded or when the main window is resized.
    resize: function(id) {
    // Browser compatibility check.
    if( !window.frames || !window.frames[id] || !document.getElementById || !document.body )
    return;
    // Get references to the IFrame window and layer.
    var iframe = window.frames[id];
    var div = document.getElementById(id);
    if( !div ) return;
    // Save the IFrame id for later use in our onresize handler.
    if( !this.iframes[id] ) {
    this.iframes[id] = true;
    }
    // Should we inject our onresize event handler?
    if( !this.ready ) {
    this.ready = true;
    this.oldresize = window.onresize;
    window.onresize = new Function('DYNIFS.onresize();');
    }
    // This appears to be necessary in MSIE to compute the height
    // when the IFrame'd document is in quirksmode.
    // OTOH, it doesn't seem to break anything in standards mode, so...
    if( document.all ) div.style.height = '0px';

    // Resize the IFrame container.
    var dim = this.getDim(iframe.document);
    div.style.height = (dim[1]+200) + 'px';
    }
    };

    The last part is to call to this script in your head.php file as follows:
    <script language="javascript" type="text/javascript" src="<?php echo $template_path;?>/scripts/autoheight.js"></script>

    This work for me fine. There is only small disadvendtege of this solution, there is some delay when wrapped page loads.
    Ich scheitere jedoch an dem ersten Schritt, die beschriebenen Änderungen dürften meiner Ansicht nach in der default.php im Unterverzeichnis "view/wrapper/tmpl/" der "com_wrapper" Komponente zu machen sein.

    Die Datei müsste dann wie folgt aussehen:

    Code:
    <?php // no direct access
    defined('_JEXEC') or die('Restricted access'); ?>
    
    /*
    
    <script language="javascript" type="text/javascript">
    function iFrameHeight() {
    	var h = 0;
    	if ( !document.all ) {
    		h = document.getElementById('blockrandom').contentDocument.height;
    		document.getElementById('blockrandom').style.height = h + 60 + 'px';
    	} else if( document.all ) {
    		h = document.frames('blockrandom').document.body.scrollHeight;
    		document.all.blockrandom.style.height = h + 20 + 'px';
    	}
    }
    </script>
    
    */
    
    <div class="contentpane<?php echo $this->escape($this->params->get('pageclass_sfx')); ?>">
    <?php if ( $this->params->get( 'show_page_title', 1 ) ) : ?>
    	<div class="componentheading<?php echo $this->escape($this->params->get('pageclass_sfx')); ?>">
    	<?php echo $this->escape($this->params->get( 'page_title' )); ?>
    	</div>
    <?php endif; ?><iframe
    id="blockrandom" name="blockrandom"
    src="<?php echo $row->url; ?>"
    width="<?php echo $params->get( 'width' ); ?>"
    onload="setTimeout('DYNIFS.resize(\'blockrandom\');', 150)"
    scrolling="<?php echo $params->get( 'scrolling' ); ?>"
    align="top"
    frameborder="0"
    class="wrapper<?php echo $params->get( 'pageclass_sfx' ); ?>">
    Sorry, you can not view this content as your browser doesn't seem to support iFrames!
    </iframe>
    </div>
    Also irgendetwas mache ich wohl falsch, aber was?

    Vielleicht finde ich hier Jemanden der mir helfen kann. Ich könnte mir vorstellen, dass dieses Problem viele Joomlaner nervt.

    Danke.

  2. #2
    Neu an Board
    Registriert seit
    25.10.2005
    Beiträge
    66
    Bedankte sich
    10
    Erhielt 3 Danksagungen
    in 3 Beiträgen

    Standard

    Hallo Ahler,

    wie bist Du denn herangegangen, hast Du schon Änderungen vorgenommen, was hast Du beobachtet?

    Ich würde externen Inhalt auch gerne mit dynamischer Höhenanpassung der Seite laden. Leider hat die von Dir gefundene Lösung einige Fehler. Durch das Entfernen einiger Prameter in der PHP-Datei kommt es zu Fehlermeldungen. Der URL ist auch nicht der vom Wrapper-Inhalt sondern bezieht sich auf die gerade aktuelle Seite. Hm, ich hab noch nicht genauer geschaut, aber das kann so mir J 1.5.x noch nie funktioniert haben...
    Herzliche Grüße, LemOn

  3. #3
    War schon öfter hier
    Registriert seit
    08.05.2007
    Beiträge
    161
    Bedankte sich
    15
    Erhielt 4 Danksagungen
    in 4 Beiträgen

    Standard

    Ja, bei mir läuft es ja auch nicht.

    Ich bin immer noch auf der Suche nach einer entsprechenden Lösung.

    Vielleicht kann das CORE-Team einmal einen Blick darauf werfen.

    Warte weiter auf Lösungsvorschläge, DANKE.

  4. #4
    Gehört zum Inventar Avatar von ronny7362
    Registriert seit
    04.10.2008
    Ort
    London
    Alter
    50
    Beiträge
    6.741
    Bedankte sich
    184
    Erhielt 2.077 Danksagungen
    in 1.913 Beiträgen

    Standard

    Hi
    ich hab gerade auf einer seite das Jwrapperbot eingesetzt, damit hast du eine
    dynamische hoehe wenn du es auf auto height stellst

    gruss ronny

  5. #5
    Neu an Board
    Registriert seit
    25.10.2005
    Beiträge
    66
    Bedankte sich
    10
    Erhielt 3 Danksagungen
    in 3 Beiträgen

    Standard

    Nun, eigentlich ist es ja nicht gewollt, die Höhe dynamisch bei externem Inhalt anzupassen, angeblich aus Performance-Gründen.

    Die obige Lösung von Ahler hat mit JavaScript Zugriffsprobleme auf die Elemente, funktioniert so nur mit älteren Joomla-Versionen.

    Was der Jwrapper kann, habe ich eben getestet: Eine dynamische Anpassung der Höhe ist bei diesem Plugin auch nur innerhalb der eigenen Domain möglich. Sobald Inhalte von anderen Seiten eingebunden werden, ist die Höhe nur statisch vorzugeben.

    Also ist dieses Problem immer noch nicht gelöst. Ich sehe nicht ein, warum das nicht gehen soll.
    Herzliche Grüße, LemOn

  6. #6
    War schon öfter hier
    Registriert seit
    08.05.2007
    Beiträge
    161
    Bedankte sich
    15
    Erhielt 4 Danksagungen
    in 4 Beiträgen

    Standard

    Ich sehe das wie LemOn, einen iFrame der auf der gleichen Domain beruht, dürfte wohl die Ausnahme sein.

    Interessant wird es, wenn die Höhe automatisch für externe Seiten eingestellt wird.

    Zudem der Auswahlbutton "auto" ja vorhanden ist, aber leider keine Funktion hat.

    Schade, aber Danke für den Hinweis auf JWrapperBot.

  7. #7
    Neu an Board
    Registriert seit
    25.10.2005
    Beiträge
    66
    Bedankte sich
    10
    Erhielt 3 Danksagungen
    in 3 Beiträgen

    Standard

    Hallo,

    ich werde heute eine Möglichkeit prüfen, externe Inhalte über das Joomla PHP-Modul (http://www.fijiwebdesign.com/portfol...e-mod_php.html) einzubinden. Da ich in meinem aktuellen Projekt den externen Inhalt über Attribute im URL steuern kann (mit/ohne HTML, Head, Body etc.) wäre das Einbinden als "Modul" in dem Fall kein Problem. Mal schauen :-) ...
    Herzliche Grüße, LemOn

  8. #8
    Gehört zum Inventar Avatar von ronny7362
    Registriert seit
    04.10.2008
    Ort
    London
    Alter
    50
    Beiträge
    6.741
    Bedankte sich
    184
    Erhielt 2.077 Danksagungen
    in 1.913 Beiträgen

    Standard

    Zitat Zitat von Ahler Beitrag anzeigen
    Ich sehe das wie LemOn, einen iFrame der auf der gleichen Domain beruht, dürfte wohl die Ausnahme sein.

    Interessant wird es, wenn die Höhe automatisch für externe Seiten eingestellt wird.

    Zudem der Auswahlbutton "auto" ja vorhanden ist, aber leider keine Funktion hat.

    Schade, aber Danke für den Hinweis auf JWrapperBot.
    natuerlich hat der auto button eine funktion, ich habe es auf einer seite mit einer subdomain eingebunden

    gruss ronny

  9. #9
    Neu an Board
    Registriert seit
    25.10.2005
    Beiträge
    66
    Bedankte sich
    10
    Erhielt 3 Danksagungen
    in 3 Beiträgen

    Standard

    Ja, der Button hat eine Funktion, aber nur innerhalb der aktuellen Domain. Subdomains "liegen" innerhalb der aktuellen Domain.

    Wenn man die Maus über das Label zum jeweiligen Input-Element bewegt, erscheint ein Tooltip, der die Funktion des Elementes beschreibt. Das ist übrigens bei Joomla-Erweiterungen Usus. Dort steht eindeutig drin, was ich schon oben beschrieb.
    Herzliche Grüße, LemOn

  10. #10
    Gehört zum Inventar Avatar von ronny7362
    Registriert seit
    04.10.2008
    Ort
    London
    Alter
    50
    Beiträge
    6.741
    Bedankte sich
    184
    Erhielt 2.077 Danksagungen
    in 1.913 Beiträgen

    Standard

    @LemOn

    ok hab einfach nicht richtig gelesen, aber trotzdem danke fuer deine belehrungen
    wusste ich noch garnicht, das subdomains innerhalb der domain liegen

    vielleicht weil sub "unter" bedeutet ?

+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

Lesezeichen

Berechtigungen

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