ich würde gerne auf einer Seite ein Dropdown mit den verschiedenen Ländern zur Verfügung stellen (so wie z.B. auf /account/register). Dafür habe ich mir die Registrierungsseite mal angeschaut und gesehen, dass die „Shopware\Core\System\Country\CountryCollection“ eingefügt wird. Als ich dies in der service.xml versucht hatte, bekam ich den Fehler, dass eine Abhängigkeit besteht und ich stattdessen die „Shopware\Core\System\Country\CountryDefinition“ einfügen soll.
Jetzt habe ich nur die CollectionClass mit der ich aber wahrscheinlich nichts anfangen kann.
Irgendwie habe ich wahrscheinlich ein grundsätzliches Verständnisproblem, was ich per DependencyInjection einfügen muss, um die verschiedenen Collections zur Verfügung zu haben.
Ich wäre sehr dankbar, wenn mir da jemand etwas auf die Sprünge helfen könnte.
Vielen Dank im Voraus.
@Max_Shop
Danke, ja, über das Repository kann ich mir die Länder natürlich „zusammenbasteln“. Ich dachte nur, es müsste doch eine Möglichkeit geben, die Länderauswahl direkt zu bekommen. Im Twig Template address-form.html.twig kommen sie aus „page.countries“. Schaut man sich die Seite an, steht dort die CountryCollection.
Vielleicht mal allgemeiner gefragt, weil da bei mir wohl eine Wissenslücke klafft: Wie kann ich denn generell rückverfolgen, welche Dinge ich per DependencyInjection einfügen kann (offensichtlich geht ja vieles nicht) und wie finde ich dann jeweils dazu die richtige service id (also die, die ich in der services.xml benötige: )
Und warum kann z.B. die AccountLoginPage.php einfache Page extenden und hat dann
public function getCountries(): CountryCollection
{
return $this->countries;
}
zur Verfügung?
Ich weiß, ist jetzt vielleicht etwas viel verlangt, das zu erklären, aber ich komme mit google irgendwie nicht so recht weiter.
Vielen Dank noch mal.
In Shopware wird ja viel von Abstract-Klassen abgeleitet bzw. generell per extend erweitert. Sprich, alle Funktionen stehen dann zur Verfügung.
Die Injection ist ja nichts weiter, als die initiierte Klasse zu erhalten. Eine Collection ist von Standard her aber leer. Das heißt es kommt auf den Zeitpunkt darauf an, wann dein Code ausgeführt wird. Vermutlich wird in dem entsprechenden Controller sichergestellt, dass zuvor per Repository die Collection gefüllt wurde.
Du musst $countries in $page packen. $page wird vermutlich ein Struck sein. Einfach den Aufbau ansehen und schauen, wie du Arrays dort hinzufügen kannst. Weiß es leider nicht auswendig.