Wie du am ursprünglichen Code sehen kannst, gibt es ein href welches auf eine ID zielt, also
href="#tab1" (= der Reiter)
zielt auf
id="tab1" (= der Inhalt des Tabs)
in deinem zweiten geposteten Code.
Du benötigst also einen Counter, den du, wenn du z.B.
hpzellers Code benutzt, auch hast, nämlich die ID im u.g. Array.
$tabs_data[] = array('ID' => $i, 'TITLE' => $title, 'CONTENT' => $tab_content[$i]); Im Template kannst du das dann so verwenden:
<ul class="nav nav-tabs" id="myTab" role="tablist">
{if $PRODUCTS_DESCRIPTION != ''}
<li class="nav-item">
<a class="nav-link active" id="tab1-tab" data-toggle="tab" href="#tab1" role="tab" aria-controls="tab1" aria-selected="true">{#products_desc#}</a>
</li>
{/if}
{foreach item=tabs_data from=$tabs}
<li class="nav-item">
<a class="nav-link" id="tabE{$tabs_data.ID}-tab" data-toggle="tab" href="#tabE{$tabs_data.ID}" role="tab" aria-controls="tabE{$tabs_data.ID}" aria-selected="false">{$tabs_data.TITLE}</a>
</li>
{/foreach}
...
und
<div class="tab-content" id="myTabContent">
{if $PRODUCTS_DESCRIPTION != ''}
<div class="tab-pane fade show active" id="tab1" role="tabpanel" aria-labelledby="tab1-tab">{$PRODUCTS_DESCRIPTION} </div>
{/if}
{foreach item=tabs_data from=$tabs}
<div class="tab-pane fade show" id="tabE{$tabs_data.ID}" role="tabpanel" aria-labelledby="tabE{$tabs_data.ID}-tab">{$tabs_data.CONTENT}</div>
{/foreach}
...
Das E steht quasi für Extra. Kannst auch ein anderes oder mehrere Zeichen nehmen.
Es geht lediglich darum zu verhindern, daß IDs mehrfach vorkommen, denn der Shop hat ja auch weitere originäre Tabs, wie z.B. für Rezensionen, Bilder, Cross-Selling usw..
Da ich die Tab-Implementation nicht kenne, kann ich nur versuchen zu interpretieren wie die ganzen classes und aria-Attribute gesteuert und verwendet werden. Teste mal so.
Gruß,
noRiddle