Quantcast
Channel: Programmierung - Shopware Community Forum
Viewing all 2871 articles
Browse latest View live

Linstenansicht / Kategorieansicht / Listings um die Eigenschaften erweitern

$
0
0

Hallo zusammen,

bin im Forum noch nicht auf eine Antwort gestossen, deswegen hier mein Problem:

In den Listings werden leider keine Daten zu den Eigenschaften der einzlnen Artikeln mit in das "sArticles" Array gespeichert.

Ich möchte die Listenansicht zu einer Kategorie mit den Daten einer Eigenschaft erweitern. Entsprechend den bei dem Artikel gespeicherten Werten sollen dann in der Listenansicht Icons mit in der Box zu dem Produktbild ausgegeben werden.

Das ganze sollte natürlich Updatesicher sein. Ich hatte schon versucht den Einstieg über ein Event 'Shopware_Modules_Articles_sGetArticlesByCategory_Start' bzw. 'Shopware_Modules_Articles_sGetArticlesByCategory_FilterResult', aber ich komme dort nicht an die Daten (mangels Wissen zur Shopware Programmierung). Ich habe auch etwas von Hooks gelesen. Wie kann ich die Daten erweitern und zurückgeben um dann im Template darauf zugreifen zu können?

Eine Ausgabe der 'Enlight_Event_EventArgs' Variablen bzw. mittels '->getSubject()' läuft leider immer in das php memory_limit.

Hat jemand einen Ansatz für mich?

Vielen Dank.


Artikellisten mit Eigenschaften erweitern

$
0
0

Hallo Community :)

Ich suche momentan nach einer Möglichkeit die Artikeleigenschaften im Listing auszugeben.

Gibts da eine fertige Funktion oder muss ich dafür ein Plugin schreiben?

Ich habe das mal über ein Plugin versucht, aber da hakt es beim holen der Artikelliste.

Die Antwort hiervon ist immer Leer:

public function install()
    {

        $this->subscribeEvent(
            'Enlight_Controller_Action_PostDispatchSecure_Frontend',
            'addPropertiesToListing'
        );

        return true;
    }


    public function addPropertiesToListing(Enlight_Event_EventArgs $args)
    {
        $articles = $args->getReturn();
        $controller = $args->get('subject');
        $view = $controller->View();
        $view->assign('articleProperties', !empty($articles));

    }

 

REST API um Feld erweitern?

$
0
0

Hallo in die Runde,

ich möchte gerne wissen ob es möglich ist die REST API um weitere Felder zu erweitern. Ich habe eine funktionierende REST API Schnittstelle zu unserem ERP erstellt. Nun möchte ich ein Feld, welches über ein Plugin in der Tabelle s_articles_attributes hinzugefügt wurde, mit der REST API befüllen. Leider klappt das nicht. Andere Felder in der Tabelle(Attr1, usw.) lassen sich problemlos befüllen bzw. aktualisieren.

Gibt es hierfür eine Lösung?

Vielen Dank für euer Feedback.

REST API - Auslesen eines Artikelpreises

$
0
0

Hallo zusammen,

ich möchte gerne über die API den Preis eines Artikels auslesen, ich erhalte da aber irgendwie komische Werte zurück, die ich nicht nachvollziehen kann.

Ich habe einen Artikel SW10167 mit 20,00EUR Preis angelegt (19% MwSt).

Rufe ich diesen Artikel über die API ab, erhalte ich folgenden Preis:

"price":16.806722689076,

Ändere ich den Preis auf 10,00EUR, erhalte ich dann:

"price":8.4033613445378

Was sind das für Werte? Ich finde in dem gesamten JSON Ergebnis nirgends den Preis, den ich hinterlegt habe...?

Könnte mir da jemand bitte mal den Trick verraten, wie man den exakten Preis ermitteln kann über die REST API?

Besten Dank und viele Grüße

SieGeL

Reihenfolge der Directories mit addTemplateDir falsch

$
0
0

Hallo zusammen,

ich arbeite mich gerade in Shopware ein und versuche seit gestern verzweifelt, Plugins zum Laufen zu bringen. Genauer gesagt: Plugins, bei denen Templates erweitert werden. Ich habe schnell gemerkt, dass die Plugins an sich funktionieren und ich mich an Events dranhängen kann, nur sobald Templates erweitert werden sollten, ist einfach nichts passiert (keine Fehlermeldung, aber eben auch keine Template-Änderung).

