如何 prevent/disable 基于 geoip 数据的 <a href>
How to prevent/disable an <a href> based on geoip data
在 php 和 js 方面,我是一个绝对的初学者,并且一直在努力寻找满足以下要求的可行解决方案。
我有一个 Joomla 订阅扩展,带有一个使用 href 标签的 "subscribe" 按钮。
我想要实现的是,基于 geoip 位置,来自英国以外的浏览者被拒绝访问按钮点击操作,但给出一条消息解释原因。
到目前为止,我所能实现的只是一个禁用的按钮,它仍然可以点击...
到目前为止,我已经能够实现的一点点如下。真的希望有人能帮助我。
<?php
// Added Geo IP Location Tracking
$user_ip = getenv('REMOTE_ADDR');
// http://www.geoplugin.net/php.gp?ip=$user_ip
$geo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=$user_ip"));
$city = $geo["geoplugin_city"];
$region = $geo["geoplugin_regionName"];
$country = $geo["geoplugin_countryName"];
$countryCode = $geo["geoplugin_countryCode"];
}
?>
<?php
if ($countryCode == 'CH') {
echo "Unfortunately China is not covered by our service!"."<br>";
}
?>
<p><a class="btn btn-large btn-primary" <?php if ($countryCode == 'CH'){ ?> disabled <?php } ?> href="<?php echo JRoute::_('index.php?option=com_axisubs&view=subscribe&plan='.$item->slug); ?>">
<i class="icon-ok"></i>
<?php if ( $item->hasTrial() ) : ?>
<?php echo JText::_('COM_AXISUBS_START_TRIAL'); ?>
<?php else: ?>
<?php echo JText::_('COM_AXISUBS_SUBSCRIBE_NOW'); ?>
<?php endif; ?>
</a>
您不能将 links 设置为 "disabled" 这仅适用于输入、文本字段、按钮等表单元素。
你可以做的是添加一些 javascript 来防止 link 的默认操作:
<a class="btn btn-large btn-primary" <?= ($countryCode != 'CH')?'onclick="return false;"':'' ?> href="<?php echo JRoute::_('index.php?option=com_axisubs&view=subscribe&plan='.$item->slug); ?>">
通过使用此方法,您还可以在警告框中添加一条消息,例如当用户不在所需国家/地区时:
<a class="btn btn-large btn-primary" <?= ($countryCode != 'CH')?'onclick="alert(\'you are not in CH\');return false;"':'' ?> href="<?php echo JRoute::_('index.php?option=com_axisubs&view=subscribe&plan='.$item->slug); ?>">
如果您必须屏蔽多个国家代码,您可以这样做:
<a class="..." <?= (in_array($countryCode, ['CH', 'FR', 'UK', 'DE']))?'onclick="alert(\'you are not in an allowed country\');return false;"':'' ?> href="...">
您根本不应包含 link 以防止滥用您的服务。
$link = $countryCode == 'CH' ?
'href="#" onclick="return false;" disabled' :
'href="index.php?option=com_axisubs&view=subscribe&plan='.$item->slug.'"';
然后输出你的link标签
<a class="btn btn-large btn-primary" <?php echo $link ?>>
这样 link 在您的页面上不存在,虚拟 link 不可点击。
在 php 和 js 方面,我是一个绝对的初学者,并且一直在努力寻找满足以下要求的可行解决方案。
我有一个 Joomla 订阅扩展,带有一个使用 href 标签的 "subscribe" 按钮。
我想要实现的是,基于 geoip 位置,来自英国以外的浏览者被拒绝访问按钮点击操作,但给出一条消息解释原因。
到目前为止,我所能实现的只是一个禁用的按钮,它仍然可以点击...
到目前为止,我已经能够实现的一点点如下。真的希望有人能帮助我。
<?php
// Added Geo IP Location Tracking
$user_ip = getenv('REMOTE_ADDR');
// http://www.geoplugin.net/php.gp?ip=$user_ip
$geo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=$user_ip"));
$city = $geo["geoplugin_city"];
$region = $geo["geoplugin_regionName"];
$country = $geo["geoplugin_countryName"];
$countryCode = $geo["geoplugin_countryCode"];
}
?>
<?php
if ($countryCode == 'CH') {
echo "Unfortunately China is not covered by our service!"."<br>";
}
?>
<p><a class="btn btn-large btn-primary" <?php if ($countryCode == 'CH'){ ?> disabled <?php } ?> href="<?php echo JRoute::_('index.php?option=com_axisubs&view=subscribe&plan='.$item->slug); ?>">
<i class="icon-ok"></i>
<?php if ( $item->hasTrial() ) : ?>
<?php echo JText::_('COM_AXISUBS_START_TRIAL'); ?>
<?php else: ?>
<?php echo JText::_('COM_AXISUBS_SUBSCRIBE_NOW'); ?>
<?php endif; ?>
</a>
您不能将 links 设置为 "disabled" 这仅适用于输入、文本字段、按钮等表单元素。
你可以做的是添加一些 javascript 来防止 link 的默认操作:
<a class="btn btn-large btn-primary" <?= ($countryCode != 'CH')?'onclick="return false;"':'' ?> href="<?php echo JRoute::_('index.php?option=com_axisubs&view=subscribe&plan='.$item->slug); ?>">
通过使用此方法,您还可以在警告框中添加一条消息,例如当用户不在所需国家/地区时:
<a class="btn btn-large btn-primary" <?= ($countryCode != 'CH')?'onclick="alert(\'you are not in CH\');return false;"':'' ?> href="<?php echo JRoute::_('index.php?option=com_axisubs&view=subscribe&plan='.$item->slug); ?>">
如果您必须屏蔽多个国家代码,您可以这样做:
<a class="..." <?= (in_array($countryCode, ['CH', 'FR', 'UK', 'DE']))?'onclick="alert(\'you are not in an allowed country\');return false;"':'' ?> href="...">
您根本不应包含 link 以防止滥用您的服务。
$link = $countryCode == 'CH' ?
'href="#" onclick="return false;" disabled' :
'href="index.php?option=com_axisubs&view=subscribe&plan='.$item->slug.'"';
然后输出你的link标签
<a class="btn btn-large btn-primary" <?php echo $link ?>>
这样 link 在您的页面上不存在,虚拟 link 不可点击。