Custom Drops
Custom Drops
ACME_DEMO
ACME_MeinTestDrop
KK_Plain
CL_Nosto
S360_ItemSlider
ZUNFT_Berater
Metadaten und Einstellungen des Drops
Setzt die Darstellung des Drops um
Interaktion eines Drops mit PHP
Datenmigration zwischen Versionen
Ressourcen die zur Funktion und Optik des
Drops beitragen
Dokumentation des Drops
Icon des Drops für das Dropper Backend
{
"name": "Demo Drop",
"description": "Ein erstes eigenes Drop",
"version": "1.0.0"
}
{
"name": "Demo Drop",
"description": "Ein erstes eigenes Drop",
"version": "1.0.0",
"scripts": ["js/slider.js", "js/whatever.js"],
"stylesheets": ["css/acme-demo.css"]
}
{
...
// Einstellungen hinter dem Gear-Menu (optional)
"config": [
setting,
setting
],
// Haupteinstellungen (optional)
"settings": [
setting,
setting
],
// Voreingestellte Werte für ein neues Drop
"defaults": {
...
}
}
setting
{
"name": "Name der Einstellung",
"description": "Hilfe und Beschreibung zur Einstellung",
"type": "<CONTROL-TYP>",
"property": "<VARIABLEN-NAME>",
"multilanguage": true|false, // optional
"section": "<TAB-NAME>", // optional
"condition": "<JS-AUSDRUCK>", // optional
... // Control-spezifische Parameter
}
{
...
"type": "text",
"append": "px" // optional
}
ERZEUGT
"Hallo Welt"
{
...
"type": "html|code",
"height": 300, // optional
"lang": "html" // für "code"
"langInline": true|false // für "code"
}
ERZEUGT
"<h1>Hallo Welt!</h1>"
{
...
"type": "checkbox"
}
ERZEUGT
true
{
...
"type": "upload"
}
ERZEUGT
"/bilder/kk_dropper_uploads/meinBild.png"
{
...
"type": "date",
"format": "yyyy/mm/dd" // optional
}
ERZEUGT
"2015/04/16"
{
...
"type": "time"
}
ERZEUGT
"13:37"
{
...
"type": "color"
}
ERZEUGT
"rgba(122,176,11,0.61)"
{
...
"type": "link"
}
ERZEUGT
{
"url": "Plugins",
"title": "JTL Shop Plugins",
"openExternal": true,
"attrs": "href='Plugins' title='JTL Shop Plugins' target='_blank'"
}
{
...
"type": "select|multiselect|switch|imagepicker",
"options": "DATASOURCE" | [OPTION, OPTION, ...]
}
OPTION
{ "label": "Eins", "value": 1 }
{
...
"type": "switch",
"options": [
{ "label": "an", "value": true },
{ "label": "aus", "value": false }
]
}
ERZEUGT
true
{
...
"type": "select",
"options": [
{ "label": "0 (INT)", "value": 0 },
{ "label": "1 (INT)", "value": 1 },
{ "label": "true (BOOL)", "value": true },
{ "label": "false (BOOL)", "value": false },
{ "label": "null", "value": null },
{ "label": "Hallo Welt (STRING)", "value": "Hallo Welt" }
]
}
ERZEUGT
false
{
...
"type": "multiselect",
"options": [
{ "label": "0 (INT)", "value": 0 },
{ "label": "1 (INT)", "value": 1 },
{ "label": "true (BOOL)", "value": true },
{ "label": "false (BOOL)", "value": false },
{ "label": "null", "value": null },
{ "label": "Hallo Welt (STRING)", "value": "Hallo Welt" }
]
}
ERZEUGT
[true, 1, "Hallo Welt"]
{
...
"type": "imagepicker",
"options": [
{ "label": "Vorstellen", "value": "before", "image": "img/before.png" },
{ "label": "Anstellen", "value": "after", "image": "img/after" },
{ "label": "Vorhängen", "value": "prepend", "image": "img/prepend.png" },
{ "label": "Anhängen", "value": "append", "image": "img/append.png" },
...
],
"width": 600 // Breite des Popovers, optional
}
ERZEUGT
"append"
{
...
"type": "list",
"itemSettings": [setting1, setting2, ...],
// Voreinstellungen bei neuen Listitems
"itemDefaults": { "prop1": "value1", "prop2": "value2", ...},
// Der Name des Listitems ergibt sich aus dem
// konfigurierten Wert einer Einstellung, optional
"itemNameBinding": "prop1",
// Name für ein neues Listenelement
"newItemName": "Neuer Eintrag",
// Darstellungsfilter für Listenelemente deaktivieren
"itemConditionals": false
}
ERZEUGT
[
{ "prop1": "<value>", "prop2": "<value>", ... },
{ "prop1": "<value>", "prop2": "<value>", ... }
]
{
"name": "Bilder",
"description": "Füge neue Bilder hinzu oder bearbeite sie",
"type": "list",
"property": "images",
"itemSettings": [
{
"name": "Bildtitel",
"type": "text",
"property": "title"
},
{
"name": "Bild",
"type": "upload",
"property": "image"
},
{
"name": "Rahmen anzeigen?",
"type": "switch",
"property": "showBorder",
"options": [
{ "label": "Ja", "value": true },
{ "label": "Nein", "value": false }
]
}
],
"itemDefaults": {
"showBorder": true
},
"itemNameBinding": "title",
"newItemName": "Neues Bild"
}
<!-- Smarty Variablen des Shops ausgeben -->
<h1>Hallo Welt! Ich bin auf Seitentyp {$nSeitenTyp}</h1>
<!-- Drop Variable ausgeben -->
<h1>{$drop.greeting}</h1>
<!-- Listenelemente -->
{foreach $drop.images as $image}
<img
src="{$image.image}"
alt="{$image.title}"
class="img-responsive {if $image.showBorder}img-bordered{/if}"
/>
{/foreach}
<div class="acme-demo">Hallo Welt!</div>
<script type="text/javascript">
DropperFramework.init('.acme-demo', function(drop) {
drop.$.css('background', 'red');
});
</script>
<div class="acme-demo acme-demo-{$drop._internal.guid}">Hallo Welt!</div>
<script type="text/javascript">
DropperFramework.init('.acme-demo-{$drop._internal.guid}', function(drop) {
drop.$.css('background', '{$drop.bgColor}');
});
</script>
// Slick Konfiguration:
{
centerMode: true,
variableWidth: true,
infinite: true,
dots: true,
swipeToSlide: true,
waitForAnimate: false,
speed: 200
}
<?php
class ACME_DemoDrop extends DropActions {
// init() wird automatisch vor dem Rendern des
// Drop-Templates aufgerufen und dient als Konstrukor.
function init() {
// Erweiterung der Daten möglich
$this->drop['message'] = 'Hello World!';
// Manipulation möglich
foreach ($this->drop['images'] as &$image) {
$image['title'] = strtoupper($image['title']);
}
}
// Weitere Methoden die im Template verwendet werden können
function greet($name) {
return 'Hallo ' . $name;
}
}
<!-- Neues Drop Property ausgeben -->
<div>{$drop.message}</div> // Hello World!
<!-- Funktion aus der PHP-Klasse aufrufen -->
<div>{$drop.actions->greet('Martin')}</div> // Hallo Martin
kkDropperHelper::createThumbnail($imageUrl, $width, $height, $crop=true, $upscale=false)
angular.element(document).ready(function() {
// register ACME_Demo upgrades
angular.injector(['app']).invoke(['upgrade', function(upgrade) {
upgrade.addDropUpgrade("ACME_Demo", "1.0.0", "1.0.1", function(drop) {
drop.demo = true;
return drop;
});
upgrade.addDropUpgrade("ACME_Demo", "1.0.1", "1.0.2", function(drop) { ... });
upgrade.addDropUpgrade("ACME_Demo", "1.0.2", "1.0.3", function(drop) { ... });
}]);
});
$this->storage->set($key, $value, $scope);
$this->storage->get($key, $scope);
$this->storage->exists($key, $scope);
// nur für diese Instanz: 'instance'
$this->storage->set('readable-by-my-instance', 'hello', 'instance');
// für alle Instanzen des selben Drops: 'drop'
$this->storage->set('readable-by-other-instances', 'hello', 'drop');
// für alle Instanzen, egal welchen Drops: 'global'
$this->storage->set('readable-by-all-instances', 'hello', 'global');
k_dropper
|_ storage
|_ Shared // Scope 'global'
|_ ACME_Demo
|_ Shared // Scope 'drop'
|_ 1231-afas-f123-sdff // Scope 'instance'
|_ 9afb-212a-fa26-54d1 // Scope 'instance'
|_ ... // Scope 'instance'
{
"name": "Demo Drop",
...
"export": {
"storage": ["instance", "drop"]
}
}
class ACME_DemoDrop extends DropActions {
// Drop IO Funktion müssen mit 'io_' beginnen!
function io_sayHello($params) {
return $this->drop['greeting'] . ' ' . $params['name'];
}
}
var io = DropperFramework.io(dropGuid);
io.call('sayHello', { name: 'Martin' }, function(err, result) {
console.log(err, result); // null, 'Hallo Martin'
});