Hallo,
Weiß jemand wie man die Config für Plugins nach dem 5.2 Schema anlegt? Ist es über das XML möglich?
Danke & LG
Hallo,
Weiß jemand wie man die Config für Plugins nach dem 5.2 Schema anlegt? Ist es über das XML möglich?
Danke & LG
Hallo,
hier bin ich auch gerade dran. Die Doku ist hier leider nocht etwas dürftig.
Für die Plugin-Struktur musst du folgende Verzeichnisebene anlegen:
In das Verzeichnis Resources kannst du dann eine config.xml-Datei kopieren und deine Plugin-Konfugration vornehmen.
Folgende möglichen Typen habe ich bisher rausgefunden:
Slogan Config New
Meine Beschreibung
elementText
Textelement
Beschreibung Textelement
elementPassword
Passworttextfeld
Beschreibung Passwortfeld
elementTextarea
Textarea Feld
elementBoolean
Boolean Feld
true
Beschreibung Booleanfeld
colorElement
Farbauswahl
Beschreibung Farbauswahl
elementDate
Date Feld
elementDatetime
Datetime Feld
elementTime
Time Feld
elementInterval
Interval Feld
elementHtml
HTML Eingabefeld
elementMedia
Media Selection Feld
elementNumber
Number Feld
Hier fehlt mir lediglich noch der Typ select oder combo.
Hier habe ich aktuell keine Ahnung wie der sauber zu konfigurieren ist.
Liebe Grüße
Kevin
Hi,
Habe hier alles festgehalten - die weiteren Datentypen findest Du im .xsd des XML files:
https://synonymous.rocks/neue-pluginstruktur-ab-shopware-5-2/
Viel Spass…
Hallo,
mir haben hier folgende Links geholfen:
http://talks.benjamin-cremer.de/scd2016_plugin/#/
https://developers.shopware.com/developers-guide/plugin-system/ (Example plugins am Ende)
Danke euch für die Informationen.
Mittlerweile schaffe ich es alle Datentypen anzusprechen - außer den Typ select.
Hier kann ich persönlich auch aus der .xsd-Datei nicht ableiten, wie ich dort ein Array mit Werten übergeben soll in der config.xml. Mit dem „alten“ Plugin-System hat das ja noch bequem über die Bootstrap.php funktioniert.
ich würde eigentlich nur gerne folgendes Beispiel in die config.xml bekommen.
$this->Form()->setElement(
'select',
'font-size',
array(
'label' => 'Font size',
'store' => array(
array(12, '12px'),
array(18, '18px'),
array(25, '25px')
),
'value' => 12
)
);
Hat von euch jemand eine Idee wie man das abbildet?
lg
Kevin
Select Box
Textelement
Beschreibung Textelement
Test 1
Test 2
Du hast recht, ist im XSD nicht im Detail spezifiziert. Aber ich würde mal etwas wie oben versuchen. Die Options sind im XSD allerdings geht mir für die Options der entsprechende Value als Attribut ab… Ich habe es hier einfach mal mit „value“ versucht.
Ich habe die Konfiguration direkt einmal probiert:
elementSelect
Select Box
Beschreibung Selectbox
Test 1
Test 2
Das einzige was dann passiert im Backend ist folgendes:
Eine Selectbox ohne Werte
Liebe Grüße
Kevin
Dann versuchs mal ohne value…
So, habe gerade die Info erhalten, dass das in der aktuellen Version noch nicht geht… also musst Du hier beim Array bleiben.
Musst du über die Install lösen like that. Ist noch nicht möglich via xml
$element = Shopware()->Models()->getRepository(Element::class)->findOneBy(['name' => 'elementSelect']);
$element->setOptions(['store' => [
[1, "LOL"],
[2, "LOL2"]
]]);
Shopware()->Models()->persist($element);
Shopware()->Models()->flush();
Danke, dass ist wenigstens eine Information mit der man arbeiten kann
Das mit dem Array werde ich mir dann mal anschauen, wobei ich aktuell noch nicht genau weiß was damit gemeint ist. Aber wie heißt es so schön. Aller Anfang ist schwer. Danke dir für deine Bemühungen.
lg
Kevin
Musst du über die Install lösen like that. Ist noch nicht möglich via xml
$element = Shopware()->Models()->getRepository(Element::class)->findOneBy([‚name‘ => ‚elementSelect‘]);
$element->setOptions([‚store‘ => [
[1, „LOL“],
[2, „LOL2“]
]]);
Shopware()->Models()->persist($element);
Shopware()->Models()->flush();
Dankeschön für den Hinweis. Diesen werde ich doch direkt einmal ausprobieren und Bescheid geben ob es geklappt hat.
Nach ein paar Versuchen habe ich festgestellt, dass man die Funktion recht leicht „nachrüsten“ kann. ‚Einfach‘ in der Datei
engine\Shopware\Components\Plugin\XmlConfigDefinitionReader.php
die Funktion parseElement wie folgt austauschen:
/**
* @param \DOMElement $entry
* @return array
*/
private function parseElement(\DOMElement $entry)
{
$element = [];
$isRequired = ($entry->getAttribute('required')) ? XmlUtils::phpize($entry->getAttribute('required')) : false;
$type = ($entry->getAttribute('type')) ? $entry->getAttribute('type') : 'text';
$scope = ($entry->getAttribute('scope')) ? $entry->getAttribute('scope') : 'locale';
if ($scope === 'locale') {
$scope = 0;
} elseif ($scope === 'shop') {
$scope = 1;
} else {
throw new \InvalidArgumentException(sprintf("Invalid scope '%s", $scope));
}
$element['isRequired'] = $isRequired;
$element['type'] = $type;
$element['scope'] = $scope;
if ($position = $this->getChildren($entry, 'name')) {
$element['name'] = $position[0]->nodeValue;
}
if ($position = $this->getChildren($entry, 'store')) {
$element['store'] = $position[0]->nodeValue;
}
if ($position = $this->getChildren($entry, 'value')) {
$element['value'] = XmlUtils::phpize($position[0]->nodeValue);
} else {
$element['value'] = null;
}
foreach ($this->getChildren($entry, 'description') as $label) {
$lang = ($label->getAttribute('lang')) ? $label->getAttribute('lang') : 'en';
$element['description'][$lang] = $label->nodeValue;
}
foreach ($this->getChildren($entry, 'label') as $label) {
$lang = ($label->getAttribute('lang')) ? $label->getAttribute('lang') : 'en';
$element['label'][$lang] = $label->nodeValue;
}
$element['options'] = [];
foreach ($this->getChildren($entry, 'options') as $option) {
foreach ($option->childNodes as $node) {
if (!$node instanceof \DOMElement) {
continue;
}
if ($type=='select') {
$element['store'][] = array($node->getAttribute('value'),XmlUtils::phpize($node->textContent));
} else {
$element['options'][$node->nodeName] = XmlUtils::phpize($node->textContent);
}
}
}
return $element;
}
Geändert habe ich quasi nur die letzten Zeilen,
if ($type==‚select‘) {
$element[‚store‘] = array($node->getAttribute(‚value‘),XmlUtils::phpize($node->textContent));
} else {
$element[‚options‘][$node->nodeName] = XmlUtils::phpize($node->textContent);
}
wobei der Else-Zweig das Original darstellt. Auf diese Weise kann man mit folgendem Code in der XML-Datei die bisherige Funktion aus den Forms direkt nachstellen:
TestVar
Testinhalt
testconten
Testvariable 1
Testvariable 2
Ist zwar nicht Update-sicher, aber vielleicht bringen es ja die Shopware-Programmierer einfach in ihr System mit ein, damit man hier die ‚alten‘ Zöpfe abschneiden kann.
Hey
danke für deinen guten Beitrag.
Letztens beim Stöbern auf github habe ich entdeckt, dass die Funktionalität in Form eines PR während der Papercuts bearbeitet wurde. Wurde soweit ich das sehen könnte auch angenommen und sollte daher bald in den Core wandern
Liebe Grüße
Kevin
Bin gerade durch google hierauf gestoßen. Vielleicht sollte man in diesem Thread darauf hinweisen, dass die akzeptierte Antwort oben nicht mehr aktuell ist.
Hey ho,
was ist denn die aktuelle Lösung? Auch die Erklärung im Buch ist mehr als nur unvollständig. Die Basics, auf die man selbst kommen kann werden erklärt. Elementare Fragen zum wirklichen Arbeiten mit der Struktur werden wiederum nicht erläutert.
Folgender Code jedenfalls gibt nur ein leeres Select. Habe dann auch mal versucht Übersetzungen hineinzumachen.
loremIpsum
loremIpsum
BloremIpsum
Lorem ipsum
Lorem ipsum
lorem
lorem
ipsum
ipsum
Was mir auch aufgefallen ist: Man kann keinen Value setzen, wenn man einen scope angegeben hat.
activate
Enable
Aktivieren
Lorem
Ipsum
1
Und sowas hier ist auch nicht erlaubt:
activate
Enable
Aktivieren
Lorem
Ipsum
1
1
//EDIT:
Für die Options habe ich was gefunden:
1
DE 1
EN 1
TWO
DE 2
EN 2
3
Test
4
Test default
Test
… Die Doku ist hier leider nocht etwas dürftig.
Für die Plugin-Struktur musst du folgende Verzeichnisebene anlegen:
- custom/plugins/VENDORPluginName
- custom/plugin/VENDORPluginName/Resources
In das Verzeichnis Resources kannst du dann eine config.xml-Datei kopieren und deine Plugin-Konfugration vornehmen.
…
Hallo,
ich versuche auch gerade aus einem statischen Template-Part ein Plugin zu erstellen. Die reinen Template-Parts .tpl, .css und .js klappen mittlerweile auch schon.
Nun wollte ich einige statische oder als Textbausteine erstellte Teile durch im Plugin eingefügte Konfig-Felder ersetzen. Der Beschreibung im Buch nach hörte sich das auch recht einfach an. config.xml erstellen, und per smarty direkt im Template einsetzen.
Ich sitze heute schon den ganzen Tag dran und habe es noch nicht hinbekommen auch nur das eine Text-Feld aus dem Buch zu erzeugen.
Laut https://developers.shopware.com/developers-guide/plugin-system/#plugin-resources funktioniert es nur, wenn die Reihenfolge der Elemente der im Schema entspricht.
Der im Buch genannte code hat schon keine Namespace-Definition für xsi, um das XML valide zu machen. An anderer Stelle stand, dass der value nur angegeben werden darf, wenn scope nicht auf shop gesetzt wird.
In allen Beispielen wird der Pfad immer relativ zum Resources angegeben. Deshalb frage ich mich gerade ob der Pfad oben mit dem /plugin/ statt /plugins/ ein neu anzulegender ist? Wobei andere Plugins den Pfad /custom/plugins/VENDORPluginName/Resources/config.xml nutzen. Der Pfad oben würde aber auch keinen Sinn ergeben, denn dann wäre das Plugin ja wieder zweigeteilt.
Selbst wenn ich die config.xml aus einem anderen (funktionierenden) Plugin einsetze erhalte ich keine Config-Felder in der Seite meines Plugins im Plugin-Manager und in Grundeinstellungen > Weitere Einstellungen.
Habe ich etwas übersehen und muss die Verwendung der config.xml noch an einer anderen Stelle angemeldet/initialisiert werden?
Für hilfreiche Tipps schon jetzt mein Dank
Hartmut
Hallo,
ich versuche auch gerade aus einem statischen Template-Part ein Plugin zu erstellen. Die reinen Template-Parts .tpl, .css und .js klappen mittlerweile auch schon.
Nun wollte ich einige statische oder als Textbausteine erstellte Teile durch im Plugin eingefügte Konfig-Felder ersetzen. Der Beschreibung im Buch nach hörte sich das auch recht einfach an. config.xml erstellen, und per smarty direkt im Template einsetzen.Ich sitze heute schon den ganzen Tag dran und habe es noch nicht hinbekommen auch nur das eine Text-Feld aus dem Buch zu erzeugen.
Laut https://developers.shopware.com/developers-guide/plugin-system/#plugin-resources funktioniert es nur, wenn die Reihenfolge der Elemente der im Schema entspricht.
Der im Buch genannte code hat schon keine Namespace-Definition für xsi, um das XML valide zu machen. An anderer Stelle stand, dass der value nur angegeben werden darf, wenn scope nicht auf shop gesetzt wird.In allen Beispielen wird der Pfad immer relativ zum Resources angegeben. Deshalb frage ich mich gerade ob der Pfad oben mit dem /plugin/ statt /plugins/ ein neu anzulegender ist? Wobei andere Plugins den Pfad /custom/plugins/VENDORPluginName/Resources/config.xml nutzen. Der Pfad oben würde aber auch keinen Sinn ergeben, denn dann wäre das Plugin ja wieder zweigeteilt.
Selbst wenn ich die config.xml aus einem anderen (funktionierenden) Plugin einsetze erhalte ich keine Config-Felder in der Seite meines Plugins im Plugin-Manager und in Grundeinstellungen > Weitere Einstellungen.Habe ich etwas übersehen und muss die Verwendung der config.xml noch an einer anderen Stelle angemeldet/initialisiert werden?
Für hilfreiche Tipps schon jetzt mein Dank
Hartmut
hi
habe die gleiche Problem getroffen und es funktioniert in neue Plugin-system bei mir so:
MyPlugin/Subscriber/Frontend.php:
$this->configReader = Shopware()->Plugins()->Application()->Config()->get(‚eKomiId‘);
$controller = $args->getSubject();
$view = $controller->View();
$view->addTemplateDir($this->path . ‚/Resources/Views/‘);
$view->assign(‚eKomiId‘, $this->configReader);
Hoffe es etwa Hilfe mitbringen kann.
VG
chuuuing