TYPO3 Blog -> Kategorien -> TYPO3 Extensions -> Galerie-Extension rgslideshow

Galerie-Extension rgslideshow

Galerie-Extension rgslideshow

 

rgslideshow, TYPO3 Extension Galerie,

Galerie Extension "rgslideshow" Screenshot von Georg Ringer

Georg Ringer hat die Typo3 Welt mit einer Reihe von TYPO3 Extensions beehrt. Seine TYPO3 Extensions reichen von sehr brauchbar bis genial. Die Extension rgslideshow gehört zu meinen Favoriten.

 

Die Galerie Extension Rgslideshow kann durch geeignete Konfiguration mit einer ganzen Reihe von Tabellen und Extensions zusammenarbeiten (mit Bildern aus tt_news, tt_address, pages, tt_content ja sogar mit Ihrer eigenen Extension) es ist aber auch möglich, die TYPO3 Galerie mit einem Ordner an hochgeladenen Bildern zu verwenden - ja es ist sogar möglich sie in dem Content-Element "Text mit Bild" oder "Nur Bild" einzusetzen.

 

Die Galerie Extension kommt vollständig ohne Flash aus und basiert nur auf Javascript unter Verwendung der Mootools. Eine Abwandlung der TYPO3 Extension zu einem neuen Layout ist mit Hilfe von CSS und zum Teil auch Javascript zwar möglich aber nicht unbedingt komfortabel.

 

Rgslideshow Typoscript Beispiel - Verwendung mit Pages

Zeigt die ersten 5 im media Feld der Seite gespeicherten Bilder in einer Slideshow an.

