# Backend-Plugin Container und Controller abgeschnitten

**URL:** <https://forum.shopware.com/t/backend-plugin-container-und-controller-abgeschnitten/58506>\
**Category:** Programmierung\
**Created:** [12. März 2019 um 07:17 UTC](https://forum.shopware.com/t/backend-plugin-container-und-controller-abgeschnitten/58506 "2019-03-12T07:17:18Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![daboss](https://avatars.discourse-cdn.com/v4/letter/d/43a26b/32.png) [@daboss](https://forum.shopware.com/u/daboss)\
**Post date:** [12. März 2019 um 07:17 UTC](https://forum.shopware.com/t/backend-plugin-container-und-controller-abgeschnitten/58506/1 "2019-03-12T07:17:18Z")

</div>

Hi,

ich habe gestern angefangen, ein Backend-Plugin zu schreiben, um bei den Kategorien einen neuen Tab einzufügen. Ausgangspunkt war die Doku&nbsp;[Backend extensions](https://developers.shopware.com/developers-guide/backend-extension/)

Ich habe mir die Codeblöcke aus der Webseite&nbsp;in meine Dateien ziemlich 1:1 einkopiert, halt soweit angepasst, das in der Kategorie-App ein weiterer Tab angezeigt werden soll. Ergebnis beim Öffnen der Kategorien:

```
Unexpected token :

```

Ich habe dann das Beispiel direkt heruntergeladen und installiert. Das hat (natürlich 😉 ) funktioniert. Daraufhin habe ich mein Plugin rausgenommen und das Beispiel so umgeschrieben, das der neue Tab in der Kategorie ist. Das&nbsp;hat auch funktioniert. Dann habe ich den Code “aufgeräumt”, also aus meiner Sicht unnötige Kommentare und Leerzeilen etc. raus. Und siehe da:&nbsp;

```
Unexpected Token :

```

Also wieder zurück zur “Kunden-Version”, auch da den Code “aufgeräumt” =\> gleiches Ergebnis.

Über den JavaScript-Debugger habe ich dann festgestellt, dass das hier generiert wurde:

Der my\_own\_controller.js und my\_own\_tab.js wurden also einfach oben “abgeschnitten” und so ungültiger Code erzeugt!&nbsp; ![Undecided](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/8ae622c50104e84c5003fedfcc22572813a67b41.png "Undecided")&nbsp;Sobald ich in den beiden Dateien die ursprünglichen Leerzeilen am Anfang wieder eingefügt habe, lief es wieder (und dann auch entsprechend mit meinem “eigenen” Code.

**Frage:&nbsp;** Warum ist das so? Gibt’s da eine Regel die ich nicht sehe? Das ist ja nicht bei allen \*.js und Blöcken so. Eine der Dateien braucht auch 6 Leerzeilen, die andere “nur” 3 oder 4, damit nix abgeschnitten wird. Ich vermute auch mal stark, dass das nicht so sein sollte, weil sowas macht die Backend-Plugin-Entwicklung natürlich… “spannend”

Viele Grüße,

Alex

---

<div class="post-metadata">

**Author:** ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)\
**Post date:** [12. März 2019 um 07:21 UTC](https://forum.shopware.com/t/backend-plugin-container-und-controller-abgeschnitten/58506/2 "2019-03-12T07:21:22Z")

</div>

Mach mal am Anfang der Datei etwa 5 Leerzeilen dann wirds funktionieren

---

<div class="post-metadata">

**Author:** ![sonic](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sonic/32/25728_2.png) [@sonic](https://forum.shopware.com/u/sonic)\
**Post date:** [12. März 2019 um 07:40 UTC](https://forum.shopware.com/t/backend-plugin-container-und-controller-abgeschnitten/58506/3 "2019-03-12T07:40:11Z")

</div>

Ob es das exakte Verhalten ist und für Dein Problem zutrifft: keine Ahnung&nbsp; ![Wink](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/b3785da0cbf2c8566cb535dcf55b2730b5224899.png "Wink")

Aber schon an diversen Stellen gesehen - und war auch mehr als 1x Thema im Forum ohne echte Antworten:

JS wird über smarty zusammen gebaut. “Unter-Scripte” werden dann mit Smarty-Blöcken injected. Damit der JS aber nicht rummeckert, werden die Smarty-Blöcke als Kommentar eingeleitet, also z.B. so  
[shopware/Shopware.grid.Panel.js at 5.5 · shopware/shopware · GitHub](https://github.com/shopware/shopware/blob/5.5/themes/Backend/ExtJs/backend/base/application/Shopware.grid.Panel.js#L65)

```
// {block name="backend/application/Shopware.grid.Panel"}

```

Wenn Du nun also so einen Block erweiterst (prepend), wird der Inhalt Deiner JS in den Block geschrieben, also hinter dem Doppel-Slash - und wenn Deine JS-Datei bis zum ersten Zeilenumbruch relevanten Code hat, zählt er als Kommentar, und “fehlt” dem Script.

Erklärt jetzt aber nicht, warum es mehr als eine Leerzeile sein muss - ggf. Windows-Codierung vom New-Line ?

---

<div class="post-metadata">

**Author:** ![daboss](https://avatars.discourse-cdn.com/v4/letter/d/43a26b/32.png) [@daboss](https://forum.shopware.com/u/daboss)\
**Post date:** [12. März 2019 um 07:51 UTC](https://forum.shopware.com/t/backend-plugin-container-und-controller-abgeschnitten/58506/4 "2019-03-12T07:51:57Z")

</div>

> [@Shyim schrieb:](https://forum.shopware.com/profile/20792/Shyim "Shyim")
> 
> Mach mal am Anfang der Datei etwa 5 Leerzeilen dann wirds funktionieren

Hi, ja, wie oben schon gesagt, dann funktionierts. Die Frage war, warum, bzw. warum so viele?

@sonic seine Antwort erklärt das teilweise (also warum man&nbsp; **eine** &nbsp;Leerzeile nötig ist). Das erklärt auch die Kommentarzeichen am Ende. (Eigentlich irgendwie logisch, wenn man drüber nachdenkt 😉 )

Aber warum die (Leer-)Zeilenanzahl variiert, ist immer noch nicht ganz klar. Die Theorie mit Windows- vs. Linux-New-Line werde ich heute Abend mal testen…

---

<div class="post-metadata">

**Author:** ![daboss](https://avatars.discourse-cdn.com/v4/letter/d/43a26b/32.png) [@daboss](https://forum.shopware.com/u/daboss)\
**Post date:** [13. März 2019 um 09:39 UTC](https://forum.shopware.com/t/backend-plugin-container-und-controller-abgeschnitten/58506/5 "2019-03-13T09:39:09Z")

</div>

Also, die Dateien hatten tatsächlich Windows-\r\n als Zeilentrenner. Ich habe PHPStorm so eingestellt, das er jetzt immer Linux-\n nutzt (SW läuft ja auf einem Linux-Server). Es scheint sich jetzt soweit „normalisiert“ zu haben, das in der my\_own\_tab.js&nbsp;und my\_own\_controller.js 2 Leerzeilen nötig sind.

- app.js (Keine Leerzeilen oben, 1 unten)

- my\_own\_controller.js (2 Leerzeilen oben)

- my\_own\_tab.js (2 Leerzeilen oben)

Wenn man sich an diese Regel halten kann… ok. Aber mir leuchtet immer noch nicht ein, warum es mehr als eine Leerzeile braucht. Ebensowenig, warum ganz ohne Leerzeilen nur die Ext.define-Zeile abgeschnitten wird und nicht auch die extend: bzw. override:-Zeile.

Ich nehme das jetzt erstmal so hin. Funktioniert ja dann soweit. Über eine belastbare Erklärung wäre ich trotzdem noch froh 🙂

---

<div class="post-metadata">

**Author:** ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)\
**Post date:** [13. März 2019 um 10:06 UTC](https://forum.shopware.com/t/backend-plugin-container-und-controller-abgeschnitten/58506/6 "2019-03-13T10:06:33Z")

</div>

Ich hab das mal vor 3 Monaten komplett gedebuggt. Die Templates werden included&nbsp;wie folgt

&nbsp;

```
// {include file="foooooooooooooo"}

```

Smarty fügt im nächsten Schritt den Inhalt der Datei dort ein

```
// Ext.define('Foooooooooooooooo', {

```

Im ScriptRenderer gibt es ein Regex der Kommentare aus dem Output entfernt. Weil der Code vorne ein // hat wir er gelöscht
