FCLT#36178 Layout scaffolding sturen door velden te groeperen
svn path=/Website/trunk/; revision=35694
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -121,8 +121,10 @@ function BLOCK_START(id, title, params) {
|
||||
__blockactive__ = true;
|
||||
|
||||
if (!params.ishtmlsafe && title && title != " ") 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)
|
||||
|
||||
Reference in New Issue
Block a user