ich möchte gerne die document.php (engine/Shopware/Components) ändern. Wie mache ich das updatesicher? Wahrscheinlich komme ich nicht umhin ein Plugin zu schreiben. Kann mir jemand kurz erklären oder mir ein Beispiel geben für ein Backend Plugin? Ich habe schon ein einfaches Plugin für das Frontend geschrieben, aber ich denke das hier wird komplizierter. Eigentlich muss ich nur eine Codezeile in der document.php ändern (Zeile 751):
// Update numberrange, except for cancellations
if ($typID != 4) {
soll geändert werden zu
// Update numberrange, except for cancellations
if ($typID != 4 && $typID != 1) {
aber irgendwie stehe ich auf den Schlauch und weiß einfach nicht weiter bzw. ich weiß erst gar nicht wie ich anfangen soll.
Der passende Hook wäre dann Shopware_Components_Document::saveDocument:: (replace/after/) - leider bin ich mit dem “hooken” nicht so vertraut und krieg zwar die Funktion hin aber nicht die Werte die erwartet werden. Vielleicht kann sich ja hier noch jemand einklinken und dir helfen. Würde auch mich interessieren(rein technisch).
vielen Dank für deinen Kommentar. Das hat mir schon weitergeholfen. Ich komme jedoch nicht weiter. Meine Vorgensweise wäre, dass ich Shopware_Components_Document::saveDocument::after verwenden würde. Also das heißt doch, dass ich mich nach dem Beenden von saveDocument im Originalen einklinken würde, oder? Dann würde ich einfach den Code mit der If-Abfrage einbauen
if (!$this->_allowMultipleDocuments && !empty($checkForExistingDocument['id'])) {
} else {
// Update numberrange, except for cancellations
if ($typID != 1) {
if (!empty($this->_document['numbers'])) {
$numberrange = $this->_document['numbers'];
} else {
// The typID is indexed with base 0, so we need increase the typID
if (!in_array($typID, ['1', '2', '3'])) {
$typID = $typID + 1;
}
$numberrange = 'doc_' . $typID;
}
/** @var NumberRangeIncrementerInterface $incrementer */
$incrementer = Shopware()->Container()->get('shopware.number_range_incrementer');
// Get the next number and save it in the document
$nextNumber = $incrementer->increment($numberrange);
Shopware()->Db()->query('
UPDATE `s_order_documents` SET `docID` = ? WHERE `id` = ? LIMIT 1 ;
', [$nextNumber, $rowID]);
$bid = $nextNumber;
}
}
Bin ich da auf dem richtigen Weg oder liege ich da total falsch. Kann mir da jemand noch weiterhelfen und mir ein paar Tipps geben? Wie gesagt, mit der Plugin-Entwicklung stehe ich noch am Anfang.
genau das war auch mein Ansatz, jedoch dürfte dann die typID leer sein bzw null sein. Ich bin leider mehr im Frontend unterwegs. Weswegen ich da nicht mehr machen kann. Ich hoffe dir kann trotzdem noch jemand helfen.
Leider bin ich immer noch nicht weiter gekommen. Ich versuche als Test gerade die document id in meiner Funktion zu ändern, damit ich im Dokument sehen kann, ob der Hook greift. Leider finde ich dazu recht wenig…
public function subscribeEvents()
{
$this->subscribeEvent(
'Shopware\Components\Document::saveDocument::after',
'onAfterGetBidAction'
);
}
public function onAfterGetBidAction(\Enlight_Hook_HookArgs $args)
{
/** @var \Shopware\Components\Document $document */
$document = $args->getSubject();
$view = $document->_view;
$view->assign('_documentID', 333);
}
Kann mir jemand helfen? Ist der Ansatz überhaupt richtig? Für jede Zeile Code oder Tipps wäre ich schon dankbar.
Über $context = array(„test“, $hierVariableEinfügen) und ein
$logger->addError(„test“, $context)
Kannst du auch dann Variablen ausgeben
Damit siehst du dann in den Logfiles ob du soweit kommst - bin aber nicht sicher obs mit „“ geht - war der Meinung das muss ein „_“ sein bei Shopware_Components…