Well, I think I managed to create a solution for the custom sorting.
I created a custom TV Input, which puts the list of chunks in a table. The rows are draggable; this way one can apply a custom order! Unfortunately I couldn’t manage to keep the order while editing a resource (everything is beeing set back to default. But can be reordered).
Here’s the tpl code (and I might warn you: i’m no pro! so the code could be quite messy):
<div id="tv{$tv->id}-cb"></div>
<script type="text/javascript">
// <![CDATA[
{literal}
var reader{/literal}{$tv->id}{literal} = new Ext.data.ArrayReader({}, [
{name: 'id'},
{name: 'name'},
{name: 'value'},
{name: 'label'},
{name: 'checked'}
]);
var store{/literal}{$tv->id}{literal} = new Ext.data.Store({
autoDestroy: true,
reader: reader{/literal}{$tv->id}{literal},
data: [{/literal}
{foreach from=$opts item=item key=k name=cbs}
{literal}[{/literal}
'tv{$tv->id}-{$k}',
'tv{$tv->id}[]',
'{$item.value}',
'{$item.text|escape:"javascript"}',
'<center><input id="tv{$tv->id}-{$k}" type="checkbox" value="{$item.value}" name="tv{$tv->id}[]" checked="{if $item.checked}true{else}false{/if}" /></center>'
{literal}],{/literal}
{/foreach}
{literal}]
});
var grid{/literal}{$tv->id}{literal} = new Ext.grid.GridPanel({
store: store{/literal}{$tv->id}{literal},
colModel: new Ext.grid.ColumnModel({
defaults: {
width: 125,
sortable: false
},
columns: [
{id: 'label', header: 'Name', dataIndex: 'label'},
{id: 'checked', header: 'Aktiviert?', dataIndex: 'checked'}
]
}),
viewConfig: {
forceFit: true
},
width: 350,
height: 250,
frame: true,
enableDragDrop: true,
ddGroup: 'zusatzInhalteGroup',
ddText: 'Sortieren',
renderTo: {/literal}'tv{$tv->id}-cb'{literal}
});
var ddrow{/literal}{$tv->id}{literal} = new Ext.dd.DropTarget(
grid{/literal}{$tv->id}{literal}.getView().mainBody, {
ddGroup: 'zusatzInhalteGroup',
notifyDrop: function(dd, e, data) {
var sm = grid{/literal}{$tv->id}{literal}.getSelectionModel();
var rows = sm.getSelections();
var cindex = dd.getDragData(e).rowIndex;
var store = grid{/literal}{$tv->id}{literal}.getStore();
if (sm.hasSelection()) {
for (i = 0; i < rows.length; i ++) {
store.remove(store.getById(rows[i].id));
store.insert(cindex,rows[i]);
}
sm.selectRecords(rows);
}
}
});
{/literal}
// ]]>
</script>
The php-code (the connector ... i think it is called) is the same as the modx-default for checkbox.