Während man in 6.4 noch beliebigen eigenen HTML-Code in z.B. CMS-Elementen oder Snippets eingeben konnte, filtert 6.5 Teile dieses Codes nun heraus. Er gilt als möglicherweise unsicher. Wenn man nun von 6.4 auf 6.5 migriert und z.B. style-Tags entfernt werden, wäre es sehr aufwendig alles nun in SCSS und dem Theme unterzubringen. Einfacher ist es den Sanitizer zu deaktivieren und das selbe Verhalten wie bei 6.4 wieder zu haben.
In der config/packages/shopware.yaml kann den Sanitizer einfach deaktiveren.
shopware:
html_sanitizer:
enabled: false
Ein paar kleine Code-Snippets, um grundlegende Funktionen in node.js mit Elasticsearch implementieren zu können.
Elasticsearch-Client installieren:
npm install elasticsearch get-json
Client erstellen:
var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client( {
hosts: [
'http://localhost:9200/'
]
});
Index erstellen:
if(!client.indices.exists("testidx")){
client.indices.create({
index: "testidx"
}, (error, resp, status) => {console.log(status)}
);
}
Document speichern:
client.index(
{
index: "testidx",
type: "item",
id: "1",
body: {
id: "123",
value: "blubb"
}
}
);
Ein einfaches Query mit Callback-Function:
client.search({
index: 'testidx',
type: 'item',
body: {
query: {
match: { "id": "123" }
},
}
}, (error, response,status) => {
console.log("-- Hits --");
response.hits.hits.forEach((hit) => {
console.log(hit);
});
});
Ein einfaches Query mit Promise:
client.search({
index: 'testidx',
type: 'item',
body: {
query: {
match: { "id": "123" }
},
}
}).then((response) => {
response.hits.hits.forEach((hit) => {
console.log(hit);
});
}, (error) => {console.log(error);})
Mit Hilfe dieser Seite https://www.compose.com/articles/getting-started-with-elasticsearch-and-node/ zusammen gebastelt und hiermit https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/quick-start.html ergänzt.
Eine wichtige Erkenntnis das Code-Element in Shopware Einkaufswelten betreffend ist, dass es Smarty unterstützt. Wer also im HTML-Teil direkt JavaScript verwenden will muss etwas mit den geschweiften Klammern aufpassen. Das gilt besonders, wenn man einfach minimized Code-Snippets von einem Anbieter in die eigene Seite integrieren möchte.
function (x) {
alert(x);
}
oder
{literal}
function(x){alert(x);}
{/literal}
funktionieren.