Eine Bestellung zu bearbeiten in dem man z.B. ein LineItem löscht benötigt die Nutzung von Versionen. Was an sich nicht schwer ist, wenn man weiß
wie man es machen muss. (Beispiel ist Shopware 6.4)
$versionId = $this->orderRepository->createVersion($orderId, $this->getContext());
$this->orderLineItemRepository->delete([['id' => $id]], $this->getContext()->createWithVersionId($versionId));
$this->recalculationService->recalculateOrder($orderId, $this->getContext()->createWithVersionId($versionId));
$this->orderRepository->merge($versionId, $this->getContext());
Eine kleines Beispiel wie man Associations sortiert, weil es wohl nicht so einfach ist, so eines zu finden.
$criteria->addAssociation('lineItems');
$criteria->getAssociation('lineItems')->addSorting(new FieldSorting('position'));
In einer einzigen Zeile geht es nicht, weil dann die falsche Criteria genutzt wird.
Filter und ähnliches könne so auch gesetzt werden.
Man kann sehr einfach mit CSS auch die Reihenfolge von Elementen ändern. Damit kann man allein schon mit CSS viel an Templates anpassen ohne gleich Twig oder Smarty bemühen zu müssen.
<!DOCTYPE html>
<html>
<head>
<title>element reorder</title>
<style type="text/css">
div#first{
order:3;
-moz-order:3;
}
div#second{
order:1;
-moz-order:1;
}
div#third{
order:2;
-moz-order:2;
}
#main {
display: -webkit-flex; /* Safari */
display: flex;
}
#main div {
width: 70px;
text-align:center;
}
</style>
</head>
<body>
<div id="main">
<div id="first">ONE(3)</div>
<div id="second">TWO(1)</div>
<div id="third">THREE(2)</div>
</div>
</body>
</html>
Mal ein kleines Beispiel wie man Closures im
Zend Framework 2 zusammen mit dem TableGateway verwendet.
Die meisten Beispiele nutzen leider nicht die Möglichkeit Objekte in der Function zu nutzen, die außerhalb erzeugt wurden. Dabei ist das eigentlich ja das spannende daran und nur ein "Order By" ist ja in den seltensten Fällen allein was man möchte.
Also hier ein kleines Beispiel, um direkt dazu zu kommen. Man achte auf das Schlüsselwort use.
if($test!=null && $test->getId()>0){
$rset = $this->select(
function (Select $select) use ($test) {
$select->where->equalTo('test_id',$category->getId());
$select->where->lessThan('test_date','CURRENT_DATETIME');
$select->order('test_date DESC')->limit(20,0);
}
);
}
Die Klasse leitet von TableGateway ab. Deswegen $this->select().