You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Joomla 4中RSForm!Pro预填充用户手机号的查询脚本问题

Joomla RSForm!Pro预填充Event Booking用户手机号解决方案

我在Joomla网站的RSForm!Pro表单中,需要预填充已注册用户在Ossolution Team开发的Event Booking扩展里填写的信息。RSForm!Pro支持表单加载时通过脚本预填充字段,我已实现可正常获取用户姓氏的脚本:

$user = JFactory::getUser();
$db = JFactory::getDbo();
$userId = $user->get('id');

// 用户是否已登录?
if ($userId) { 
// 从数据库获取值
$db->setQuery("SELECT `last_name` FROM `#__eb_registrants` WHERE `user_id`='".$userId."'"); 
return $db->loadResult();
}

该脚本可正常工作,因为用户姓氏存储在#__eb_registrants表中,表内的user_id是Joomla核心分配的用户ID,可直接匹配登录用户。

接下来我尝试预填充用户手机号,手机号存储在#__eb_field_values表中,对应field_id为17,但编写的脚本无法返回结果:

$user = JFactory::getUser();
$db = JFactory::getDbo();
$userId = $user->get('id');

// 用户是否已登录?
if ($userId) {
    // 从数据库获取值
    $db->setQuery("SELECT * FROM `#__eb_field_values` WHERE `registrant_id`='" . $userId . "' AND `field_id` = '17'");
    return $db->loadResult();
}

排查后发现问题:#__eb_field_values表使用的是Event Booking分配的registrant_id,而非Joomla核心的user_id。因此需要先通过user_id在#__eb_registrants表中找到对应的registrant_id,再用该ID从#__eb_field_values表获取手机号。

最终可用的脚本如下:

$user = JFactory::getUser();
$db = JFactory::getDbo();
$userId = $user->get('id');

// 用户是否已登录?
if ($userId) {
// 从数据库获取值
$db->setQuery("SELECT field_value FROM #__eb_registrants AS R
              JOIN #__eb_field_values AS FV ON R.id = FV.registrant_id
              WHERE R.user_id = " . $userId . "
              AND FV.field_id = '17'");

return $db->loadResult();
}

内容的提问来源于stack exchange,提问作者FirstClassSteve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:25:57