Hier die kürzere Version:
Der Shop erzeugt beim Listing pro Produkt beim aktuellen responsive Template zB. folgenden Output:
<a href="https://dev.modified-shop.org/Testkategorie-1/Testartikel-1::1.html">
<img class="unveil" src="https://dev.modified-shop.org/templates/tpl_modified_responsive/css/images/loading.gif" data-src="https://dev.modified-shop.org/images/product_images/thumbnail_images/1_0.jpg" alt="Testartikel 1" />
</a>
<noscript>
<a href="https://dev.modified-shop.org/Testkategorie-1/Testartikel-1::1.html">
<img src="https://dev.modified-shop.org/images/product_images/thumbnail_images/1_0.jpg" alt="Testartikel 1" />
</a>
</noscript>
Das ist schon mal doppelt gemoppelt, denn der Link wird sowohl außerhalb und innerhalb vom noscript-Tag erzeugt. Kürzer und funktionsgleich wäre:
<a href="https://dev.modified-shop.org/Testkategorie-1/Testartikel-1::1.html">
<img class="unveil" src="https://dev.modified-shop.org/templates/tpl_modified_responsive/css/images/loading.gif" data-src="https://dev.modified-shop.org/images/product_images/thumbnail_images/1_0.jpg" alt="Testartikel 1" />
<noscript>
<img src="https://dev.modified-shop.org/images/product_images/thumbnail_images/1_0.jpg" alt="Testartikel 1" />
</noscript>
</a>
Das ist schon mal kürzer. Jetzt fällt immer noch auf, dass der img-Tag leicht verändert aber doppelt auftaucht. Kann man das noscript entfernen und den img-Tag so anpassen, dass er für unveil-Lazyload geeignet ist?
Ja, das geht durch folgenden JavaScript Code:
$(document).ready(function(){
$('noscript').replaceWith(function() {
return this.textContent.replace('src', 'class="unveil" src="https://dev.modified-shop.org/templates/tpl_modified_responsive/css/images/loading.gif" data-src') ;
});
$(".unveil").unveil(200); // Testweise kann man hier auch -200 einegben
});
Im html reicht dann für jedes Produkt:
<a href="https://dev.modified-shop.org/Testkategorie-1/Testartikel-1::1.html">
<noscript>
<img src="https://dev.modified-shop.org/images/product_images/thumbnail_images/1_0.jpg" alt="Testartikel 1" />
</noscript>
</a>
Das ist mehr als doppelt so kurz als zuvor.
Was macht das neue JavaScript genau?
Sobald die Seite komplett geladen ist, werden (falls JavaScript aktiv ist) alle noscript-Tags gelöscht und der img-Tag um die Klasse unveil erweitert, das loading gif hinzugefügt und die ursprüngliche src-Adresse als data-src für das spätere Nachladen (unveil-LazyLoad) umgeschrieben. Da das Umschreiben in einem rewrite geht, ist das recht flott.
Im zweiten Schritt wird dann das eigentliche unveil-Lazyload gestartet.