I have two custom tables, one for players and another for the honours they have achieved in a club. I am trying to use a list box using a field from the players table with a list of players to select the one I want to use to create a record in the honours table. I have a script in the resource that limits which players can be selected for which honour depending upon the player’s gender.
I am using formit and migxloopcollection as a select tool. However, when I try to create an honours record the name does not get selected, a 0 is input into the playername field.
The migxloopcollection select tplOption was suggested by halftrainedharry some months ago in another topic.
The resource code is.
[[!FormIt?
&hooks=`formit2db,redirect`
&preHooks=`db2formit`
&prefix=`agc_`
&packagename=`honours`
&classname=`honposition`
&tablename=`positionagc`
&redirectTo=`5`
&store=`1`
&validate=`nospam:blank,
playername:required,
position:required,
yearwhen:required`
]]
<h2>Add Position Form</h2>
[[!+fi.successMessage]]
[[!+fi.validation_error_message:notempty=`<p>[[!+fi.validation_error_message]]</p>`]]
<form name="positiondet" action="[[~[[*id]]]]" method="post" class="form">
<input type="hidden" name="nospam" value="" />
<select name="position" id="position" value="[[!+fi.position]]" onchange="showHonsForm()">
<option value="0">Select position...</option>
<option value="1" [[!+fi.position:FormItIsSelected=`Mens Captain`]]>Mens Captain</option>
<option value="2" [[!+fi.position:FormItIsSelected=`Ladies Captain`]]>Ladies Captain</option>
<option value="3" [[!+fi.position:FormItIsSelected=`President`]]>President</option>
<option value="4" [[!+fi.position:FormItIsSelected=`Vice President`]]>Vice President</option>
</select>
<div id="male" style="display:none">
<select name="playername" id="playername" value="[[!+fi.playername]]">
<option value="">Select member ...</option>
[[!migxLoopCollection?
&prefix=`agc_`
&usecustomprefix=`agc_`
&packageName=`honours`
&classname=`player`
&selectfields=`fullname,gender`
&tpl=`tplOption`
&sortConfig=`[{"sortby":"surname"}]`
&where=`{"gender":"1"}`
&selected=`[[!+fi.playername]]`
]]
</select>
</div>
<div id="female" style="display:none">
<select name="playername" id="playername" value="[[!+fi.playername]]">
<option value="">Select member ...</option>
[[!migxLoopCollection?
&prefix=`agc_`
&usecustomprefix=`agc_`
&packageName=`honours`
&classname=`player`
&selectfields=`fullname,gender`
&tpl=`tplOption`
&where=`{"gender":"2"}`
&selected=`[[!+fi.playername]]`
]]
</select>
</div>
<div id="bothgender" style="display:none">
<select name="playername" id="playername" value="selected">
<option value="0">Select member ...</option>
[[!migxLoopCollection?
&prefix=`agc_`
&usecustomprefix=`agc_`
&packageName=`honours`
&classname=`player`
&selectfields=`fullname,gender`
&tpl=`tplOption`
&selected=`[[!+fi.playername]]`
]]
</select>
</div>
<label for="yearwhen">
Year Captain:
<span class="error">[[!+fi.error.yearwhen]]</span>
</label>
<input style="width: 100px;" type="int" name="yearwhen" id="yearwhen" value="[[!+fi.yearwhen]]" />
<br class="clear" />
<div class="form-buttons">
<input type="submit" value="Enter captain details" />
</div>
</form>
<script type="text/javascript">
function showHonsForm() {
var selopt = document.getElementById("position").value;
if (selopt == 1) {
document.getElementById("male").style.display = "block";
document.getElementById("female").style.display = "none";
document.getElementById("bothgender").style.display = "none";
}
if (selopt == 2) {
document.getElementById("female").style.display = "block";
document.getElementById("male").style.display = "none";
document.getElementById("bothgender").style.display = "none";
}
if (selopt == 3||selopt == 4) {
document.getElementById("bothgender").style.display = "block";
document.getElementById("male").style.display = "none";
document.getElementById("female").style.display = "none";
}
if (selopt == "0") {
document.getElementById("male").style.display = "none";
document.getElementById("female").style.display = "none";
document.getElementById("bothgender").style.display = "none";
}
}
</script>
The tplOption is:
<option value="[[+fullname]]" [[+fullname:eq=`[[+property.selected]]`:then=` selected="[[+fullname]]"`]]>[[+fullname]]</option>
and the schema is:
<?xml version="1.0" encoding="UTF-8"?>
<model package="honours" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1">
<object class="player" table="playerdetails" extends="xPDOSimpleObject">
<field key="timeset" dbtype="varchar" phptype="string" precision="25" null="false" default="" />
<field key="title" dbtype="varchar" phptype="string" precision="10" null="false" default="" />
<field key="initial1" dbtype="varchar" phptype="string" precision="10" null="false" default="" />
<field key="initial2" dbtype="varchar" phptype="string" precision="10" null="false" default="" />
<field key="initial3" dbtype="varchar" phptype="string" precision="10" null="false" default="" />
<field key="surname" dbtype="varchar" phptype="string" precision="100" null="false" default="" />
<field key="fullname" dbtype="varchar" phptype="string" precision="50" null="false" default="" />
<field key="gender" dbtype="int" phptype="string" precision="1" null="false" default="" />
<composite alias="captain" class="captain" local="fullname" foreign="playername" cardinality="many"
owner="local"/>
</object>
<object class="honposition" table="positionagc" extends="xPDOSimpleObject">
<field key="playername" dbtype="varchar" phptype="string" precision="100" null="false" default="" />
<field key="position" dbtype="int" phptype="string" precision="1" null="false" default="" />
<field key="yearwhen" dbtype="int" phptype="integer" precision="10" null="false" default="0" />
<aggregate alias="player" class="player" local="playername" foreign="fullname" cardinality="one" owner="foreign" />
</object>
<object class="competition" table="competitionagc" extends="xPDOSimpleObject">
<field key="compname" dbtype="varchar" phptype="string" precision="100" null="false" default="" />
<field key="comptype" dbtype="int" phptype="string" precision="1" null="false" default="" />
<field key="compdesc" dbtype="text" phptype="string" precision="500" null="false" default="0" />
</object>
</model>
I cannot understand why a 0 is entered into the playername field instead of the “fullname” from the player table