|
|||
|
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}
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>
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>
Funktioniert ebenfalls prima, in der "subpage_shipping.html" komme mit Code:
{if $smarty.get.tk==1}
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}
Code:
{$smarty.post.tk}
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 |
|
|||
|
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;
}
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 |
|
|||
|
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) |
|
|||
|
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 =) |
|
|||
|
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}
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 |
|
|||
|
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 |
|
|||
|
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 |
![]() |
| Lesezeichen |
| Stichworte |
| checkout, eigene, variable, vorgang |
| Themen-Optionen | |
| Ansicht | |
|
|
Ä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 |