Ich konnte den Fehler nun so weit zurückverfolgen, dass es an der Reihenfolge der Directories liegt, die in der Smarty-Variable template_dir liegen. Wenn ich das richtig verstanden habe, wird dieses Array von vorne durchlaufen und sobald ein Template-Match in einem entsprechenden Verzeichnis gefunden wurde, wird das Template verwendet. Heißt für mich: wenn ich ein Template erweitern möchte, muss mein Plugin-View-Verzeichnis VOR den regulären (Responsive/Bare)-View-Verzeichnissen in template_dir liegen.

Das ist aber nicht der Fall. Wenn ich ein Verzeichnis über

$view->addTemplateDir(
            __DIR__ . 'Views'
        );

hinzufüge, wird es an letzter Stelle in template_dir abgelegt. Wenn ich händisch eingreife und die Position z.B. mit array_reverse tausche, sodass mein Plugin-Verzeichnis vorne liegt, funktioniert es! Aber es wird eben hinten angefügt. Und nicht nur bei den von mir erstellten Plugins, sondern bei allen Plugins, also auch den offiziellen von Shopware und weiteren Drittanbieter-Plugins.

Woran kann das liegen? Ich entwickel auf Windows 10 mit Zend Server CE, PHP 5.6.4 und MySQL Server 5.5. Shopware Version 5.1.6, wobei ich auch 5.1.0 und 5.2.6 ausprobiert habe und auch hier tritt der Fehler auf. Ich habe schon gelesen, dass Windows und Shopware sich nicht so vertragen. Meine Kollegen arbeiten jedoch mit der gleichen Entwicklungsumgebung und bei ihnen funktioniert alles reibungslos, ich bezweifle also, dass es daran liegt.

Hoffe, jemand kann mir weiterhelfen.

Viele Grüße
Malte :)

Zunahme toter Warenkorbeinträge

$
0
0

Aktuell entwickelt ich ein neues AutoLogin Plugin (die im Store funktionieren leider nicht ausreichend) und bin dabei über die Tabelle s_order_basket gestolpert. Nach dem automatischen Login sollen auch die letzten offenen Warenkörbe wieder angezeigt werden. In mehreren SW Shops ist mir jedoch aufgefallen, dass es im laufe der Zeit hier tote Warenkorbeinträge entstanden sind - als hätte Shopware nicht immer 100%ig die Warenkörbe hergestellt. Ich meine nicht von Gastbestellung! Ich meine Einträge mit userID. Hunderte User haben hier tote Einträge mit unterschiedlicher sessionID. Sprich, viele Kunden wissen gar nicht mehr das sie noch Einträge im Warenkorb haben.

Nun frag ich mich, wie kann das das sein? Wäre es sinnvoll diese Einträge dem Kunden wieder zugänglich zu machen?

Code completetion in Php storm

$
0
0

Bei mir funktioniert die Codecompletetion in PHP-Storm irgendwie nur teilweise. (Z.b die completetion für events) Ich habe das Symfony plugin und shopware plugin installiert. Kann mir eventuell jemand dabe helfen  ? 

 

 

Reihenfolge der Registrierungsfelder ändern - benötige Hilfe

$
0
0

Hallo,

da Kunden beim Registrieren regelmäßig das Telefonfeld zur Wiederholung von Passwort oder Emailadresse verwenden, möchte ich die Reihenfolge der Felder ändern. Teilerfolge habe ich schon, nur einen kleinen Haken an der Sache. Vielleicht kann jemand helfen.

Zunächst habe ich die Datei frontend / register / personal_fieldset.tpl aus bares komplett in mein Template kopiert.

Dort habe ich dann den Block Phone

