FCLT#36178 Layout scaffolding sturen door velden te groeperen

svn path=/Website/trunk/; revision=35694
This commit is contained in:
Erik Groener
2017-10-13 12:16:52 +00:00
parent 5518f10cf6
commit 0c8d0dd58e
4 changed files with 191 additions and 79 deletions

View File

@@ -446,7 +446,7 @@ function scf_RWFIELDTR(model, fld, val, key, params)
+ (foreign.extravalue ? ", " + foreign.extravalue : "")
+ " FROM " + foreign.tbl + " " + (foreign.alias||"")
+ (foreign.where?" WHERE " + foreign.where:"")
+ " ORDER BY 2";
+ " ORDER BY " + (foreign.order ? foreign.order : "2");
var emptyOption = "";
if (!params.search)
{
@@ -460,14 +460,15 @@ function scf_RWFIELDTR(model, fld, val, key, params)
{ // dereference
val = val.id;
}
var canmultiadd = fld == params.multiadd && !(key > 0);
var canmultiadd = (fld == params.multiadd && !(key > 0)); // || foreign.multiselect;
FCLTselector(fld, sql, { label: field.label,
initKey: val||null,
initKey: (val==0 || val ? val : null), // een key=0 moet ook kunnen!
emptyOption: canmultiadd?null:emptyOption,
emptyKey: (field.typ=="key"?-1:""),
readonly: (foreign.readonly?foreign.readonly:false),
required: params.required,
multi: canmultiadd,
multi: canmultiadd || params.multiselect,
size: 5,
whenEmpty: params.search ? L("lcl_search_generic") : null,
extraParamValue: (foreign.extravalue ? foreign.extravalue : null)

View File

@@ -157,7 +157,7 @@ function scaffolding_edit(model, scf_params)
api2.setfieldlengths(model); // max lengtes bepalen
if ("hook_pre_edit" in model && !multi)
model.hook_pre_edit(xxx_data, model.fields);
model.hook_pre_edit(xxx_data, model.fields, scf_params);
var modal = multi || model.edit.modal || scf_params.edit && scf_params.edit.modal; // dan doen we een detailrecord altijd modal
if (key < 0 && scf_params.edit && scf_params.edit.addmodal)
@@ -363,14 +363,18 @@ function scaffolding_edit(model, scf_params)
Response.Write("<input type='hidden' name='scf_multi' value='1'>");
Response.Write("<input type='hidden' name='scf_multi_id' value='" + keys.join(",") + "'>");
}
var fld_arr = [];
// Maak een lijst met alle velden die getoond moeten worden.
// Hidden velden en velden die niet multi-editable zijn (meerdere records tegelijk wijzigen)
// worden eruit gefilterd.
var fld_arr_all = [];
for (var fld in model.fields)
{
var field = model.fields[fld];
if (field.sql)
{
if (field.sqlshow) // toch tonen, ook al is hij readonly
fld_arr.push(fld);
fld_arr_all.push(fld);
continue; // weinig aan te bewerken
}
@@ -384,59 +388,108 @@ function scaffolding_edit(model, scf_params)
{ // Eerst de hidden velden.
scf_RWHIDDENTR(model, fld, xxx_data[fld]);
if (field.showtransit) // toch tonen, ook al is hij readonly
fld_arr.push(fld);
fld_arr_all.push(fld);
}
else
{
fld_arr.push(fld);
fld_arr_all.push(fld);
}
}
// Sorteer de velden volgens gegeven layout.
var col_id = "scf_info";
var col_1_length = fld_arr.length;
if (scf_params.multicolumn)
var scf_layout = scf_params.layout || [];
var hasmulticolumn = false;
var fld_arr_layout = [];
if (!scf_params.layout && scf_params.multicolumn)
{
col_id = "scfInfo";
col_1_length = ( ((fld_arr.length % 2)==0) ? (fld_arr.length/2) : ((fld_arr.length+1)/2) );
}
var i = 0;
BLOCK_START(col_id, model.record_title);
if (multi)
Response.Write("<thead><tr><th class='multi_cb'>" + L("lcl_change") + "</th></tr></thead>");
var multiadd = scf_params.incsetting && scf_params.incsetting.multiadd; // Dan kunnen we meerdere toevoegen
while (i < col_1_length)
{
var fld = fld_arr[i];
var field = model.fields[fld];
if (field.readonly || fld == "id")
scf_ROFIELDTR(model, fld, xxx_data[fld]);
else if (field.insertonly && key > 0)
scf_ROFIELDTR(model, fld, xxx_data[fld]);
else if (!field.hidden_fld)
scf_RWFIELDTR(model, fld, xxx_data[fld], key, { multiadd: multiadd });
i++;
}
BLOCK_END();
if (scf_params.multicolumn)
{
BLOCK_START("scfInfo_F", model.record_title);
while (i < fld_arr.length)
// Geen layout opgegeven, maar wel in twee kolommen tonen.
// Neem de eerste helft van alle velden en doe alsof het uit de layout komt.
hasmulticolumn = (fld_arr_all.length > 1);
var col_1_length = ( ((fld_arr_all.length % 2)==0) ? (fld_arr_all.length/2) : ((fld_arr_all.length+1)/2) );
var i = 0;
while (i < col_1_length)
{
var fld = fld_arr[i];
var field = model.fields[fld];
if (field.readonly || fld == "id")
scf_ROFIELDTR(model, fld, xxx_data[fld]);
else if (field.insertonly && key > 0)
scf_ROFIELDTR(model, fld, xxx_data[fld]);
else if (!field.hidden_fld)
scf_RWFIELDTR(model, fld, xxx_data[fld], key, { multiadd: multiadd });
var fld = fld_arr_all[i];
fld_arr_layout.push(fld);
i++;
}
var layout_rest = {
"block": "scfblockleft",
"extraclass": "scfleft",
"label": model.record_title,
"ishtmlsafe": true,
"hidden": false,
"buttons": [],
"fields": fld_arr_layout
}
scf_layout.push(layout_rest);
}
else
{
// Maak een lijst met velden die in het layout ontwerp van de asp worden gebruikt.
for (var blk in scf_params.layout)
{
var blk_obj = scf_params.layout[blk];
for (var fld_nr in blk_obj.fields)
{
var fld = blk_obj.fields[fld_nr];
if (!inArray(fld, fld_arr_layout))
fld_arr_layout.push(fld);
}
}
}
// Maak een lijst met velden die niet in het layout ontwerp van de asp zitten.
// Deze komen in een standaard blok.
var fld_arr_rest = [];
for (var i=0 ; i<fld_arr_all.length;i++)
{
if (!inArray(fld_arr_all[i], fld_arr_layout) && fld_arr_all[i] != "id")
fld_arr_rest.push(fld_arr_all[i]);
}
//
// De te gebruiken layout bevat nu de gedefinieerde blokken plus een blok met overige velden.
if (fld_arr_rest.length)
{
var layout_rest = {
"block": (hasmulticolumn ? "scfblockright" : "scfrest"),
"extraclass": (hasmulticolumn ? "scfright" : "scffullwidth"),
"label": model.record_title,
"ishtmlsafe": true,
"hidden": false,
"buttons": [],
"fields": fld_arr_rest
}
scf_layout.push(layout_rest);
}
//
// Sorteer de velden volgens gegeven layout.
for (var blk in scf_layout)
{
var blk_obj = scf_layout[blk];
var blk_params = { extraclass: (blk_obj.extraclass ? blk_obj.extraclass : ""),
ishtmlsafe: blk_obj.ishtmlsafe,
hidden: blk_obj.hidden,
buttons: blk_obj.buttons
};
BLOCK_START(blk_obj.block, blk_obj.label, blk_params);
if (multi)
Response.Write("<thead><tr><th class='multi_cb'>" + L("lcl_change") + "</th></tr></thead>");
var multiadd = scf_params.incsetting && scf_params.incsetting.multiadd; // Dan kunnen we meerdere toevoegen
for (var fld_nr in blk_obj.fields)
{
var fld = blk_obj.fields[fld_nr];
if (inArray(fld, fld_arr_all))
{
var field = model.fields[fld];
var multiselect = (field.foreign ? field.foreign.multiselect : false);
if (field.readonly || fld == "id")
scf_ROFIELDTR(model, fld, xxx_data[fld]);
else if (field.insertonly && key > 0)
scf_ROFIELDTR(model, fld, xxx_data[fld]);
else if (!field.hidden_fld)
scf_RWFIELDTR(model, fld, xxx_data[fld], key, { multiadd: multiadd, multiselect: multiselect });
}
}
BLOCK_END();
}

View File

@@ -145,6 +145,8 @@ function scaffolding_show(model, scf_params)
oRs.Close();
}
if ("hook_pre_show" in model)
model.hook_pre_show(xxx_data, model.fields, scf_params);
%>
<html>
@@ -266,46 +268,100 @@ function scaffolding_show(model, scf_params)
<div id="show">
<form name="u2" onSubmit="return false;">
<%
var fld_arr = [];
var fld_arr_all = [];
for (var fld in model.fields)
{
var field = model.fields[fld];
if (!field.hidden_fld)
fld_arr.push(fld);
fld_arr_all.push(fld);
}
var col_id = "scf_info";
var col_1_length = fld_arr.length;
if (scf_params.multicolumn)
var scf_layout = scf_params.layout || [];
var hasmulticolumn = false;
var fld_arr_layout = [];
if (!scf_params.layout && scf_params.multicolumn)
{
col_id = "scfInfo";
col_1_length = ( ((fld_arr.length % 2)==0) ? (fld_arr.length/2) : ((fld_arr.length+1)/2) );
}
var i = 0;
BLOCK_START(col_id, model.record_title);
while (i < col_1_length)
{
var fld = fld_arr[i];
scf_ROFIELDTR(model, fld, xxx_data[fld], key);
i++;
}
BLOCK_END();
if (scf_params.multicolumn)
{
BLOCK_START("scfInfo_F", model.record_title);
while (i < fld_arr.length)
// Geen layout opgegeven, maar wel in twee kolommen tonen.
// Neem de eerste helft van alle velden en doe alsof het uit de layout komt.
hasmulticolumn = (fld_arr_all.length > 1);
var col_1_length = ( ((fld_arr_all.length % 2)==0) ? (fld_arr_all.length/2) : ((fld_arr_all.length+1)/2) );
var i = 0;
while (i < col_1_length)
{
var fld = fld_arr[i];
scf_ROFIELDTR(model, fld, xxx_data[fld], key);
var fld = fld_arr_all[i];
fld_arr_layout.push(fld);
i++;
}
var layout_rest = {
"block": "scfblockleft",
"extraclass": "scfleft",
"label": model.record_title,
"ishtmlsafe": true,
"hidden": false,
"buttons": [],
"fields": fld_arr_layout
}
scf_layout.push(layout_rest);
}
else
{
// Maak een lijst met velden die in het layout ontwerp van de asp worden gebruikt.
for (var blk in scf_params.layout)
{
var blk_obj = scf_params.layout[blk];
for (var fld_nr in blk_obj.fields)
{
var fld = blk_obj.fields[fld_nr];
if (!inArray(fld, fld_arr_layout))
fld_arr_layout.push(fld);
}
}
}
// Maak een lijst met velden die niet in het layout ontwerp van de asp zitten.
// Deze komen in een standaard blok.
var fld_arr_rest = [];
for (var i=0 ; i<fld_arr_all.length;i++)
{
if (!inArray(fld_arr_all[i], fld_arr_layout) && fld_arr_all[i] != "id")
fld_arr_rest.push(fld_arr_all[i]);
}
//
// De te gebruiken layout bevat nu de gedefinieerde blokken plus een blok met overige velden.
if (fld_arr_rest.length)
{
var layout_rest = {
"block": (hasmulticolumn ? "scfblockright" : "scfrest"),
"extraclass": (hasmulticolumn ? "scfright" : "scffullwidth"),
"label": model.record_title,
"ishtmlsafe": true,
"hidden": false,
"buttons": [],
"fields": fld_arr_rest
}
scf_layout.push(layout_rest);
}
//
// Sorteer de velden volgens gegeven layout.
for (var blk in scf_layout)
{
var blk_obj = scf_layout[blk];
var blk_params = { extraclass: (blk_obj.extraclass ? blk_obj.extraclass : ""),
ishtmlsafe: blk_obj.ishtmlsafe,
hidden: blk_obj.hidden,
buttons: blk_obj.buttons
};
BLOCK_START(blk_obj.block, blk_obj.label, blk_params);
for (var fld_nr in blk_obj.fields)
{
var fld = blk_obj.fields[fld_nr];
if (inArray(fld, fld_arr_all))
{
var field = model.fields[fld];
scf_ROFIELDTR(model, fld, xxx_data[fld], key);
}
}
BLOCK_END();
}
%>
</form>
</div>

View File

@@ -121,8 +121,10 @@ function BLOCK_START(id, title, params) {
__blockactive__ = true;
if (!params.ishtmlsafe && title && title != "&nbsp;") var safe_title = safe.html(title);
var blockclass = "fcltblock" + (params.extraclass ? " "+params.extraclass : "");
%><!-- BLOCK_START <%=id%> -->
<div id="<%=id%>" class="fcltblock" <%=params.hidden? ' style="display:none"' : ''%>>
<div id="<%=id%>" class="<%=blockclass%>" <%=params.hidden? ' style="display:none"' : ''%>>
<div class="fcltblockhead"><%=(safe_title || title)%>
<%
if (params.buttons && params.buttons.length)