Add One Bool Field to Player Extra Field

85 篇文章 0 订阅
62 篇文章 0 订阅

這次的問題之所以有點麻煩,是因為extra field是一個在預料不到系統會做什麽擴展的情況下預留的擴展能力,而它必然有局限性。局限性的體現就是,jos_bl_extra_values表只能將這個值存放為字符類型數據。


實際上,在處理這部份問題時,我採用的做法是將三個表聯合:jos_bl_playersjos_bl_extra_fildsjos_bl_extra_values。在jos_bl_extra_values中存放的正是前兩個表聯合后的值,它有兩個外鍵,分別是前兩者的主鍵,而這個組合是jos_bl_extra_values自身的組合主鍵。


在函數BL_PlayerEdit()中,當對數據進行查找時,SQL里用到的是LEFT JION:

SELECT ef.*,ev.fvalue as fvalue FROM #__bl_extra_filds as ef LEFT JOIN #__bl_extra_values as ev ON ef.id=ev.f_id AND ev.uid=?  WHERE ef.published=1 AND ef.type='0' ORDER BY ef.ordering

這樣做的好處是,不需要在jos_bl_extra_values中為每個可能的組合都存儲一個記錄,而同時,在需要編輯球員時,又可以呈現出所有與該球員有關的額外參數。在這裡type字段被我用來標記是與球員有關的參數。


後臺:


現在的問題是,我們需要的是一個布爾類型,它在HTML里應該是一個check box。所以看來我們需要用e_table_show字段來標記布爾這種情況,同時在前端要用Javascript作一點小伎倆:


add-new-extra-field


bl_editPlayer()中原本輸出這幾欄的代碼改成:


<?php
for($p=0;$p<count($lists['ext_fields']);$p++){

	if("1"==$lists['ext_fields'][$p]->e_table_view)
	{
?>

<tr>
	<td width="100">
		<?php echo $lists['ext_fields'][$p]->name;?>
	</td>
	<td>
		<input type="checkbox" id="extra-field-check" value="" <?php echo (isset($lists['ext_fields'][$p]->fvalue))&&("1"==$lists['ext_fields'][$p]->fvalue)?"checked='checked'":""?>/>

		<input type="hidden" name="extraf[]" id="extra-field-hidden" value="<?php echo $lists['ext_fields'][$p]->fvalue?>" />
		<input type="hidden" name="extra_id[]" value="<?php echo $lists['ext_fields'][$p]->id?>" />
	</td>
</tr>

<?php
	}


	else
	{



?>
<tr>
	<td width="100">
		<?php echo $lists['ext_fields'][$p]->name;?>
	</td>
	<td>
		<input type="text" maxlength="255" size="60" name="extraf[]" value="<?php echo isset($lists['ext_fields'][$p]->fvalue)?htmlspecialchars($lists['ext_fields'][$p]->fvalue):""?>" />
		<input type="hidden" name="extra_id[]" value="<?php echo $lists['ext_fields'][$p]->id?>" />
	</td>
</tr>
<?php
	}
}
?>

同時,在js中的submitbutton函數修改成:


function submitbutton(pressbutton) {
	var form = document.adminForm;
	 if(pressbutton == 'player_apply' || pressbutton == 'player_save'){
		if(form.first_name.value == '' || form.last_name.value == ''){
			alert('<?php echo JText::_( 'BLBE_JSNOTICEPL' ); ?>');
		}else if(form.team_id.value == 0){
			alert('<?php echo JText::_( 'BLBE_SELTEAM' ); ?>');
		}else{

			// add by Vin 2012-07-21
			if(getObj('extra-field-check').checked)
			{
				getObj('extra-field-hidden').value = '1';
			}
			else
			{
				getObj('extra-field-hidden').value = '0';
			}
			//
			submitform( pressbutton );
			return;
		}
	 }else{
		submitform( pressbutton );
			return;
	 }
}


注意,在此之前,需要在這個函數的前面先調用:


joomsport_html::JS_getObj();

這樣的目的是將getObj()函數的js定義輸出到頁面中,實際上這個部份的js代碼是爲了瀏覽器兼容。



至於獲取和存取這些額外參數值到數據庫的PHP代碼,無需修改。


前臺:


下面是修改前端網站輸出,在視圖【罰牌記錄】中,在view.html.php文件中接近末尾的地方將一個代碼塊修改成:

foreach($panelty as $rec)
{
	$rec->yellow_card = intval($rec->yellow_card);
	$rec->red_card = intval($rec->red_card);
	$rec->disci = intval($rec->disci);
	$rec->overall = intval($st_name["red_disci_point"]) * $rec->red_card
					+ intval($st_name["yellow_disci_point"]) * $rec->yellow_card
					+ $rec->disci;

	$query = "SELECT fvalue FROM #__bl_extra_values WHERE f_id = 2 AND uid =".$rec->player_id;
	$db->setQuery($query);
	$remark = $db->loadResult();

	$rec->remark = $remark;

	// add by Vin 2012-07-21
	$query = "SELECT fvalue FROM #__bl_extra_values WHERE f_id = 4 AND uid =".$rec->player_id;
	$db->setQuery($query);
	$if_hgl_remark = $db->loadResult();

	$rec->if_hgl_remark = ($if_hgl_remark === "1")?true:false;
	// ends add

	$pan_marr[] = (array)$rec;
}


然後將模板文件tmpl/default.php修改:


$red_font = "";
if($record['if_hgl_remark'])
{
	$red_font = "class='vincent_red_font' ";
}
echo "<td ".$red_font.">" . $record['remark'] . "</td>";

echo "</tr>";



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值