{* Phone *}
        {block name='frontend_register_personal_fieldset_input_phone'}
            {if {config name=showPhoneNumberField}}
                <div class="register--phone">
                    <input autocomplete="section-personal tel"
                           name="register[personal][phone]"
                           type="tel"{if {config name=requirePhoneField}} required="required" aria-required="true"{/if}
                           placeholder="{s name='RegisterPlaceholderPhone'}{/s}{if {config name=requirePhoneField}}{s name="RequiredField" namespace="frontend/register/index"}{/s}{/if}"
                           id="phone"
                           value="{$form_data.phone|escape}"
                           class="register--field{if {config name=requirePhoneField}} is--required{/if}{if isset($error_flags.phone) && {config name=requirePhoneField}} has--error{/if}" />
                </div>
            {/if}
        {/block}

unter dem Block Lastname eingefügt und mit einem neuen Textfeld eine Erklärung darunter - wie beim Passwort:

{* Telefon description *}
                {block name='frontend_register_personal_fieldset_telefon_description'}
                    <div class="register--password-description">
                        {s name='RegisterInfoTelefon'}{/s}
                    </div>
                {/block}

Da mir optisch Email und Passwort dann wieder zu "zusammenhängend" erschienen, habe ich den Block Emailadresse über den Vornamen gesetzt.

{* E-Mail *}
            {block name='frontend_register_personal_fieldset_input_mail'}
                <div class="register--email">
                    <input autocomplete="section-personal email"
                           name="register[personal][email]"
                           type="email"
                           required="required"
                           aria-required="true"
                           placeholder="{s name='RegisterPlaceholderMail'}{/s}{s name="RequiredField" namespace="frontend/register/index"}{/s}"
                           id="register_personal_email"
                           value="{$form_data.email|escape}"
                           class="register--field email is--required{if isset($error_flags.email)} has--error{/if}" />
                </div>

                {if {config name=doubleEmailValidation}}
                    <div class="register--emailconfirm">
                        <input autocomplete="section-personal email"
                               name="register[personal][emailConfirmation]"
                               type="email"
                               required="required"
                               aria-required="true"
                               placeholder="{s name='RegisterPlaceholderMailConfirmation'}{/s}{s name="RequiredField" namespace="frontend/register/index"}{/s}"
                               id="register_personal_emailConfirmation"
                               value="{$form_data.emailConfirmation|escape}"
                               class="register--field emailConfirmation is--required{if isset($error_flags.emailConfirmation)} has--error{/if}" />
                    <br /></div>
                {/if}
            {/block}

Optisch ist jetzt alles nach Wunsch.

Anmeldung funktioniert immer noch, allerdings bringt der Browser jetzt eine falsche Meldung bei "Passwort speichern". Er fragt nun ob er die Telefonnummer und das Passwort speichern soll und nicht Email mit Passwort.

Wie ich das wieder richten kann, weiß ich nicht.

Ebenso ist mir auch klar, dass ich natürlich nicht die ganze Datei kopieren darf, sondern herleiten muss. Da bin ich auch nicht sicher, ob ich dann wieder die richtigen Positionen treffe.

Bin für alle Hinweise dankbar :-)

LG

 

 


Im erweiterten Javascript auf Config Object des Plugins zugreifen

$
0
0

Ich möchte im Backend in einer js Erweiterung auf das Config Object des Plugins zugreifen.

Wie realisiere ich das am besten ?

Suche-Fenster

$
0
0

Hallo,

in meinem Shop geht das suchefenster nicht mehr?

Die artikle sind noch nach wievor drin, werden auch über die Artikelnummer gefunden, jedoch nicht mehr über den namen( Artikelbezeichnung)!

Wäre echt schön wenn mir da einer weiterhilft, da ich mich darin nicht gut auskenne und das Fach-IT-lische auch nicht verstehe  ;-)

 

danke

 

 

 

passwort beim nächsten Login ändern

$
0
0

Gibt es eine Möglichkeit nach einem Kundenimport den Kunden ein neues Passwort eingeben zu lassen ?

Fehler im Automatic code review

$
0
0

Hallo,
ich habe ein Pluginupdate über die Versionsverwaltung hochgeladen. Dieses wird allerdings nicht freigeschaltet weil es einen Parse Error geben soll.
Die Fehlermeldung lautet wie folgt:
Parse error: syntax error, unexpected '['

Folgende Zeile wird bemängelt:
$attributeService->update('s_user_attributes', 'mein_feld_name', 'boolean', ['label' => 'Mein Beschreibungstext', 'translatable' => false, 'displayInBackend' => true, 'position' => 600] );

