私は2つのフィールド(id、points)を持つデータベースにポイントテーブルを追加するだけのカスタムjoomlaコンポーネントに取り組んでいます... idは主キーであり、ユーザーjoomlaユーザーIDと同じになるように設定しようとしています..。。
ユーザーのポイント数を返す関数と、ユーザーのポイントを特定の値に更新する関数が必要です...最初の関数を正常に作成しました。
getUserPoints()
特定のユーザーのポイント数を返します...次に、次の2番目の更新関数を開始しました。
updateUserPoints()
これは現在「一貫性がない」部分であり、私は間違っていると思います...現在のユーザーのポイント値を更新する単純な関数を作成しようとしています...また、私はしようとしていましたそれらのレコードがない場合のケースを処理します...次にレコードを作成します!....これを行うには、updateUserPoints()関数内に次の関数を作成します。
newUserCheck()
ユーザーにポイントがあるかどうかを確認してから、trueまたはfalseと応答することになっています。
$db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
$db->query();
$points = $db->loadResult();
if($points){
return false;
} else {
return true;
}
次に、更新して新しいレコードを作成するか、既存のレコードを更新します...このコードはほぼ機能しています!... 3つのテストで機能しました...ただし、2番目のユーザーを追加すると、少し一貫性がなくなるようです。 。新しいユーザーが正常に作成され、5ポイントが付与されます。次に、もう一度実行して更新すると、「ポイントが更新されました」と表示されますが、データベースのポイント値が実際に更新されていないようです。
既存のユーザーが1人またはいない場合は、正常に機能しているようです。とにかく...提案を受け入れます...私はここで間違っていることがたくさんあると確信していますが、それを正しく機能させたいです!あなたがおそらく言うことができるように、私はMVCプログラミングに不慣れです:P
これがjoomlaコントローラー全体です:
<?php defined('_JEXEC') or die('');
// userprofilepoints CONTROLLER
jimport('joomla.application.component.controller');
jimport('joomla.user.helper');
class userprofilepointsController extends JController {
function getUserPoints(){
$values = JRequest::get("post");
$userIdNumber = $values['userIdNumber'];
$user = & JFactory::getUser();
$db = JFactory::getDBO();
$db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
$db->query();
$points = $db->loadResult();
echo $points;
}
function updateUserPoints(){
function newUserCheck(){
$values = JRequest::get("post");
$userIdNumber = $values['userIdNumber'];
$user = & JFactory::getUser();
$db = JFactory::getDBO();
$db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
$db->query();
$points = $db->loadResult();
if($points){
return false;
} else {
return true;
}
}
if(newUserCheck() == false){
$values = JRequest::get("post");
$userIdNumber = $values['userIdNumber'];
$newPointsAmount = $values['newPointsAmount'];
$user = & JFactory::getUser();
$db = JFactory::getDBO();
$db->setQuery("UPDATE #__mytable SET points = '".$newPointsAmount."' WHERE id = '".$user->id."'");
$db->query();
//echo getUserPoints();
//$points = $db->loadResult();
echo "Points Updated";
} else if(newUserCheck() == true) {
$values = JRequest::get("post");
$userIdNumber = $values['userIdNumber'];
$user = & JFactory::getUser();
$db = JFactory::getDBO();
$db->setQuery("INSERT INTO #__mytable SET id = $user->id, points = 5");
$db->query();
echo "New User Created!";
}
}
}
そして最後に、ビューからの私のhtmlとjavascript!....ありがとう!!! :)
<?php defined('_JEXEC') or die();
// MAIN PAGE TEMPLATE
jimport('joomla.user.helper');
$user = & JFactory::getUser();
$profile = JUserHelper::getProfile($user->id);
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
$('#updateBTN').click(function(){
updateUserPoints();
});
function getUserPoints(){
//Post the following to the controller
$.post('http://www.mysite.com/index.php?format=raw&option=com_userprofilepoints&task=getUserPoints', {
userIdNumber: <?php echo $user->id; ?>
}, function(data) {
alert(data);
});
}
function updateUserPoints(){
//Post the following to the controller
$.post('http://www.mysite.com/index.php?format=raw&option=com_userprofilepoints&task=updateUserPoints', {
userIdNumber: <?php echo $user->id; ?>,
newPointsAmount: 555444 //random hardcoded points amount to test with
}, function(data) {
alert(data);
});
}
});
</script>
<div id="main_block">
<p>Points Page:</p>
<br />
<button id="updateBTN">Trigger Update</button>
</div>