Custom renderSwitchStatusOptions icons dissapear, when saving the formtab
DmitryFX opened this issue · 1 comments
migx.mp4
UPD.
It seems, that renderSwitchStatusOptions @ migx\configs\grid\grid.renderer.inc.php is called twice when formtab save is hit. The first call has correct data (has render options), the second - not.
And during the page reload renderSwitchStatusOptions is called maaaaaaaaany times for the single row migx. Why?
Config. Not really makes sense, as I've tried a lot of variations of default values and so on..
{
"formtabs":[
{
"MIGX_id":1,
"caption":"\u0424\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438",
"print_before_tabs":"0",
"fields":[
{
"MIGX_id":1,
"field":"image",
"caption":"\u0424\u043e\u0442\u043e",
"description":"",
"description_is_code":"0",
"inputTV":"",
"inputTVtype":"image",
"validation":"",
"configs":"",
"restrictive_condition":"",
"display":"",
"sourceFrom":"migx",
"sources":"",
"inputOptionValues":"",
"default":"",
"useDefaultIfEmpty":"0",
"pos":1
},
{
"MIGX_id":44,
"field":"text",
"caption":"\u0422\u0435\u043a\u0441\u0442",
"description":"",
"description_is_code":"0",
"inputTV":"",
"inputTVtype":"richtext",
"validation":"",
"configs":"",
"restrictive_condition":"",
"display":"",
"sourceFrom":"config",
"sources":"",
"inputOptionValues":"",
"default":"",
"useDefaultIfEmpty":"0",
"pos":2
},
{
"MIGX_id":46,
"field":"visible_in_slider",
"caption":"\u0412\u0438\u0434\u0435\u043d \u0432 \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0435",
"description":"",
"description_is_code":"0",
"inputTV":"",
"inputTVtype":"",
"validation":"",
"configs":"",
"restrictive_condition":"",
"display":"",
"sourceFrom":"config",
"sources":"",
"inputOptionValues":"",
"default":"",
"useDefaultIfEmpty":"0",
"pos":3
},
{
"MIGX_id":45,
"field":"visible_on_page",
"caption":"\u0412\u0438\u0434\u0435\u043d \u0432 \u043e\u043a\u043d\u0435",
"description":"",
"description_is_code":"0",
"inputTV":"",
"inputTVtype":"checkbox",
"validation":"",
"configs":"",
"restrictive_condition":"",
"display":"",
"sourceFrom":"config",
"sources":"",
"inputOptionValues":1,
"default":"0",
"useDefaultIfEmpty":1,
"pos":4
}
],
"pos":1
}
],
"contextmenus":"edit_migx||remove_migx_and_image",
"actionbuttons":"loadfromsource||uploadfiles",
"columnbuttons":"remove_migx_and_image",
"filters":"",
"extended":{
"migx_add":"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u043e\u0442\u043e",
"disable_add_item":1,
"add_items_directly":1,
"formcaption":"\u0424\u043e\u0442\u043e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f",
"update_win_title":"",
"win_id":"migx_photo_uploads_ext_win_id",
"maxRecords":"",
"addNewItemAt":"bottom",
"media_source_id":"",
"multiple_formtabs":"",
"multiple_formtabs_label":"",
"multiple_formtabs_field":"",
"multiple_formtabs_optionstext":"",
"multiple_formtabs_optionsvalue":"",
"actionbuttonsperrow":4,
"winbuttonslist":"",
"extrahandlers":"this.selectSelectorOption||this.addItem||this.addNewItem||this.uploadImages||this.update||this.handleColumnSwitch||this.uploadFiles||this.uploadSuccess",
"filtersperrow":4,
"packageName":"",
"classname":"",
"task":"",
"getlistsort":"",
"getlistsortdir":"",
"sortconfig":"",
"gridpagesize":"",
"use_custom_prefix":"0",
"prefix":"",
"grid":"",
"gridload_mode":1,
"check_resid":1,
"check_resid_TV":"",
"join_alias":"",
"has_jointable":"yes",
"getlistwhere":"",
"joins":"",
"hooksnippets":"",
"cmpmaincaption":"",
"cmptabcaption":"",
"cmptabdescription":"",
"cmptabcontroller":"",
"winbuttons":"",
"onsubmitsuccess":"",
"submitparams":""
},
"permissions":{
"apiaccess":"",
"view":"",
"list":"",
"save":"",
"create":"",
"remove":"",
"delete":"",
"publish":"",
"unpublish":"",
"viewdeleted":"",
"viewunpublished":""
},
"fieldpermissions":"",
"columns":[
{
"MIGX_id":1,
"header":"\u0424\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f",
"dataIndex":"image",
"width":2,
"sortable":"false",
"show_in_grid":1,
"customrenderer":"",
"renderer":"this.renderImage",
"clickaction":"",
"selectorconfig":"",
"renderchunktpl":"",
"renderoptions":"",
"editor":""
},
{
"MIGX_id":4,
"header":"\u041f\u043e\u0434\u043f\u0438\u0441\u044c",
"dataIndex":"text",
"width":4,
"sortable":"false",
"show_in_grid":1,
"customrenderer":"",
"renderer":"",
"clickaction":"",
"selectorconfig":"",
"renderchunktpl":"",
"renderoptions":"",
"editor":"this.textEditor"
},
{
"MIGX_id":2,
"header":"\u041d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 (1 - 5 \u0448\u0442.)",
"dataIndex":"visible_in_slider",
"width":1,
"sortable":true,
"show_in_grid":1,
"customrenderer":"",
"renderer":"this.renderSwitchStatusOptions",
"clickaction":"switchOption",
"selectorconfig":"",
"renderchunktpl":"",
"renderoptions":[
{
"MIGX_id":3,
"name":"0",
"use_as_fallback":1,
"value":"0",
"clickaction":"switchOption",
"handler":"",
"image":"assets/img/icons/no.png"
},
{
"MIGX_id":1,
"name":1,
"use_as_fallback":"",
"value":1,
"clickaction":"switchOption",
"handler":"",
"image":"assets/img/icons/yes.png"
},
{
"MIGX_id":6,
"name":"0",
"use_as_fallback":"",
"value":"0",
"clickaction":"switchOption",
"handler":"",
"image":"assets/img/icons/no.png"
}
],
"editor":""
},
{
"MIGX_id":3,
"header":"\u0412 \u043e\u043a\u043d\u0435",
"dataIndex":"visible_on_page",
"width":1,
"sortable":true,
"show_in_grid":1,
"customrenderer":"",
"renderer":"this.renderSwitchStatusOptions",
"clickaction":"switchOption",
"selectorconfig":"",
"renderchunktpl":"",
"renderoptions":[
{
"MIGX_id":4,
"name":"0",
"use_as_fallback":1,
"value":"0",
"clickaction":"switchOption",
"handler":"",
"image":"assets/img/icons/no.png"
},
{
"MIGX_id":6,
"name":1,
"use_as_fallback":"",
"value":1,
"clickaction":"switchOption",
"handler":"",
"image":"assets/img/icons/yes.png"
},
{
"MIGX_id":7,
"name":"0",
"use_as_fallback":"",
"value":"0",
"clickaction":"switchOption",
"handler":"",
"image":"assets/img/icons/no.png"
}
],
"editor":""
}
],
"category":""
}
I don't think you can make this work with renderSwitchStatusOptions
. The problem is, that the render information (what picture to show etc.) is generated in PHP and stored in an extra field with the ending _ro
(e.g. visible_on_page_ro
). When you click "Save" in the update-window this information is lost.
You'd have to make an AJAX-call to get the current render information.
The easiest solution is probably to code a custom renderer with hard-coded render options.
- Create a file
grid.config.inc.php
incore/components/somepackagename/migxconfigs/grid
. - Add code for your custom renderer and handler function to this file. Something like this may work:
<?php
$my_img = '<a href="#" ><img class="controlBtn {3} {4} {5}" src="'.$base_url.'{0}" alt="{1}" title="{2}"></a>';
$renderer['this.myRenderSwitchStatusOptions'] = "
myRenderSwitchStatusOptions : function(val, md, rec, row, col, s) {
var column = this.getColumnModel().getColumnAt(col);
var renderImage, altText, handler, classname;
if (val == '1'){
renderImage = 'assets/img/icons/yes.png';
altText = 'yes';
} else {
renderImage = 'assets/img/icons/no.png';
altText = 'no';
}
handler = 'this.myHandleColumnSwitch';
classname = '';
return String.format('{$my_img}', renderImage, altText, altText, classname, handler, column.dataIndex);
}
";
$gridfunctions['this.myHandleColumnSwitch'] = "
myHandleColumnSwitch: function(n,e,col) {
this.selected_records = this.getSelectionModel().getSelections();
var old_val = this.selected_records[0].get(col);
var new_val;
if (old_val == '1'){
new_val = '';
} else {
new_val = '1';
}
this.updateSelected({dataIndex: col}, new_val);
}
";
?>
- In your config in the tab "MIGXdb-Settings" set the field "Package" to
somepackagename
. - In the tab "Columns" select your custom renderer ("this.myRenderSwitchStatusOptions") from the list.
- In the tab "Handlers" check the checkbox for the custom handler "this.myHandleColumnSwitch".