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?