#1 (permalink)  
Alt 28.03.2011, 14:51
Benutzer
 
Registriert seit: 17.03.2011
Beiträge: 44
Standard Eigene Variable im Checkout Vorgang

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
Code:
{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
Code:
<a href="{link page='checkout' paction='shipping' conn=SSL}">{button text=$smarty.const.BUTTON_CHECKOUT file='checkout.gif'}</a>
in
Code:
<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
Code:
{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
Code:
{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
Code:
{$smarty.post.tk}
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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #2 (permalink)  
Alt 28.03.2011, 22:50
Benutzer
 
Registriert seit: 12.07.2007
Beiträge: 77
Standard

Hi,

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

Code:
// 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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #3 (permalink)  
Alt 29.03.2011, 07:10
Benutzer
 
Registriert seit: 17.03.2011
Beiträge: 44
Standard

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

Geändert von MHilgers (29.03.2011 um 07:28 Uhr)
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #4 (permalink)  
Alt 29.03.2011, 07:27
Benutzer
 
Registriert seit: 17.03.2011
Beiträge: 44
Standard

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 =)
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #5 (permalink)  
Alt 29.03.2011, 08:59
Erfahrener Benutzer
 
Registriert seit: 07.09.2006
Beiträge: 157
Standard Debug

Mit {debug} kannst Du feststellen welch Variablen und Arrays Dir zur Verfügung stehen.
Mit {php}print_r($_SESSION);{/php} kannst Du sehen was aktuell in der Session ist.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #6 (permalink)  
Alt 29.03.2011, 09:14
Benutzer
 
Registriert seit: 17.03.2011
Beiträge: 44
Standard

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

Code:
{php}if($_SESSION['cart']->type == 'mixed' || $_SESSION['cart']->type == 'virtual'){{/php}
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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #7 (permalink)  
Alt 29.03.2011, 10:22
Benutzer
 
Registriert seit: 12.07.2007
Beiträge: 77
Standard

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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #8 (permalink)  
Alt 29.03.2011, 10:26
Benutzer
 
Registriert seit: 17.03.2011
Beiträge: 44
Standard

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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
checkout, eigene, variable, vorgang

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kommentarfeld im Checkout wieder füllen xmazt Fragen zur Software 0 07.02.2011 20:46
Eigene Sprachvariablen definieren SuseBeer Fragen zur Software 4 27.07.2009 13:37


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.

Copyright © 2011 xt:Commerce GmbH / xt:Commerce International Ltd. - All Rights Reserved

xt:Commerce is a SafeCharge brand