Listing Ajax Request mit smarty.modifier

Hallo - ich entwickle ein Plugin, bei dem der Kunde Banner erstellen und diese dann zu einer bestimmten Kategorie hinzufügen kann, damit dieses Banner in der Kategorielistenansicht an einer bestimmten Position angezeigt wird. Dazu musste ich das Template listing/listing.tpl anpassen.

{extends file="parent:frontend/listing/listing.tpl"}

{* Actual listing *}
{block name="frontend_listing_list_inline"}

    {foreach $sArticles|listing_teaser_order as $sArticle}

        {$actualListingLoopIteration = $sArticle@iteration}

        {if $sArticle.type == 'teaser'}
            <div class="maco-wild-teaser">
                {action module=widgets controller=SwagDigitalPublishing bannerId={$sArticle.item} }

            </div>
            {else}
            {include file="frontend/listing/box_article.tpl" sArticle=$sArticle.item}
        {/if}
    {/foreach}
{/block}

Soweit, so gut…

Aber dann ist mir aufgefallen, dass bei der Paginierung auf der nächsten Listing-Seite kein Banner erscheint. Die Produkte werden via Ajax nachgeladen, wenn man die Paginierung verwendet.

Ich habe herausgefunden, dass es ein weiteres Listing-Template namens listing-ajax.tpl gibt, in dem nur der Block „frontend_listing_list_inline_ajax“ verfügbar ist. Ich habe versucht, diese Ansicht mit dem Code aus der listing.tpl anzupassen - aber dann, wenn ich versuche, die Paginierung zu verwenden, passiert nichts. Ich sehe die Ladeanzeige, aber wenn sie fertig geladen hat, befinde ich mich immer noch auf der „alten“ Listing-Seite - die Paginierung funktioniert nicht mehr.

Hier mal mein Smarty-Modifier:

<?php
/*
 * Smarty modifier
 * -------------------------------------------------------------
 * File:     modifier.listing_teaser_order.php
 * Type:     modifier
 * Name:     listing_teaser_order
 * Purpose:  replaces vars in the given content for the given article
 * -------------------------------------------------------------
 */
function smarty_modifier_listing_teaser_order($items)
{

    $itemsToReturn = [];

    $count = 0;
    $teaserCount = 0;

    foreach ($items as $item){

        if($item['attributes']['ma_co_wild_teaser'] != null){
            $teaserCount++;

            $teaser = array('type'  => 'teaser',
                'item'  => $item['attributes']['ma_co_wild_teaser']['contentBannerID']);

            $itemsToReturn = insert($itemsToReturn, $position=$item['attributes']['ma_co_wild_teaser']['teaserPosition']-1, $teaser );

        }

        $itemsToReturn[] = [
            'type'  => 'article',
            'item'  => $item
        ];

        $count++;
    }

    return $itemsToReturn;
}

function insert($array, $index, $val)
{
    $size = count($array);
    if (!is_int($index) || $index < 0 || $index > $size)
    {
        return -1;
    }
    else
    {
        $temp   = array_slice($array, 0, $index);
        $temp[] = $val;
        return array_merge($temp, array_slice($array, $index, $size));
    }
}

Sobald ich im listing-ajax.tpl den Modifier in der foreach verwende, funktioniert nichts mehr.

Irgendwelche Ideen, warum das passiert?

Ok, ich konnte das Problem lösen, indem ich einen CompilerPass eingesetzt habe - somit ist auch hier der Modifier verfügbar.

Es wird nun fast alles korrekt geladen - ausser das Bild selber, dieses wird noch nicht gerendert, aber das liegt glaube ich nochmal an einem anderen Plugin, welches die Bilder verarbeitet - vermute, dass hier das passende Event nicht gecalled wird und somit das Bild nicht gerendert. Der Text vom Banner, der Link und auch der HTML Container mit dem data-srcset wird geladen. Aber aus dem srcset wird kein Bild gerendert.