2017-02-23 119 views
-1

Я - абсолютный новичок, когда дело доходит до php и js, и тянуло мои волосы, пытаясь найти работоспособное решение для следующего требования.Как предотвратить/отключить <a href> на основе данных геоинформации

У меня есть расширение подписки Joomla с кнопкой «подписаться» с помощью тега href.

То, что я хотел бы достичь, основан на местоположении геоинформации, посетители, просматривающие из-за пределов Великобритании, лишены доступа к действию нажатия кнопки, но с сообщением, объясняющим почему.

До сих пор все, что я в состоянии достигнуть, кнопка отключена, которая до сих пор кликабельны ...

Маленький-бит я был в состоянии достигнуть до сих пор находится ниже. Надеюсь, кто-то может мне помочь.

<?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> 

ответ

1

Вы наклоняете набор ссылки на «Disabled» это работает только для элементов формы, таких как вход, TextField, кнопка и т.д.

Что вы можете сделать, это добавить некоторые JavaScript, чтобы предотвратить действие по умолчанию ссылки :

<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="..."> 
+0

Это великолепно! Как я могу заблокировать каждую страну, кроме Великобритании, а затем отобразить одно и то же сообщение. Спасибо Crozet – Wiggins

+0

спасибо за это предложение. Поле предупреждения полезно и фактически лучше, чем скрытие фактической кнопки. Может ли кто-то просто подтвердить, что мне нужно будет добавить каждый $ countryCode, чтобы блокировать их по одному за раз? – Wiggins

+0

Если у вас есть много стран для блокировки, было бы лучше заменить '$ countryCode == 'CH'' функцией' isBlocked() ', которая вернет true или false или' in_array ($ countryCode, $ blockedCountryCodes) ' где $ countryCode is '['CH', 'UK', 'DE']' (список заблокированных кодов стран) см. мое редактирование –

1

Вы не должны включать ссылку на все, чтобы предотвратить злоупотребления в вашей службе.

$link = $countryCode == 'CH' ? 'href="#" onclick="return false;" disabled' : 'href="index.php?option=com_axisubs&view=subscribe&plan='.$item->slug.'"';

и затем выводится ваша ссылка тег

<a class="btn btn-large btn-primary" <?php echo $link ?>>

Таким образом, ссылка не существует на вашей странице и фиктивная ссылка не кликабельна.

+0

Спасибо Starast. Я полностью согласен с вашим предложением скрыть ссылку и попробую ваше предложение. Большое спасибо! – Wiggins

+0

Добро пожаловать! –