<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://kniebes.com/assets/xsl/rss.xsl" type="text/xsl" media="screen"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:media="http://search.yahoo.com/mrss/"
>

    <channel>
        <title>M. Kniebes. · Shopware</title>
        <atom:link href="https://kniebes.com/tag/shopware.xml" rel="self" type="application/rss+xml" />
        <link>https://kniebes.com</link>
        <description>Beiträge zum Tag Shopware</description>
        <lastBuildDate>Sun, 14 Sep 2025 12:54:15 +0200</lastBuildDate>
        <language>de-DE</language>
        <sy:updatePeriod>hourly</sy:updatePeriod>
        <sy:updateFrequency>1</sy:updateFrequency>
        <generator>IO</generator>
        <atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
        <atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
        <atom:link rel="hub" href="https://websubhub.com/hub"/>

                
            
            <item>
                <title><![CDATA[Höhere Produktivität durch LLM am Arsch]]></title>                
                <link>https://kniebes.com/2025/09/14/hoehere-produktivitaet-durch-llm-am-arsch.html</link>
                <dc:creator><![CDATA[Markus Kniebes]]></dc:creator>
                <pubDate>Sun, 14 Sep 2025 12:54:15 +0200</pubDate>
                <guid isPermaLink="true">https://knieb.es/6686</guid>
                <description><![CDATA[<p>Das unterstreicht auch wieder meine Ansicht, dass LLM beim Entwickeln die Produktivität keinesfalls steigert: <a href="https://www.osnews.com/story/143283/vibecoding-nothing-more-than-meowing-nuns/">Vibecoding: nothing more than meowing nuns</a></p>

<p>Junge! Junge! Vergangene Woche hatte ich auch wieder so eine Sache, bei der mich drei verschiedene LLM in den Wahnsinn getrieben haben: Ich wollte einfach nur wissen, wie ich unter Shopware SEO-URLs für eine vierte Root-Navigation bekomme, wenn diese nicht als einer der drei Einstiegspunkte in einem SalesChannel hinterlegt ist.</p>

<p>Neben der nicht programmatischen Antwort, einfach einen weiteren – unbenutzten – SalesChannel anzulegen und die Navigation dort einzutragen, kamen natürlich auch diverse Vorschläge, das Ganze mit ein wenig Code zu lösen.</p>

<p>Ganz entzückend, wenn der Agent dabei auf Events und Interfaces zugreift, die nie und zu keiner Version jemals existiert haben. Nach der frustrierten Anmerkung, dass es das nicht gibt, kamen im besten Fall wieder Lösungsansätze mit halluzinierten Komponenten heraus. Sehr knuffig fand ich auch den Hinweis, dass ich das einfach mit dem Command <code>sales-channel:add-category</code> machen könnte. Unnötig zu erwähnen, dass es das Command nicht gibt. Oder?</p>

<p>Wie auch immer. In den gut anderthalb Stunden hat mir kein LLM eine brauchbare Lösung anbieten können. Und ich musste doch wieder selbst denken. Also dank LLMs wieder Zeit in den Wind gerotzt, die ich hätte sinnvoller nutzen können.</p>
<hr>
<p><a href="mailto:m@kniebes.io?subject=Höhere Produktivität durch LLM am Arsch (knieb.es/6686)">Per E-Mail antworten</a><br>
<a href="https://kniebes.com/frag-mich.html">Du hast Fragen an mich oder ein Thema für die FAQ?</a></p>]]></description>

                            
                    <category><![CDATA[Shopware]]></category>
                
                    <category><![CDATA[LLM]]></category>
                                
            </item>

                            
                
            
            <item>
                <title><![CDATA[Überschreiben existierender Shopware Storefront Javascript Plugins]]></title>                
                <link>https://kniebes.com/2023/10/28/uberschreiben-existierender-shopware-storefront-javascript-plugins.html</link>
                <dc:creator><![CDATA[Markus Kniebes]]></dc:creator>
                <pubDate>Sat, 28 Oct 2023 12:17:47 +0200</pubDate>
                <guid isPermaLink="true">https://knieb.es/2472</guid>
                <description><![CDATA[<p>Trotz der Info <q>Each JavaScript plugin can only be overridden once. If two Shopware plugins try to override the same plugin, only the last one of them will actually work.</q> (<a href="https://developer.shopware.com/docs/guides/plugins/plugins/storefront/override-existing-javascript.html">Override Existing Javascript</a>) hat mich irgendein Gedanke geritten, das könnte mehrfach gemacht werden.</p>

<p>Und so wollte ich einfach das OffCanvasCartPlugin aus der Storefront ein klein wenig erweitern und die Eingabe einer Postleitzahl im Offcanvas Cart ermöglichen - manchmal zur Lieferkostenberechnung unabdingbar – und dabei die Infrastruktur zum Updaten von Feldern nutzen, die das Plugin schon mitbringt. Also einfach kurz das <code>src/plugin/offcanvas-cart/offcanvas-cart.plugin</code> extended, meine paar Methoden hinzugefügt und fertig. Dachte ich.</p>

<pre><code class="language-js">PluginManager.override('OffCanvasCart', 
    ZipExtensionOffcanvasCartPlugin, '[data-offcanvas-cart]'
);
</code></pre>

<p>Ich war wohl nicht der Einzige, der das dachte. Beispielsweise im SwagAmazonPay Plugin wird das Offcanvas Dingelchen auch schon überschrieben. Und gemäß dem Motto "Die Letzten werden die Ersten sein" gewinnt natürlich das Plugin, das die letzte Überschreibung durchführt. Das war nicht meins.</p>

<p>Letztlich bleibt einem nichts anderes übrig, die eigene Erweiterung als neues Plugin zu registrieren. Allerdings muss man dann auch darauf achten, indem selbst registrierte Plugins nicht noch einmal alle Events erstellt werden, sodass der Offcanvas zweimal geöffnet wird etc. In diesem speziellen Fall mit dem Offcanvas Plugin war das einfach, indem ich die <code>init()</code> überschrieben habe, ohne einen Aufruf von <code>super.init()</code></p>

<pre><code class="language-js">export default class ZipExtensionOffcanvasCartPlugin
        extends OffCanvasCartPlugin {
    init() {
        this.client = new HttpClient()
        this._registerZipTriggerEvents()
    }

    _registerZipTriggerEvents() {
        this.$emitter.subscribe('offCanvasOpened', () =&gt; {
            const forms = DomAccess.querySelectorAll(
                document, '.js-offcanvas-cart-add-zip', false
            )
            if (forms) {
                Iterator.iterate(forms, 
                    form =&gt; form.addEventListener(
                        'submit', this._onAddZip.bind(this))
                    )
            }
        });
    }

    _onAddZip(event) {
        event.preventDefault()
        const form = event.target
        const selector = '.js-offcanvas-cart-zip'

        this.$emitter.publish('onAddZip')

        super._fireRequest(form, selector)
    }
}
</code></pre>

<p>Die Zip in die ShippingLocation über einen SalesChannelContextFactoryDecorator in den SalesChannelContexts zu bekommen und der vernünftige Umgang damit im Checkout war dann im Vergleich zu dem Javascript-Theater der wesentlich entspanntere Teil des Ganzen. Und ist vielleicht später mal einen Post wert.</p>
<hr>
<p><a href="mailto:m@kniebes.io?subject=Überschreiben existierender Shopware Storefront Javascript Plugins (knieb.es/2472)">Per E-Mail antworten</a><br>
<a href="https://kniebes.com/frag-mich.html">Du hast Fragen an mich oder ein Thema für die FAQ?</a></p>]]></description>

                            
                    <category><![CDATA[Javascript]]></category>
                
                    <category><![CDATA[Shopware]]></category>
                                
            </item>

                            
                
            
            <item>
                <title><![CDATA[Unknown database type enum requested]]></title>                
                <link>https://kniebes.com/2023/10/06/unknown-database-type-enum-requested.html</link>
                <dc:creator><![CDATA[Markus Kniebes]]></dc:creator>
                <pubDate>Fri, 06 Oct 2023 18:40:27 +0200</pubDate>
                <guid isPermaLink="true">https://knieb.es/237e</guid>
                <description><![CDATA[<p>Bei der Installation einer Shopware App, die Entities (Resources/entities.xml) enthält, wird mir bei Shopware 6.4 mitunter ein lapidares <code>Unknown database type enum requested, MariaDb1027Platform may not support it.</code> auf der Konsole entgegen gehustet. Das tritt auf, wenn man MariaDB benutzt und Plugins installiert sind, die Datenbanktabellen erstellen, die Felder des Typs <code>EUNUM</code> haben. Shopware scheint sich hier wohl Doctrine zu bedienen, um Entities aus der XML Datei der App anzulegen.</p>

<p>Wenn es sich um eine fremdes Plugin mit den betroffenen Tabellen handelt, mache ich es mir idR. einfach und wandle die ENUM Spalten in ausreichend große VARCHAR Spalten um. Und dann klappt auch der Spaß mit der App Aktivierung.</p>

<p>Es ist per SQL Query relativ einfach die "schuldigen" Tabellen und Spalten zu finden:</p>

<pre><code class="language-sql">select col.table_schema as database_name,
     col.table_name,
     col.ordinal_position as column_id,
     col.column_name,
     col.data_type,
     trim(leading 'enum' from col.column_type) as enum_values
from information_schema.columns col
join information_schema.tables tab 
    on tab.table_schema = col.table_schema
        and tab.table_name = col.table_name
        and tab.table_type = 'BASE TABLE'
where col.data_type in ('enum')
    and col.table_schema not in (
        'information_schema', 
        'sys',
        'performance_schema', 
        'mysql'
    )
    and col.table_schema = 'Meine_Shopware_Datenbank' 
order by col.table_schema,
    col.table_name,
    col.ordinal_position;
</code></pre>

<p><code>Meine_Shopware_Datenbank</code> muss natürlich durch den entsprechenden Namen der Shopware DB ausgetauscht werden.</p>
<hr>
<p><a href="mailto:m@kniebes.io?subject=Unknown database type enum requested (knieb.es/237e)">Per E-Mail antworten</a><br>
<a href="https://kniebes.com/frag-mich.html">Du hast Fragen an mich oder ein Thema für die FAQ?</a></p>]]></description>

                            
                    <category><![CDATA[MySQL]]></category>
                
                    <category><![CDATA[Shopware]]></category>
                
                    <category><![CDATA[MariaDB]]></category>
                
                    <category><![CDATA[Doctrine]]></category>
                                
            </item>

                            
        
    </channel>
</rss>
