Auswahl Versandkosten - Erweiterung der Darstellung um Preis und Sortierung nach Preis

Moin!

Ich möchte gerne die Darstellung der Versandkosten im Checkout modifizieren. Dazu möchte ich das Array mit den Variablen die in Smarty zur Verfügung stehen zum einen um den Preis, also die Versandkosten ergänzen und darüberhinaus das Array nach dem Preis sortierten.

Hat jemand eine Idee für einen Ansatz?

Danke
Thorsten

Müsstest du mal schauen in welcher tpl die Darstellung aufgebaut wird. Diese in dein Theme packen und per extend den entsprechenden Block erweitern/überschreiben. Vermutlich läuft es auf ein Überschreiben hinaus, wobei du große Teile des Originals übernehmen können wirst.

Da die Preise an der Versandart hängen, müsstest du die über das entsprechende Objekt irgendwie bekommen können, da hoffe ich aber einfach mal, dass sich noch jemand meldet, der da mehr Erfahrung hat. Du könntest mal einige der Variablen versuchen, die auch bei den Mail-Vorlagen zur Verfügung stehen, ggf. klappt da eine von (sDispatch.price oder so…hab’s noch nie gemacht, daher nur eine Idee)

Sortierung kannst du entweder über den Smarty-Bereich machen, oder im Nachhinein per Javascript.

Die Versandkosten stehen dir an der Stelle leider nicht zur Verfügung. Ich brauchte das auch. Habe dazu ein Plugin geschrieben.

 'afterGetDispatches',
        ];
    }

    public function afterGetDispatches(\Enlight_Hook_HookArgs $args)
    {
        $dispatches = $args->getReturn();
        /** @var \sAdmin $sAdmin */
        $sAdmin = $args->getSubject();
        $countryParam = ['id' => $args->offsetGet('countryID')];

        $dispatches = new ArrayCollection($dispatches);

        $dispatches = $dispatches->map(function ($el) use($countryParam, &$sAdmin) {
            // session value required for sGetPremiumShippingcosts method call
            $this->container->get('session')->offsetSet('sDispatch', $el['id']);

            $el['ghBruttoAmount'] = $sAdmin->sGetPremiumShippingcosts($countryParam)['brutto'];

            return $el;
        });

        $criteria = Criteria::create()
            ->orderBy(array('ghBruttoAmount' => Criteria::DESC));

        $dispatches = $dispatches->matching($criteria);

        $this->container->get('session')->offsetSet('sDispatch', $dispatches->first()['id']);

        return $dispatches;
    }
}

 

1 „Gefällt mir“

Vielen Dank!

Das ist genau was ich gesucht habe :slight_smile:

Grüße
Thorsten

@arnebecker schrieb:

Die Versandkosten stehen dir an der Stelle leider nicht zur Verfügung. Ich brauchte das auch. Habe dazu ein Plugin geschrieben.

‚afterGetDispatches‘,
];
}

public function afterGetDispatches(\Enlight_Hook_HookArgs $args)
{
$dispatches = $args->getReturn();
/** @var \sAdmin $sAdmin */
$sAdmin = $args->getSubject();
$countryParam = [‚id‘ => $args->offsetGet(‚countryID‘)];

$dispatches = new ArrayCollection($dispatches);

$dispatches = $dispatches->map(function ($el) use($countryParam, &$sAdmin) {
// session value required for sGetPremiumShippingcosts method call
$this->container->get(‚session‘)->offsetSet(‚sDispatch‘, $el[‚id‘]);

$el[‚ghBruttoAmount‘] = $sAdmin->sGetPremiumShippingcosts($countryParam)[‚brutto‘];

return $el;
});

$criteria = Criteria::create()
->orderBy(array(‚ghBruttoAmount‘ => Criteria::DESC));

$dispatches = $dispatches->matching($criteria);

$this->container->get(‚session‘)->offsetSet(‚sDispatch‘, $dispatches->first()[‚id‘]);

return $dispatches;
}
}

 

Eine Frage habe ich dazu noch. Die Versandkosten werden ja nun absteigend sortiert und die teuerste (die erste) ausgewählt. Das lässt sich aber auch nicht ändern. Wenn ich eine günstigere Versandart anklicke, stehts wieder auf der teuersten. Kannst Du mir sagen, wie das zu ändern ist?

Thorsten

Hey Thorsten,

das gewirkt die vorletzte Zeile:

$this->container->get(‘session’)->offsetSet(‘sDispatch’, $dispatches->first()[‘id’]);

Wenn du die rausnimmst, wird die Auswahl aus dem Frontend richtig übernommen.

Bei uns ist der Usecase noch ein bisschen anders.