Merconis 3.0 Varianten Selector

Fragen und Antworten zu den Templates und eigener Template-Erstellung
Antworten
SKowalsky
Beiträge: 3
Registriert: 9. Nov 2017, 14:42

Merconis 3.0 Varianten Selector

Beitrag von SKowalsky »

Hallo,

seit dem die Varianten in Merconis 3.0 per Ajax nachgeladen werden, gibt es Probleme mit meinen angepassten Templates.
In der Update-Anleitung für 2.2.1 nach 3.0.0 steht, man sollte darauf achten, dass sich folgende Zeile Code nicht in dem Teil des Templates befindet, der per Ajax nachgeladen wird:

Code: Alles auswählen

 <?php echo isset($str_html_variantSelector) ? $str_html_variantSelector : ''; ?> 
Nach meinen angepassten Templates allerdings, befindet sich dieser Varianten Selector unglücklicherweise genau innerhalb des Bereiches, der nachgeladen werden soll.
Verschiebe ich diese Zeile Code, dann ändert sich logischerweise auch die Positionierung des Varianten Selectors innerhalb der Produktdarstellung, was unerwünscht ist.
Verschiebe ich sie nicht, funktioniert der Varianten Selector nicht mehr ordnungsgemäß.

Gibt es eine Möglichkeit die Varianten trotzdem mit Ajax nachzuladen, ohne dabei den Varianten Selector verschieben zu müssen?
Benutzeravatar
supportteam2
Beiträge: 427
Registriert: 4. Mär 2015, 14:05

Re: Merconis 3.0 Varianten Selector

Beitrag von supportteam2 »

Hallo,

in einem Produktdetailtemplate können mehrere Bereiche definiert werden, die vom Variantenselektor per Ajax nachgeladen werden. Momentan ist es bei Ihnen also ein großer Bereich, der nachgeladen wird und in diesem befindet sich auch der Variantenselektor selbst, was zum Problem führt. Sie müssen das nun also so umbauen, dass es über und unter dem Variantenselektor zwei getrennte Bereiche gibt, die per Ajax nachgeladen werden.

Im Folgenden möchte ich Ihnen das anhand eines Beispiels erläutern.

Zunächst ist wichtig zu wissen, dass ein Bereich, der vom Variantenselektor per Ajax nachgeladen wird, folgendermaßen definiert wird:

Code: Alles auswählen

<div class="ajaxReloadByVariantSelector_<?php echo $this->objProduct->_id; ?>" id="ajaxReloadByVariantSelector_1_<?php echo $this->objProduct->_id; ?>">
    <!-- Dieses Div wird per Ajax nachgeladen -->
    <!-- Wenn der Variantenselektor hier steht, ist es falsch -->
</div>
Sowohl die Klassenangabe als auch die ID sind wichtig, um dafür zu sorgen, dass dieses Div per Ajax nachgeladen wird. Sollen mehrere Bereiche per Ajax nachgeladen werden, so erhalten beide Divs die gleiche Klassenangabe aber eine eindeutige ID:

Code: Alles auswählen

<div class="ajaxReloadByVariantSelector_<?php echo $this->objProduct->_id; ?>" id="ajaxReloadByVariantSelector_1_<?php echo $this->objProduct->_id; ?>">
    <!-- Dieses Div wird per Ajax nachgeladen ... -->
    <!-- Wenn der Variantenselektor hier steht, ist es falsch -->
</div>

<!-- Hier darf der Variantenselektor stehen -->

<div class="ajaxReloadByVariantSelector_<?php echo $this->objProduct->_id; ?>" id="ajaxReloadByVariantSelector_2_<?php echo $this->objProduct->_id; ?>">
    <!-- ... und dieses wird auch nachgeladen -->
    <!-- Wenn der Variantenselektor hier steht, ist es falsch -->
</div>
Nun folgt ein realistisches Beispiel, das Ihre konkrete Problemstellung bezogen auf die Position des Variantenselektors und nachfolgend dann den nötigen Umbau zeigt.


In diesem Code befindet sich der Variantenselektor mitten in einem großen Bereich, der per Ajax nachgeladen wird. Zunächst sieht dabei alles gut aus und sobald man eine Variante mittels des Variantenselektors auswählt, lädt sich dieser Bereich neu und der ebenfalls neu geladene Variantenselektor funktioniert dann nicht mehr:

Code: Alles auswählen

<?php
$str_html_variantSelector = $this->objProduct->_useCustomTemplate('template_productIncludes_variantSelector_01');
?>

<div class="shopProduct <?php echo $this->productTemplateType; ?> <?php echo $this->productTemplate; ?> <?php echo $this->productPositionsClassString; ?> block">

	<div class="ajaxReloadByVariantSelector_<?php echo $this->objProduct->_id; ?>" id="ajaxReloadByVariantSelector_1_<?php echo $this->objProduct->_id; ?>">
		<div class="productInfoBlock01">
			<h1 class="productTitle"><?php echo $this->objProduct->_title; ?></h1>

			<?php if ($this->objProduct->_variantIsSelected) { ?>
				<h2 class="variantTitle"><?php echo $this->objProduct->_selectedVariant->_title; ?></h2>
			<?php } ?>
		</div>

		<?php echo isset($str_html_variantSelector) ? $str_html_variantSelector : ''; ?>

		<div class="productInfoBlock02">
			<div class="description">
				<?php echo $this->objProduct->_variantIsSelected ? $this->objProduct->_selectedVariant->_description : $this->objProduct->_description; ?>
			</div>
		</div>
	</div>
</div>

Hier wurde der Code nun minimal umgebaut, damit der Bereich über dem Variantenselektor und der darunter separat per Ajax nachgeladen werden.

Code: Alles auswählen

<?php
$str_html_variantSelector = $this->objProduct->_useCustomTemplate('template_productIncludes_variantSelector_01');
?>

<div class="shopProduct <?php echo $this->productTemplateType; ?> <?php echo $this->productTemplate; ?> <?php echo $this->productPositionsClassString; ?> block">

	<div class="ajaxReloadByVariantSelector_<?php echo $this->objProduct->_id; ?>" id="ajaxReloadByVariantSelector_1_<?php echo $this->objProduct->_id; ?>">
		<div class="productInfoBlock01">
			<h1 class="productTitle"><?php echo $this->objProduct->_title; ?></h1>

			<?php if ($this->objProduct->_variantIsSelected) { ?>
				<h2 class="variantTitle"><?php echo $this->objProduct->_selectedVariant->_title; ?></h2>
			<?php } ?>
		</div>
	</div>

	<?php echo isset($str_html_variantSelector) ? $str_html_variantSelector : ''; ?>

	<div class="ajaxReloadByVariantSelector_<?php echo $this->objProduct->_id; ?>" id="ajaxReloadByVariantSelector_2_<?php echo $this->objProduct->_id; ?>">
		<div class="productInfoBlock02">
			<div class="description">
				<?php echo $this->objProduct->_variantIsSelected ? $this->objProduct->_selectedVariant->_description : $this->objProduct->_description; ?>
			</div>
		</div>
	</div>
</div>
Antworten

Zurück zu „Templates“