Ergebnis 1 bis 11 von 11

Thema: [gelöst] Layoutbereiche dynamisch einblenden oder ausblenden

  1. #1
    Contao-Nutzer Avatar von teo
    Registriert seit
    26.04.2010.
    Ort
    Gera
    Beiträge
    85

    HTML [gelöst] Layoutbereiche dynamisch einblenden oder ausblenden

    Ich bin auf der Suche nach einer Möglichkeit Inhalstbereiche dynamisch ein- oder ausblenden zu können.

    Habe eine Seite, die ich mit recht vielen Zusatzfunktionen für den Besucher bestückt habe. Diese Zusatzfunktionen befinden sich alle in der rechten Spalte.

    Nun möchte ich eine Möglichkeit schaffen, diese rechte Spalte per Klick auf einen Link oder Button ein- oder auszublenden, für die, welche die Funktionsleiste stört oder nicht brauchen.

    Es gäbe da jetzt verschiedene Ansätze.

    1. Entweder das Standard-Seitenlayout überschreiben, mit einer Version, in der die rechte Spalte einfach nicht vorhanden ist.

    2. Das Einbinden oder Ausklammern eines zusätzlichen Stylesheets in dem ich einfach
    Code:
    #right .inside { display: none; }
    verwende

    3. oder das ganze dynamisch mit JavaScript + Cookie (mootools?)

    4. Den Kompletten Seitenbaum kopieren und ein anderes Layout verwenden (kommt nicht in Frage )

    Vielleicht gibt es ja schon eine Lösung dafür. Ansonsten müsste ich mal versuchen, meine erste Contao-Extension zu schreiben.
    Geändert von teo (25.06.2010 um 21:29 Uhr) Grund: Tippfehler

  2. #2
    Contao-Nutzer Avatar von teo
    Registriert seit
    26.04.2010.
    Ort
    Gera
    Beiträge
    85

    Daumen hoch [gelöst] mit MooTools FX.slide

    Habe das ganze jetzt mit mootools FX.slide gelöst.

    Folgendes Script habe ich in das Seitenlayout integriert (ist die abgespeckte Version aus dem Original mootools FX.Slide Demo). Somit wird der Inhalsbereich bei jedem Seitenaufruf wieder versteckt, weil der Status nicht gesichert wird. Habe das Script mit dem mootools HASH.cookie erweitert um den Status zu sichern und bei der Initialisierung des FX.slide abgefragt in welchem Status sich der toggle befindet (2. Codebeispiel) Die Lebensdauer des cookies gibt man mit duration in Sekunden an.

    1. Codebeispiel ohne Merker
    Code:
    <script type="text/javascript">
    /* <![CDATA[ */
    window.addEvent('domready', function() {
    
    	var status = {
    		'true': 'schließen',
    		'false': 'öffnen'
    	};
    
    	//--horizontal
    	var myHorizontalSlide = new Fx.Slide('horizontal_slide', {mode: 'horizontal'}).hide();
    
    	$('h_toggle').addEvent('click', function(e){
    		e.stop();
    		myHorizontalSlide.toggle();
    	});
    	
    	// When Horizontal Slide ends its transition, we check for its status
    	// note that complete will not affect 'hide' and 'show' methods
    	myHorizontalSlide.addEvent('complete', function() {
    		$('horizontal_status').set('html', status[myHorizontalSlide.open]);
    	});
    });
    /* ]]> */
    </script>
    2. Codebeispiel mit Merker (cookie)
    Code:
    window.addEvent('domready', function() {
    
    	var pagecookie = new Hash.Cookie('pagecookie', {duration: 3600});
    
    	var status = {
    		'true': 'schließen',
    		'false': 'öffnen'
    	};
    
    	//--horizontal
    	if ( true == pagecookie.get('toolbar') )
    	{
    		var myHorizontalSlide = new Fx.Slide('horizontal_slide', {mode: 'horizontal'}).hide();
    	}
    	else
    	{
    		var myHorizontalSlide = new Fx.Slide('horizontal_slide', {mode: 'horizontal'});
    	}
    
    	// show current status in toggle link
    	$('horizontal_status').set('html', status[myHorizontalSlide.open]);
    
    	// switch
    	$('h_toggle').addEvent('click', function(e){
    		e.stop();
    		myHorizontalSlide.toggle();
    		pagecookie.set('toolbar', myHorizontalSlide.open );
    	});
    
    	// When Horizontal Slide ends its transition, we check for its status
    	// note that complete will not affect 'hide' and 'show' methods
    	myHorizontalSlide.addEvent('complete', function() {
    		$('horizontal_status').set('html', status[myHorizontalSlide.open]);
    	});
    });
    Dann habe ich noch das Template 'fe_page' an der Stelle modifiziert, wo die rechte Spalte angezeigt wird, sofern vorhanden.

    Code:
    <?php if ($this->right): ?>
    <div id="right">
    
    <a id="h_toggle" href="#">Toolbar <span id="horizontal_status">öffnen</span></a>
    <div id="horizontal_slide"> 
    
    <div class="inside">
    <?php echo $this->right; ?> 
    </div>
    
    </div>
    
    </div>
    <?php endif; ?>
    Geändert von teo (25.06.2010 um 21:30 Uhr) Grund: Ergänzung mit Merker zur Statussicherung

  3. #3
    Contao-Nutzer
    Registriert seit
    11.10.2010.
    Beiträge
    9

    Standard ähnliches Problem

    Hallo teo,
    ich habe einen ähnlichen Fall wie du. Habe auf meiner Seite verschiedene Bereiche, welche man dynamisch ein- und ausblenden kann. Habe das Ganze mit einem ähnlichen Script gelöst wie du. Der Unterschied liegt darin, dass man verschiedene ID's für verschiedene Elemente vergeben kann. Hier das Script:

    Code:
    /*
        Smartslider 1.0
        
        Usage:
            Add css class 'slider' for toggle element
            Target element ID in the 'href' attribute with "#"
            
        Options:
            Add css class 'slideShow' that the Element is opened onload
                    
        Example:
            <a href="#lorem" class='slider'>Lorem Ipsum</a>
            <p id="lorem">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>
    */
    window.addEvent('domready', function(){
        var mySlides = [];
         $$(".slider").each(function(slider,i){
    
            // get element to slide
            link = slider.getProperty('href');
            link = link.replace('#','');
             mySlides[i] = new Fx.Slide(link);
            
            // set state
            state = slider.getProperty('class');
            if    (state.search(/slideShow/) == '-1')
                {mySlides[i].hide();}
    
            // inject onClick event
             slider.addEvent('click', function(e){
                new Event(e).stop();
                mySlides[i].toggle();
                return false;
            });
         });
     });
    Anschließend habe ich das Script soweit erweitert, dass eine Klasse 'activo' hinzugefügt wird, falls der Inhalt eingeblendet ist (um den entsprechenden Punkt per CSS stylen zu können). Weiß nicht, ob das so richtig ist, aber es funktioniert:

    Code:
    window.addEvent('domready', function(){                             
        
    
        var mySlides = [];
         $$(".slider").each(function(slider,i){
    
            // get element to slide
            link = slider.getProperty('href');
            link = link.replace('#','');
             mySlides[i] = new Fx.Slide(link, {duration: 500});
            
            // set state
            state = slider.getProperty('class');
    
            if    (state.search(/slideShow/) == '-1')
                {mySlides[i].hide();}
    
            else //wenn beim Laden der Seite Slider schon ausgeklappt: gib ihm Klasse "activo"
                {slider.className = 'slider slideShow activo';}
    
            // inject onClick event
             slider.addEvent('click', function(e){
    
            //Abfrage, ob es Klasse "activo" gibt. Falls nicht: bilde sie                                  
            if    (slider.getProperty('class').search(/activo/) == '-1')
                {slider.className = 'slider slideShow activo';}
    
            else //Klasse wieder wegnehmen
                {slider.className = 'slider slideShow';}
                new Event(e).stop();
                mySlides[i].toggle();
                return false;
    
            });        
            
         });
     });
    Jetzt hätte ich es auch gerne, dass der Status gespeichert wird und beim Neuladen der Seite wieder aufgerufen wird. Allerdings weiß ich nicht wirklich, wie ich das Cookie bei meinem Code einbinden muss, damit das funktioniert. Kannst du mir da evtl. weiterhelfen? Wär super!
    Liebe Grüße

  4. #4
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    Etwas OffTopic : Aber koenntet Ihr solche Snippets auch kurz in den "Fertige Tutorials" und im Wiki publizieren ? Das ist naemlic wirklich klasse was ihr dort macht.

    http://www.contao-community.de/forum...tige-Tutorials
    http://de.contaowiki.org/Kategorieev_Snippets
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  5. #5
    Contao-Fan Avatar von comanche
    Registriert seit
    12.11.2009.
    Beiträge
    496

    Daumen hoch

    Danke für das hilfreiche Script. Klasse!

    Grüße,
    Andreas

  6. #6
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Habt ihr da maln Link auf die Ergebnisse? Fände ich interessant das auch mal im Einsatz zu sehen.

    Gruß
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  7. #7
    Contao-Nutzer
    Registriert seit
    11.10.2010.
    Beiträge
    9

    Standard

    Ich hab noch keinen Link, da die Webseite noch nicht fertig und deshalb noch nicht online ist. Und leider hab ich bisher auch noch keine Lösung für das Cookie-Problem. Also falls mir jemand weiterhelfen kann, ich freu mich ;-)

  8. #8
    Contao-Nutzer
    Registriert seit
    11.10.2010.
    Beiträge
    9

    Standard

    Falls noch jemand Interesse daran haben sollte, hab es jetzt folgendermaßen gelöst:

    Code:
    window.addEvent('domready', function(){							 
    	
    var pagecookie = new Hash.Cookie('pagecookie', {duration: 0}); 
    
    	var mySlides = [];
     	$$(".slider").each(function(slider,i){
    
    		// get element to slide
    		link = slider.getProperty('href');
    		link = link.replace('#','');
    
    		//Slider standardmäßig geschlossen
    		mySlides[i] = new Fx.Slide(link, {duration: 500}).hide();
    
    		//Slider offen, wenn Cookie vorhanden oder es sich um den 1. Slider handelt
    		if(pagecookie.get(i) == true || i == 0)
    		{
    			mySlides[i].show();
    			slider.className = 'slider activo';
    		}
    
    		// inject onClick event
     		slider.addEvent('click', function(e){
    
    		//Abfrage, ob es Klasse "activo" gibt. Falls nicht: bilde sie								  
    		if	(slider.getProperty('class').search(/activo/) == '-1')
    			{
    				slider.className = 'slider activo';
    			 	pagecookie.set(i, true);
    			 }
    
    		else //Klasse wieder wegnehmen
    			{
    	  			 slider.className = 'slider';
    				 pagecookie.set(i, false);
    			 }
    			
    			new Event(e).stop();
    			mySlides[i].toggle();
    			return false;
    
    		});		
     	});
     });

  9. #9
    Contao-Nutzer Avatar von teo
    Registriert seit
    26.04.2010.
    Ort
    Gera
    Beiträge
    85

    Standard

    Zitat Zitat von Andreas Beitrag anzeigen
    Habt ihr da maln Link auf die Ergebnisse? Fände ich interessant das auch mal im Einsatz zu sehen.

    Gruß
    Hallo. ich brauchte das für eine Backendlösung, aber wie wäre es denn, wenn man für soetwas einen Bereich einrichtet, wo man die Beispiele funktional sammeln kann? Für meinen eigenen Bastelkram habe ich soetwas schon angelegt. Müsste es nur mal aufhübschen.

    Habe kürzlich eine ähnliche Sache bauen müssen, allerdings mit FX.Move statt FX.Slide, weil FX.Slide nur LtR und nicht RtL unterstützt. Ganz zufrieden bin ich mit der Lösung noch nicht, da in einigen Situationen ein leichtes Hakeln/Zucken zu bemerken ist. Hier das Beispiel (linke Seitenleiste unter der Navigation) - Der FX.Move-Code steht direkt im HTML-Source fast ganz unten. Bei der Lösung musste ich ein wenig mit CSS z-index 'herumexperimentieren' damit sich das mit #main und #left bzw. der Navi nicht beisst (überlappende Navi wegen border)

    http://www.loszockos.net
    Geändert von teo (23.11.2010 um 10:34 Uhr)
    0111001101101111011100100111001001111001

  10. #10
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Danke fürs Zeigen.

    offtopic: Da schlägt der "background-position: fixed;"-Bug vom Firefox ja wieder voll zu. Ein echtes Manko von Firefox, dass die das immer noch nicht hingekommen haben. Vergleiche mal das vertikale Scrollen vom FF und von Opera. Wenn du das "fixed" rausnimmt ist es besser, würde sich bei diesem Hintergrund vielleicht auch anbieten. Gibt es eigentlich einen einfachen CSS-Hack um fixed nur für FF rauszunehmen?

    Gruß
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  11. #11
    Contao-Nutzer Avatar von teo
    Registriert seit
    26.04.2010.
    Ort
    Gera
    Beiträge
    85

    Standard

    Hmmm... also ich habe hier auf Mac OS X keinen Unterschied beim vertikalen Scrollen. Einziges was mir auffällt ist, dass der Google Chrome eine recht unsaubere JPG-Decodierung macht und damit sicherlich einiges für seine gute Performace rausholt.

    Wäre in dem Fall schön, wenn man alle CSS-Attribute mit
    Code:
    -moz-'bezeichner': 'wert';
    für den FF übersteuern könnte. Aber ich halte eigentlich nicht viel von solchen Hacks. Viele davon sind einfach nicht konform.
    0111001101101111011100100111001001111001

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. [Gelöst] Einfaches Tabellendesign - oder doch nicht?
    Von Tinker2 im Forum Layout / Templates / Holy Grail
    Antworten: 5
    Letzter Beitrag: 23.10.2010, 16:45
  2. Hintergrundbild einblenden/ausblenden (statt Flash)
    Von mr.jones im Forum Layout / Templates / Holy Grail
    Antworten: 6
    Letzter Beitrag: 16.06.2010, 07:27
  3. GELÖST: Leere Layoutbereiche in der HTML-Ausgabe
    Von okapi im Forum Layout / Templates / Holy Grail
    Antworten: 4
    Letzter Beitrag: 15.01.2010, 15:29
  4. [Gelöst] Untermenü im Hauptmenü ausblenden
    Von shoi im Forum Layout / Templates / Holy Grail
    Antworten: 5
    Letzter Beitrag: 14.09.2009, 19:04

Lesezeichen

Lesezeichen

Berechtigungen

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