Jump to content
xt:Commerce Community Forum

Eigene Variable im Checkout Vorgang


MHilgers

Recommended Posts

Hallo Community,

nachdem ich nun schon 2 Stunden gebastelt und gegoogelt habe will ich euch mal bemühen.

Ich möchte gerne, abhängig vom Inhalt meines Warenkorbes (genauer gesagt wenn dort drin einer oder mehrere "digitale Artikel" sind) im weiteren Verlauf des Checkout Vorgangs Hinweise ausgeben und bestimmte Zahlungen sperren.

Im Cart komme ich per

{foreach name=aussen item=data from=$cart_data}

  {if $data.products_digital==1}

	<ul class="info_warning">

	<li class="infoWarning">Meldungstext</li>

	</ul>

  {/if}

{/foreach}
an die Information dran die ich benötige und kann eine Hinweismeldung ausgeben. Alles klar. Um diese Information (ob digitale Artikel vorhanden sind) nun auf die erste Seite des Checkouts durchzuschleifen dachte ich übergebe ich das ganze per URL Parameter. Dazu habe ich einfach den Link des Buttons "Kasse" von
<a href="{link page='checkout' paction='shipping' conn=SSL}">{button text=$smarty.const.BUTTON_CHECKOUT file='checkout.gif'}</a>
in
<a href="{link page='checkout' paction='shipping' conn=SSL}{foreach name=aussen item=data from=$cart_data}{if $data.products_digital==1}&tk=1{/if}{/foreach}">{button text=$smarty.const.BUTTON_CHECKOUT file='checkout.gif'}</a>
abgewandelt. Funktioniert ebenfalls prima, in der "subpage_shipping.html" komme mit
{if $smarty.get.tk==1}
an den Übergabeparemeter dran, bzw. überprüfe in. Aber jetzt is Ende im Gelände. Ich finde keinerlei Möglichkeit den Parameter weiter an die entscheidende Seite "subpage_payment.html" weiterzuleiten. Dort gibt es keine Link mehr den ich anpassen könnte und die Form, zu welchem der "Weiter"Button gehört hilft mir auch nicht. Habe dort versucht mit
{if $smarty.get.tk==1}

	{form type=hidden name=tk value=1 id=tk}

{/if}
ein Hidden Parameter anzlegen, klappt auch. Jedoch kann ich auf der Seite "subpage_payment.html" nicht wie in den Smarty Dokus beschrieben mit
{$smarty.post.tk}[/code]

auf die Variable der geposteten Form zugreifen.

Und damit bin ich "am Ende" (in jeder Hinsicht).

Irgend einer eine Idee, wie ich eine beliebige Variable vom Cart durch den Checkout Vorgang "durchgeschleift" kriege??

Viele Grüße

Michael

Link to comment
Share on other sites

Hi,

Schlage anderen Weg vor - erweitere class.order.php um ein Attribut und eine Methode:


// Attribut

private $has_digital = false;



// Methode:

function hasDigital() {

    foreach($products as $product => $element)

     {

          if ($element["products_virtual"] == true) {

               return true;

               break;

          }

     }

     return false;

}

so ungefähr.

In den gesamten Checkout-Templates steht dir das order-Objekt als Unterobjekt der Session-Variable zur Verfügung (Debug-Modus: xt_config --> _SYSTEM_DEBUG = true). Du kannst im Template auf das Orderobjekt und diese Methode zugreifen.

Solche Parameter sollten in keinster Weise als GET übergeben werden, da hier immer manipuliert werden kann...

Gruss,

Ph

Link to comment
Share on other sites

Hallo ph,

danke für deine Antwort!

Also vermute ich, dass mein Vorhaben nicht ohne "Core-Hack" zu machen ist? Ich möchte natürlich möglichst wenig am Core ändern um das System immer updatebar zu halten. Ist es natürlich mit so einer kleinen Änderung auch noch, man muss halt nur dran denken die Änderung nach eine Update wieder einzupflegen ;)

Aber ich probiere dein Vorschlag direkt mal aus. Danke!

Viele Grüße

Michael

Link to comment
Share on other sites

Hm... also so ganz habe ich es anscheinend noch nicht gerafft. Code ist in class.order.php eingetragen.

Aber wie genau komme ich jetzt im Template subpage_shipping.html (oder den anderen checkout templates) an die Funktion/ das Attribut dran?

Mit '{$smarty.session.order.has_digitalArticle}' fürs Attribut und ''{$smarty.session.order.hasDigitalArticle}' für die Funktion?

Irgendwie küt da nix . Hilfe =)

Link to comment
Share on other sites

So, habe jetzt noch eine andere Variante gefunden, um ohne CoreHack zu ermitteln ob ich Digital Artikel im Warenkorb habe:

{php}if($_SESSION['cart']->type == 'mixed' || $_SESSION['cart']->type == 'virtual'){{/php}[/CODE]

Wenn die Variable $_SESSION['cart']->type auf mixed oder virtual steht, sind ein, mehrere oder nur digitale Artikel im Warenkorb. Daran kann ich mich halten und die Variable steht mir überall im Checkout-Vorgang zur Verfügung.

Allerdings wäre es doch noch interessant zu wissen, wie ich auf eine eigene neue Variable aus der class.order.php zugreifen könnte.

Viele Grüße

Michael

Link to comment
Share on other sites

Hi Michael,

sorry, ich hatte einen Denkfehler. Die Variable muss natürlich für Deine Zwecke in der Klasse class.cart.php implementiert werden, nicht in der Orders, damit Du im gesamten Checkout darauf zugreifen kannst.

Ich habe das mal getestet und in dem File einfach eine Methode getTest() angelegt, die "TEST" zurückgibt.

Der Aufruf der Methode klappt mit:

{php}echo $_SESSION["cart"]->getTest();{/php}

Über Smarty-Variablen habe ich es nicht hinbekommen, {$smarty.session.cart->getTest()} funktioniert nicht.

Gruss,

Ph

Link to comment
Share on other sites

Danke Ph.

Hab mein Problem zwar mitlerweile wie oben beschrieben ohne Änderungen am Core lösen können, aber schlauer bin ich jetzt trotzdem wenn ich mal etwas ändern muss, was nicht über die Templates möglich ist. ;)

Denke der Thread hier hilft auch hoffentlich anderen Leuten weiter, denn allzu viele Infos zu diesem Thema habe ich bisher leider nicht gefunden.

Viele Grüße

Michael

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...