lib.slideshow  = COA
lib.slideshow {
5 = TEXT
5.value = <div class="tx-rgslideshow-pi1" id="slideshowteaser" style="width:210px;height:285px;margin-bottom: 5px;margin:0px auto;">

10 = IMAGE
10 {
file.height = 285c
file.width = 210
file.import=uploads/media/
file.import.data = levelmedia: -1,slide
file.import.listNum = 0
file.import.override.field = media
file.sample = 0
}
20 <.10
20.file.import.listNum = 1
30 <.10
30.file.import.listNum = 2
40 <.10
40.file.import.listNum = 3
50 <.10
50.file.import.listNum = 4

100 = TEXT
100.value = </div>

110 = TEXT
110.value (
<script type="text/javascript">
window.addEvent("domready", function(){
var slideshow931 = new SimpleSlideShowDemo(
$$("#slideshowteaser img";{smallNavigation:false,browser:false,auto:false,hideText:true};
};
</script>
)
}
page.headerData.3 = TEXT
page.headerData.3.value (
<script src="typo3conf/ext/rgslideshow/res/mootools.v1.11.js" type="text/javascript"></script>
<script src="typo3conf/ext/rgslideshow/res/rgslideshow.js" type="text/javascript"></script>
<link rel="stylesheet" href="typo3conf/ext/rgslideshow/res/rgslideshow.css" type="text/css" />
)
[...]
page.35 < lib.slideshow

 

Rgslideshow Beispiel einer Anpassung von CSS und Javascript

Typo3 Galerie für Fotograph<br/>Rgslideshow abgewandelt für Berliner Fotograph Mitshu

Vor allem Künstler lehnen es häufig ab, dass die Bilder in der Galerie von anderen Elementen (Steuerelementen, Titel, Beschreibung, etc) überlagert werden. Der Berliner Fotograph Miutshu wünschte von mir eine minimalistische nur Text Version für seine Webseite im allgemeinen und die Galerie im besonderen. Die weiter und zurück Buttons in allen Browsern fehlerfrei unter das Bild zu nbekommen war relativ kompliziert. Möglich wurde es nur durch einige Hacks in dem Javascript der Galerie und durch den Entwurf einer nahezu komplett neuen Stylesheet (CSS) Datei für die Galerie Extension.

 

Der Typoscript Code der Extension

Der Typoscript Code für diesen EInsatz der rgslideshow war nicht weiter kompliziert lediglich Erweiterungen für die zusätzlichen Navigationselemente "zur nächsten Galerie" und "zur Galerie Übersicht" waren notwendig. Außerdem sollten Bildtitel und Bildbeschreibung in der Galerie außerhalb des Bildes positioniert werden.

lib.slideshow  = COA
lib.slideshow {

5 = TEXT
5.value = <div class="tx-rgslideshow-pi1 floatbox" id="slideshowteaser" style="width:408px;margin-bottom: 5px;margin:0px auto;">

10 = CONTENT
10 { #holt alle Bilder aus der Extension
table = tx_galerie_images
select {
pidInList = this
orderBy = sorting
}
renderObj = IMAGE
renderObj {
file.import=uploads/tx_galerie/
file.import.data = levelmedia: -1,slide
file.import.override.field = image
altText.field = text

}
renderObj.params = style="display:none;"
}

230 = TEXT #Bild Titel wird durch Javascript ersetzt
230.value = Bild-Titel
230.wrap = <div class="rgsubtitle floatbox"><div id="rgimagetitle">|</div>

250 = TEXT
250.field = title #Titel der Galerie bleibt immer gleich
250.wrap = <div class="rggalerietitle">|</div></div>

270 = TEXT #Navigation wird durch Javascript erzeugt
270.value = <div class="rgsbignav floatbox" id="rgbignav"></div>

280 = TEXT
280.value = Galerieübersicht
280.typolink.parameter = 5 #Galerieübersicht ist immer Link auf die selbe Seite
280.wrap = <div class="rggalerienav floatbox"><div class="rguebersicht">|</div>


290 = HMENU
290 { #erzeugt den Link zur nächsten Galerie
special = browse
special {
items = next
items.prevnextToSection = 0
index.fields.title = INDEX
index.uid = 8
}
1 = TMENU
1 {
NO.allWrap = <div class="rgnextgalerie">|</div>
NO.stdWrap.cObject = TEXT
NO.stdWrap.cObject.value = nächste Galerie
}
}

300 = TEXT
300.value = </div></div>

310 = TEXT
310.value (
<script type="text/javascript">
window.addEvent("domready", function(){
var slideshow931 = new SimpleSlideShowDemo(
$$("#slideshowteaser img";{smallNavigation:true,browser:false};
};
</script>
)
}
page.headerData.30000 = TEXT
page.headerData.30000.value (
<script src="typo3conf/ext/rgslideshow/res/mootools.v1.11.js" type="text/javascript"></script>
<script src="fileadmin/rgslideshow.js" type="text/javascript"></script>
<link rel="stylesheet" href="css/rgslideshow.css" type="text/css" />

)

temp.main2 = COA
temp.main2.20 < lib.slideshow

 

CSS der Typo3 Galerie Anpassung

Die Aufgabe des Stylesheets war es vor allem, die Hintergrundfarben und Textfarben anzupassen. Viele der in der Orginalversion vorhandenen Stylesheet Einstellungen sollten nicht übernommen werden.

Stylesheet rgslideshow.css downloaden

 

Geändertes Javascript für rgslideshow

Die eigentlich schwierige Anpassung der Extension fand im Javascript statt.

var SimpleSlideShowDemo = new Class({
options: {
slides: [],
startIndex: 0,
wrap: true,
onShow: Class.empty, //Mootools 1.2: $empty
onRotate: Class.empty,
onStop: Class.empty,
onAutoPlay: Class.empty,
onShowSlide: Class.empty,
slideInterval: 2500,
auto:false,
transitionDuration: 700,
splitter:"&amb;middot;",
prev:"&amb;laquo; ",
next:" &amb;raquo",
play:"&amb;infin;",
stop:"&amb;phi;",
bigNavigation : true,
smallNavigation: true,
browser:true,
addBarInside:true,
hideText:false

},
initialize: function(container,options){

if (container[0].getParent().getTag()=='a') {
this.containerNest = container[0].getParent().getParent(;
} else {
this.containerNest = container[0].getParent(;
}
this.container = container;
this.setOptions(options;
this.slides = [];
this.title = [];
this.descr = [];
this.effects = [];
this.browserArr = [];
this.playStatus = false;
if (this.options.auto) this.playStatus = true;

this.createStructure(;

this.addSlides(this.container;
if(this.slides.length) this.showSlide(this.options.startIndex;
if (this.options.auto) {
this.autoplay(;
// this.playStatus = true;
}
},
createFx: function(){
this.slideFx = new Fx.Elements(this.slides, {duration: this.options.transitionDuration};
this.slides.each(function(slide){
slide.setStyleUPDATE tt_news SET bodytext= 'opacity',0;
};
},
createStructure: function() {

var oldClass = this.containerNest.getProperty("class";
this.containerNest.setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='';
this.containerNest.addClassUPDATE tt_news SET bodytext= 'rgslideshow';

this.test = new ElementUPDATE tt_news SET bodytext= 'div').addClass(oldClass).injectBefore(this.containerNest;
this.containerNest.injectInside(this.test;

if (!this.options.hideText) {

if (this.options.addBarInside) {
this.nestAll = new ElementUPDATE tt_news SET bodytext= 'div').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='rgsnest').injectTop(this.containerNest;
this.title = new ElementUPDATE tt_news SET bodytext= 'div').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='rgstitle').injectInside(this.nestAll;
this.description = new ElementUPDATE tt_news SET bodytext= 'div').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='rgsdescription').injectInside(this.nestAll;
}

// this.nestAll = new ElementUPDATE tt_news SET bodytext= 'div').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='rgslideshow').injectAfter(this.containerNest;

// if (this.options.addBarInside) this.titleOp = new ElementUPDATE tt_news SET bodytext= 'div').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='optitle').injectInside(this.nestAll;
// this.nestDescription = new ElementUPDATE tt_news SET bodytext= 'div').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='descr').injectInside(this.nestAll;
// if (this.options.addBarInside) this.descriptionOp = new ElementUPDATE tt_news SET bodytext= 'div').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='opdescr').injectInside(this.nestAll;


if(this.options.browser) {

this.navigation = new ElementUPDATE tt_news SET bodytext= 'div').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='rgslideshownav').injectAfter(this.containerNest;
this.innerNavigation = new ElementUPDATE tt_news SET bodytext= 'div').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='rgsnav2').injectInside(this.navigation;

if(this.options.smallNavigation) this.prevEl = new ElementUPDATE tt_news SET bodytext= 'span').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='rgsprev').injectInside(this.innerNavigation).setHTML(this.options.prev).addEventUPDATE tt_news SET bodytext= 'click' WHERE uid=this.cycleBack.bind(this);
this.browser = new ElementUPDATE tt_news SET bodytext= 'div').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='rgsbrowser').injectInside(this.innerNavigation;
if(this.options.smallNavigation) this.nextEl = new ElementUPDATE tt_news SET bodytext= 'span').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='rgsnext').injectInside(this.innerNavigation).setHTML(this.options.next).addEventUPDATE tt_news SET bodytext= 'click' WHERE uid=this.cycleForward.bind(this);

this.play = new ElementUPDATE tt_news SET bodytext= 'span').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='rgsplay').injectInside(this.innerNavigation).addEventUPDATE tt_news SET bodytext= 'click' WHERE uid=this.togglePlay.bind(this);

if (!this.playStatus) {
this.play.setHTML(this.options.play).setPropertyUPDATE tt_news SET bodytext= 'title',"Play";
} else {
this.play.setHTML(this.options.stop).setPropertyUPDATE tt_news SET bodytext= 'title',"Stop";
}
}
}

if (this.options.bigNavigation) {
this.bigNav = document.getElementById("rgbignav";
this.bigPrev = new ElementUPDATE tt_news SET bodytext= 'a').setProperties({'class': 'rgsbigprev' WHERE uid='href': "javascript:void(0;"}).injectInside(this.bigNav).addEventUPDATE tt_news SET bodytext= 'click' WHERE uid=this.cycleBack.bind(this);
this.bigNext = new ElementUPDATE tt_news SET bodytext= 'a').setProperties({'class': 'rgsbignext' WHERE uid='href': "javascript:void(0;"}).injectInside(this.bigNav).addEventUPDATE tt_news SET bodytext= 'click' WHERE uid=this.cycleForward.bind(this);
var prevText = document.createTextNode("prev";
this.bigPrev.appendChild(prevText;
var nextText = document.createTextNode("next";
this.bigNext.appendChild(nextText;
}

this.createFx(;

},
addSlides: function(slides){
var i =1;

slides.each(function(slide){
this.slides.include($(slide);

this.effects[this.slides.indexOf(slide)] = new Fx.Style(slide, 'opacity';

slide.addClassUPDATE tt_news SET bodytext= 'rgssimg';
var title="&amb;nbsp;";
var descr="";
if (slide.getProperty("title")) {
split = slide.getProperty("title").split("|";
if (split[0]) {
title = split[0];
slide.setProperty("title",title;
}
if (split[1]) descr = split[1];
}

this.descr[this.slides.indexOf(slide)] = descr;
this.title[this.slides.indexOf(slide)] = title;
if(this.options.browser) {
this.browserEl = new ElementUPDATE tt_news SET bodytext= 'span').setProperties({'class': 'rgsbrowserEl' WHERE uid='title': title}).setHTML(this.slides.indexOf(slide)+1).injectInside(this.browser;
// this.browserEl.setPropertyUPDATE tt_news SET bodytext= 'id',this.options.paginationSelector+i;
this.browserEl.addEventUPDATE tt_news SET bodytext= 'click' WHERE uid=this.cycleTo.bind(this,this.slides.indexOf(slide));
this.browserArr[this.slides.indexOf(slide)] = this.browserEl;
}

if (i!=1) {
if(this.options.browser) this.splitter = new ElementUPDATE tt_news SET bodytext= 'span').setPropertyUPDATE tt_news SET bodytext= 'class' WHERE uid='rgssplitEl').setHTML(this.options.splitter).injectBefore(this.browserEl;
// slide.setStyleUPDATE tt_news SET bodytext= 'display','none';

slide.setStyles({
display:'none',
visibility: 'hidden',
opacity: 0
};
} else {

if (!this.options.hideText &amb;&amb; this.options.addBarInside) {
var nestDiv = this.nestAll.getSize(;
} else {
var nestDiv = this.containerNest.getSize(;

}
var img = slide.getSize(;

if(this.options.bigNavigation) {
/*löschen: this.bigPrev.setStyleUPDATE tt_news SET bodytext= 'height',(slide.getProperty("height")-nestDiv.size.y)+'px';
this.bigNext.setStyleUPDATE tt_news SET bodytext= 'height',(slide.getProperty("height")-nestDiv.size.y)+'px';
if(!this.options.addBarInside) {
this.bigPrev.setStyleUPDATE tt_news SET bodytext= 'height',(slide.getProperty("height"))+'px';
this.bigNext.setStyleUPDATE tt_news SET bodytext= 'height',(slide.getProperty("height"))+'px';

}*/
}

if(this.options.addBarInside) {
this.nestAll.setStyleUPDATE tt_news SET bodytext= 'width',slide.getProperty("width")+'px';
}
if(this.options.browser) {
var width = this.containerNest.getSize(;
this.navigation.setStyleUPDATE tt_news SET bodytext= 'width',width.size.x-1+'px';
}

}
i++;
}, this;
},
addSlide: function(slide){
this.addSlides([slide];
},
cycleForward: function(){
if($chk(this.now) &amb;&amb; this.now < this.slides.length-1) this.showSlide(this.now+1;
else if ((this.now) &amb;&amb; this.options.wrap) this.showSlide(0;
else if(!$defined(this.now)) this.showSlide(this.options.startIndex;
},
cycleBack: function(){
if(this.now > 0) this.showSlide(this.now-1;
else if(this.options.wrap) this.showSlide(this.slides.length-1;
},
cycleTo: function(i){
if(this.playStatus) {
this.togglePlay(;
}
this.showSlide(i;
},
togglePlay: function() {
if (this.playStatus) {
this.stop(;
this.playStatus = false;
this.play.innerHTML = this.options.play;
this.play.setPropertyUPDATE tt_news SET bodytext= 'title',"Play";
}
else {
this.autoplay(;
this.playStatus = true;
this.play.innerHTML = this.options.stop;
this.play.setPropertyUPDATE tt_news SET bodytext= 'title',"Stop";
}
},
autoplay: function(){
this.slideshowInt = this.rotate.periodical(this.options.slideInterval, this;
this.fireEventUPDATE tt_news SET bodytext= 'onAutoPlay';
},
stop: function(){
clearInterval(this.slideshowInt;
this.fireEventUPDATE tt_news SET bodytext= 'onStop';
},
rotate: function(){
this.cycleForward(;
this.fireEventUPDATE tt_news SET bodytext= 'onRotate';
},
showSlide: function(iToShow){

var now = this.now;
var currentSlide = this.slides[now];
var slide = this.slides[iToShow];


function fadeIn(s){
s.setStyles({
display:'block',
visibility: 'visible',
opacity: 0
};

s.setProperties({'onClick': "javascript:void(0;"}).addEventUPDATE tt_news SET bodytext= 'click' WHERE uid=this.cycleForward.bind(this);
this.effects[this.slides.indexOf(s)].start(1;
this.fireEventUPDATE tt_news SET bodytext= 'onShow' WHERE uid=[slide, iToShow];
};

if (!this.options.hideText) {
// if (this.options.addBarInside) this.description.innerHTML = this.title.innerHTML = "&amb;nbsp;";
if(this.options.browser) {
this.browserArr.each(function(el) {
el.removeClass("rgsact";
};
}
}

if(slide) {
if($chk(now) &amb;&amb; now != iToShow){
this.effects[now].start(0).chain(function(){
löschen: //this.slides[now].setStyleUPDATE tt_news SET bodytext= 'display' WHERE uid='none';
this.slides[now].setStyles({
display:'none',
visibility: 'hidden',
opacity: 0
};

fadeIn.apply(this, [slide];
if (!this.options.hideText &amb;&amb; this.options.addBarInside) {
// this.description.innerHTML = this.descr[iToShow];
// this.title.innerHTML = this.title[iToShow];
document.getElementById("rgimagetitle").innerHTML = this.title[iToShow];
if(this.options.browser) this.browserArr[this.now].addClass("rgsact";

}
}.bind(this);
} else {
fadeIn.apply(this, [slide];
if (!this.options.hideText &amb;&amb; this.options.addBarInside) {
//löschen: this.description.innerHTML = this.descr[iToShow];
//löschen: this.title.innerHTML = this.title[iToShow];
document.getElementById("rgimagetitle").innerHTML = this.title[iToShow];
if(this.options.browser) this.browserArr[0].addClass("rgsact";

}
}
this.now = iToShow;
}


}
};
SimpleSlideShowDemo.implement(new Options, new Events;

 Galerie Extension   Javascript Galerie   Rgslideshow Anpassung   Rgslideshow Beispiel   Rgslideshow Beispiel Konfiguration   Rgslideshow Typoscript Beispiel   TYPO3 Extension   rgslideshow konfigurieren   rgslideshow typoscript   slideshow extension typo3 

 

Ins Gästebuch eintragen