snPerranporth

Aktives Mitglied
6. März 2017
25
31
Hallo,

ich suche nach einer Möglichkeit, Artikeldaten von Parent-Artikeln bei Child-Artikeln im JTL Shop 4 nachzuladen.

Im Speziellen soll es nun noch darum gehen Kurzbeschreibung als auch Langbeschreibung nachzuladen, um weniger Pflegeaufwand in der Wawi zu haben.
Schließlich ist der Vater ja originär dazu gedacht, selbe Artikel zu bündeln. Artikelnamen, Beschreibungen und Bilder sind in der Theorie grundsätzlich identisch. (Auch wenn es in der Praxis einige Ausnahmen gibt.)

Es muss sich hierbei zunächst nicht um eine Ideallösung via Plugin handeln. Wer aber dieses Plugin bauen möchte, sei herzlich dazu eingeladen. Ich wäre daran interessiert.

Eine Möglichkeit hatte ich darin gesehen, eine Breadcrump-Funktion zu nutzen. Das ist mir mit Copy & Paste auch gelungen. Leider aber nur für den Artikelnamen.
Der Code, den man dazu verwenden kann - jedenfalls in dem von mir genutzt Template - lautet:
HTML:
                    {block name="productdetails-info-product-title"}
                    {foreach name=navi from=$Brotnavi item=oItem}
                        {if $smarty.foreach.navi.last}
                            {block name="parent-articlename-item"}
                        <h1 class="product-title" itemprop="name">{$oItem->name}</h1>
                            {/block}
                        {/if}
                    {/foreach}
                    {/block}

Als Ansatz für eine weitere mögliche Quick-Dirty-Lösung habe ich den JavaScript Schnipsel zum Nachladen der Artikelbilder des Vaters bei Kindern gefunden (siehe unten). Danke FPrüfer dafür!
Leider bin ich kein Programmierer. Deswegen weiß ich leider nicht, wie ich den Code anpassen müsste.

Aber vielleicht kann mir jemand von euch helfen?

Hallo,
eine Lösung per Plugin ist sicherlich der korrekteste Weg. Unser Shop kann aber eine ganze Menge und somit gibt es auch eine Lösung die komplett auf Javascript basiert und damit einfach insTemplate integriert werden kann.
Der Ansatz dabei ist, den Artikelcontent des Vaterartikels beim Child per AJAX nachzuladen, dort die Bildinformationen zu extrahieren und diese in die Gallery des aktuellen Child-Artikels einzufügen. Das klingt kompliziert, sind aber nur ein paar Zeilen Code. Das einzige Problem ist hier der Overhead, der durch das Nachladen der Vater-Artikeldaten entsteht.
In der custom.js des eigenen Child-Templates könnte man das so realisieren:
JavaScript:
(function($) {
    function loadParentImage2Gallery() {
        // Parameter (Parent- und Child-ID) aus dem Produktformular holen
        var io   = $.evo.io();
        var args = io.getFormValues('buy_form');

        if (args.a && args.VariKindArtikel && !document.parentImagePushed) {
            // Flag für das Laden des Parent-Image setzen...
            document.parentImagePushed = true;
            // ...und Parent-Content per AJAX holen
            var url  = '/navi.php?a=' + args.a;
            $.ajax(url, {data: 'isAjax'}).done(function(html) {
                // Bilddaten aus dem Content extrahieren...
                var $images = $(html).find('#gallery a[itemprop="image"] img');

                if ($images.length) {
                    // ...und an die Einträge der aktuellen Gallery anhängen
                    var objImage = $images.data('list');
                    var imgItems = $.evo.article().gallery.getStack();
                    imgItems.push(objImage);
                    $.evo.article().gallery.setItems(imgItems);
                    $.evo.article().gallery.render();
                }
            })
        }
    }

    function initParentImage2Gallery() {
        // Wenn eine neue Variante gewählt wird, dann muss das Flag für das Parent-Image zurückgesetzt werden
        $('.variations .variation').click(function() {
            document.parentImagePushed = false;
        });
        $('.variations .form-control').change(function() {
            document.parentImagePushed = false;
        });
    }

    $(document).ready(function() {
        // Einfügen des Parent-Image beim direkten Aufruf des Child-Artikels...
        initParentImage2Gallery();
        loadParentImage2Gallery();
    });

    $(document).on('evo:contentLoaded', function() {
        // ...und auch beim Nachladen per AJAX
        initParentImage2Gallery();
        loadParentImage2Gallery();
    });
})(jQuery);

Vielen, vielen lieben Dank für jede Hilfe!


Fortschritt:
(1) Artikeltitel nachladen ✔ (siehe Code-Schnipsel 1)
(2) Artikelbilder nachladen ✔ (siehe Code-Schnipsel 2 [von FPrüfer])
(3) Kurzbeschreibung nachladen
(4) Langbeschreibung nachladen
 
Zuletzt bearbeitet:

Ähnliche Themen