Schaue ich mir die Doku zum CRUD Service (https://developers.shopware.com/developers-guide/attribute-system/#backend-view-configuration) sieht es für mich in Ordnung aus, evtl. bin ich ja schon Betriebsblind.

In lokalen Testshops funktioniert die Installation ohne Probleme, es wird auch kein Parse Error im Log ausgegeben. Auch die Funktionalität des neuen Freitextfeldes ist gegeben.

Hat jemand einen Idee woran es liegen könnte?

 

Einzelne Bestellungen automatisch in CSV exportieren

$
0
0

Hallo zusammen,

ich bin noch ganz frisch in Shopware unterwegs und tüfftele inzwischen seit Tagen daran, neue Bestellungen in eine CSV-Datei zu schreiben und in einem Serververzeichnis abzulegen. Leider finde ich keinen Weg, mit dem das funktioniert. Meine Idee war ein Plugin zu schreiben, welches beim Event "Shopware_Modules_Order_SaveOrder_ProcessDetails" startet und die gerade abgeschlossene Bestellung in eine CSV exportiert. Lässt sich das umsetzen? 

Ich möchte die CSV-Dateien nutzen, um Sie regelmäßig in ein WaWi-System zu importieren.

Viele Grüße

Yannick

Prozentualer Aufschlag bei Optionen Custom Products V2

$
0
0

Guten Tag,

in den Costom Products SW4 gab es bei den Artikeloptionen die Möglichkeit, einen prozentualen Aufschlag einzustellen.

Diese Funktion scheint es bei den Custom Products V2 für SW5 nicht mehr zu geben!!??

Wie kann man diese Problematik umgehen, da der Großteil meine Produkte Optionen mit %-Aufschlag generiert werden.
Einen festen Aufschlag kann man Aufgrund der varialblen Artikelgößen nicht angeben.

Gibt es dafür ein Plugin oder muss ich jetzt darauf warten, dass diese Option in irgendeinem Update von V2 wieder
eingebaut werden? Vorher kann ich leider nicht von SW4 auf SW5 updaten! :-(

Frohe Ostern,

Daniel

Freitextfeld in Formular ausgeben

$
0
0

Hallo,

ich würde gerne ein Freitextfeld für Formulare anlegen, im Formular selber einen Text eingeben und diesen im Formular ausgeben.

Dafür möchte ich dieses Feld direkt im Template ausgeben.

Wie komme ich an den Inhalt des Feldes?

Wäre es ein Artikel und ich würde den Inhalt im Artikel angeben könnte ich den Inhalt einfach mit {$sArticle.testfeld} ausgeben - hier bin ich aber im Formular. Ich habe mir schon mit {debug} das Debugfenster ausgeben lassen, da finde ich aber weder das Feld noch den Feldinhalt.

Danke schonmal im Voraus.


sArticle.instock manipulieren

$
0
0

Hallo,
stehe im Moment etwas auf dem Schlauch. Da ich im zukünfitgen Shop sehr viele Artikel haben werde und der aktuelle Lagerbestand der Großhändler (je Artikel ggf mehrere) berücksichtigt werden soll, will ich wie folgt vorgehen:

1. Kunde wählt Farbe
2. der Lagerbestand der gewählten Farbe wird ermittelt
3. dieser muss hier aktuelisiert werden: sArticle.instock <-- hier komme ich nicht weiter

Kann sein, dass es mit Hook funktioniert ? Welchen ? Kann mir jemand einen Tipp geben ? 

Danke.
HEPI

Ausgeben von Freitextfeldern für Shopseiten

$
0
0

Hallo,

wir haben zusätzliche Freitextfelder für die Shopseiten / CMS-Seiten eingerichtet.

Diese werden allerdings standardmäßig nicht in Smarty als Variable mit übergeben. Shopware selbst schreibt ja dazu, dass man ggf. Freitextfelder über ein Plugin ausgeben muss.

Hat jemand von Euch hier schon Erfahrungen oder einen Tipp, wie das genau funktioniert?

Vielen Dank!

URL individuell anpassen?

$
0
0

Hallo Leute, 

ich habe eine Frage, kann man die URL einer Hauptkategorie anpassen ohne den Linktext zu ändern? 
z.B. eine  Hauptkategorie heißt „Socken und mehr“

ich möchte das die URL: wie folgt ist: www.example.com/socken/
und die Überschrift bei dem Link ist „ Socken und mehr“

Kann man das anpassen? 
 

HILFE !!! Absturz mitten im UPDate - Shop offline

$
0
0

Hallo,

jetzt mache ich einmal ein Update mitten im Tagesbetrieb... Auf allen Testinstallationen ohne Probleme. Im Liveshop jetzt die Katastrophe. Nach dem Klick auf "Aufräumen" folgende Meldung

 

Slim Application Error

The application could not run because of the following error:
Details
Type: Doctrine\Common\Annotations\AnnotationException
Message: [Semantical Error] The annotation "@ORM\Table" in class Shopware\Models\ProductStream\ProductStream was never imported. Did you maybe forget to add a "use" statement for this annotation?
File: /var/www/vhosts/hosting.de/verzeichnis/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php
Line: 54
Trace

#0 /var/www/vhosts/hosting.de/verzeichnis/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php(727): Doctrine\Common\Annotations\AnnotationException::semanticalError('The annotation ...')
#1 /var/www/vhosts/hosting.de/verzeichnis/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php(663): Doctrine\Common\Annotations\DocParser-&gt;Annotation()
#2 /var/www/vhosts/hosting.de/verzeichnis/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php(354): Doctrine\Common\Annotations\DocParser-&gt;Annotations()
#3 /var/www/vhosts/hosting.de/verzeichnis/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php(218): Doctrine\Common\Annotations\DocParser-&gt;parse('/**
 * @ORM\\Tab...', 'class Shopware\\...')
#4 /var/www/vhosts/hosting.de/verzeichnis/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php(79): Doctrine\Common\Annotations\AnnotationReader-&gt;getClassAnnotations(Object(ReflectionClass))
#5 /var/www/vhosts/hosting.de/verzeichnis/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/AnnotationDriver.php(180): Doctrine\Common\Annotations\CachedReader-&gt;getClassAnnotations(Object(ReflectionClass))
#6 /var/www/vhosts/hosting.de/verzeichnis/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/AnnotationDriver.php(247): Doctrine\Common\Persistence\Mapping\Driver\AnnotationDriver-&gt;isTransient('Shopware\\Models...')
#7 /var/www/vhosts/hosting.de/verzeichnis/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php(114): Doctrine\Common\Persistence\Mapping\Driver\AnnotationDriver-&gt;getAllClassNames()
#8 /var/www/vhosts/hosting.de/verzeichnis/engine/Shopware/Components/Model/ModelManager.php(218): Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory-&gt;getAllMetadata()
#9 /var/www/vhosts/hosting.de/verzeichnis/engine/Shopware/Components/Model/ModelManager.php(202): Shopware\Components\Model\ModelManager-&gt;regenerateAttributeProxies(Array)
#10 /var/www/vhosts/hosting.de/verzeichnis/engine/Shopware/Components/DependencyInjection/Bridge/Models.php(93): Shopware\Components\Model\ModelManager-&gt;generateAttributeModels()
#11 /var/www/vhosts/hosting.de/verzeichnis/engine/Shopware/Components/DependencyInjection/Bridge/Models.php(81): Shopware\Components\DependencyInjection\Bridge\Models-&gt;generateAttributeModels(Object(Shopware\Components\Model\ModelManager))
#12 /var/www/vhosts/hosting.de/verzeichnis/var/cache/production_201704210836/proxies/ShopwareProduction502fa417b38f648900e4494b802a8441ca05fcdfProjectContainer.php(700): Shopware\Components\DependencyInjection\Bridge\Models-&gt;factory(Object(Doctrine\Common\EventManager), Object(Shopware\Components\Model\Configuration), Object(Enlight_Loader), Object(Doctrine\DBAL\Connection), Object(Doctrine\ORM\Mapping\Driver\AnnotationDriver))
#13 /var/www/vhosts/hosting.de/verzeichnis/vendor/symfony/dependency-injection/Container.php(314): ShopwareProduction502fa417b38f648900e4494b802a8441ca05fcdfProjectContainer-&gt;getModelsService()
#14 /var/www/vhosts/hosting.de/verzeichnis/engine/Shopware/Components/DependencyInjection/Container.php(217): Symfony\Component\DependencyInjection\Container-&gt;get('models', 1)
#15 /var/www/vhosts/hosting.de/verzeichnis/engine/Shopware/Components/DependencyInjection/Container.php(146): Shopware\Components\DependencyInjection\Container-&gt;doLoad('models', 1)
#16 /var/www/vhosts/hosting.de/verzeichnis/recovery/update/src/DependencyInjection/Container.php(183): Shopware\Components\DependencyInjection\Container-&gt;get('models')
#17 /var/www/vhosts/hosting.de/verzeichnis/recovery/common/vendor/pimple/pimple/src/Pimple/Container.php(113): Shopware\Recovery\Update\DependencyInjection\Container-&gt;Shopware\Recovery\Update\DependencyInjection\{closure}(Object(Pimple\Container))
#18 /var/www/vhosts/hosting.de/verzeichnis/recovery/update/src/DependencyInjection/Container.php(189): Pimple\Container-&gt;offsetGet('shopware.contai...')
#19 /var/www/vhosts/hosting.de/verzeichnis/recovery/common/vendor/pimple/pimple/src/Pimple/Container.php(113): Shopware\Recovery\Update\DependencyInjection\Container-&gt;Shopware\Recovery\Update\DependencyInjection\{closure}(Object(Pimple\Container))
#20 /var/www/vhosts/hosting.de/verzeichnis/recovery/common/src/DependencyInjection/Container.php(80): Pimple\Container-&gt;offsetGet('shopware.theme_...')
#21 /var/www/vhosts/hosting.de/verzeichnis/recovery/update/src/app.php(169): Shopware\Recovery\Common\DependencyInjection\Container-&gt;get('shopware.theme_...')
#22 [internal function]: {closure}()
#23 /var/www/vhosts/hosting.de/verzeichnis/recovery/common/vendor/slim/slim/Slim/Route.php(462): call_user_func_array(Object(Closure), Array)
#24 /var/www/vhosts/hosting.de/verzeichnis/recovery/common/vendor/slim/slim/Slim/Slim.php(1326): Slim\Route-&gt;dispatch()
#25 /var/www/vhosts/hosting.de/verzeichnis/recovery/common/vendor/slim/slim/Slim/Middleware/Flash.php(85): Slim\Slim-&gt;call()
#26 /var/www/vhosts/hosting.de/verzeichnis/recovery/common/vendor/slim/slim/Slim/Middleware/MethodOverride.php(92): Slim\Middleware\Flash-&gt;call()
#27 /var/www/vhosts/hosting.de/verzeichnis/recovery/common/vendor/slim/slim/Slim/Middleware/PrettyExceptions.php(67): Slim\Middleware\MethodOverride-&gt;call()
#28 /var/www/vhosts/hosting.de/verzeichnis/recovery/common/vendor/slim/slim/Slim/Slim.php(1271): Slim\Middleware\PrettyExceptions-&gt;call()
#29 /var/www/vhosts/hosting.de/verzeichnis/recovery/update/index.php(69): Slim\Slim-&gt;run()
#30 {main}

Was nun?

 

Backend zeigt ebenfalls den Wartungsmodus an.

LG

[Solved] Plugin Tests Problem

$
0
0

Ich wollte mich endlich mal mit Unittest beschäftigen um die Entwicklungszykeln für unsere Plugins in Zukunft zu verkürzen.

Leider scheitere ich schon daran die Klassen für die ich Tests schreiben möchte in meine Testklassen zu laden.
In der Hoffnung das mir geholfen werden kann hier grob die Struktur des Plugins sowie der Tests:

Das ganze ist Shopware 5.2.21

In engine/Shopware/Plugins/Community/Frontend/MyPlugin wird das Plugin auf den entsprechenden NS ('MyPlugin') registriert.

In der phpunit.xml.dist ist entsprechendes folgendes zu finden:

&lt;?xml version="1.0"?&gt;
&lt;phpunit bootstrap="./Tests/bootstrap.php"
         colors="true"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot;
         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/5.3/phpunit.xsd&quot;
&gt;
    &lt;php&gt;
        &lt;env name="SHOPWARE_ENV" value="testing" /&gt;
    &lt;/php&gt;

    &lt;testsuites&gt;
        &lt;testsuite name="MyPlugin"&gt;
            &lt;directory&gt;./Tests/Functional&lt;/directory&gt;
            &lt;directory&gt;./Tests/Unit&lt;/directory&gt;
        &lt;/testsuite&gt;

        &lt;testsuite name="unit"&gt;
            &lt;directory&gt;./Tests/Unit&lt;/directory&gt;
        &lt;/testsuite&gt;

        &lt;testsuite name="functional"&gt;
            &lt;directory&gt;./Tests/Functional&lt;/directory&gt;
        &lt;/testsuite&gt;
    &lt;/testsuites&gt;

    &lt;groups&gt;
        &lt;exclude&gt;
            &lt;group&gt;disable&lt;/group&gt;
        &lt;/exclude&gt;
    &lt;/groups&gt;

    &lt;filter&gt;
        &lt;whitelist&gt;
            &lt;directory suffix=".php"&gt;./&lt;/directory&gt;
        &lt;/whitelist&gt;
    &lt;/filter&gt;
&lt;/phpunit&gt;

In MyPlugin/Tests/bootstrap.php

&lt;?php

include_once __DIR__ . '/../../../../../../../tests/Functional/bootstrap.php';

class MyPluginTestKernel extends TestKernel
{
    public function getConfig()
    {
        return __DIR__ . '/../../../../../../../config_testing.php';
    }

    public static function start()
    {
        $kernel = new \Shopware\Kernel('testing', true);
        $kernel-&gt;boot();

        $container = $kernel-&gt;getContainer();
        $container-&gt;get('plugins')-&gt;Core()-&gt;ErrorHandler()-&gt;registerErrorHandler(E_ALL | E_STRICT);

        /** @var $repository \Shopware\Models\Shop\Repository */
        $repository = $container-&gt;get('models')-&gt;getRepository('Shopware\Models\Shop\Shop');

        $shop = $repository-&gt;getActiveDefault();
        $shop-&gt;registerResources();

        if (!self::assertPlugin('MyPlugin')) {
            throw new \Exception("Plugin MyPlugin must be installed.");
        }

        Shopware()-&gt;Loader()-&gt;registerNamespace('MyPlugin\Tests', __DIR__ . '/../Tests/');
        Shopware()-&gt;Loader()-&gt;registerNamespace('Tests\Helper', __DIR__ . '/Helper/');
        Shopware()-&gt;Loader()-&gt;registerNamespace('Shopware\Components', __DIR__ . '/../Components/');
        Shopware()-&gt;Loader()-&gt;registerNamespace('Shopware\CustomModels', __DIR__ . '/../Models/');

        self::registerResources();
    }
    /**
     * @param string $name
     * @return boolean
     */
    private static function assertPlugin($name)
    {
        $sql = 'SELECT 1 FROM s_core_plugins WHERE name = ? AND active = 1';

        return (boolean) Shopware()-&gt;Container()-&gt;get('dbal_connection')-&gt;fetchColumn($sql, [$name]);
    }

    /**
     * Registers all necessary classes to the di container.
     */
    private static function registerResources()
    {
    }
}

NyPluginTestKernel::start();
~

In MyPlugin/Tests/Functional/MyPluginTest.php

&lt;?php

namespace MyPlugin\Tests\Functional;

use Shopware\Components\Test\Plugin\TestCase;
use MyPlugin\Components\Helper;

class MyPluginTest extends TestCase
{

    public function testSomething()
    {
        $mypluginhelper = new Helper();
    }
}

Der entsprechende Helper liegt unter MyPlugin/Components/ und sieht grob wie folgt aus:

&lt;?php

namespace MyPlugin\Components;

use MyPlugin\Classes\StatusCodes as StatusCheck;

/**
 * My Plugin Helper class
 *
 * Provides helper tools for the main MyPlugin class as well as the Bootstraper
 */
class Helper {
  ...
}


Jede Hilfe ist willkommen.

Viewing all 2871 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>