babahalki
Постоялец
- Регистрация
- 6 Май 2016
- Сообщения
- 247
- Реакции
- 107
- Автор темы
- #1
Ребята, помогите. Не могу разобраться самостоятельно.
Задача такая, хочу сделать так, чтобы сотрудникам яндекса сайт выдавал цены, отличные от всех остальных людей. Узнал диапазон адресов яндекса, нашел функцию php, которая может проверять вхождение IP в диапазон. В php все супер - работает. Уже второй день пытаюсь заставить это все работать в simpla.
У меня есть функция php:
Я хочу эту функцию использовать в шаблоне product.tpl, чтобы выводить цену в зависимости от результата выполнения этой функции. Прочитал, что можно сделать через plugins к smarty, сделал файл в каталоге Smarty/libs/plugins
function.ip_in_range.php
Тренируюсь на боевом сайте, поэтому работаю в register.tpl
Пытаюсь вызывать - не выходит.
{ip_in_range ip="5.255.254.1" range="5.255.192.0/18"}
Код обновил, теперь все работает.
Теперь, когда у нас на сайте кто-то с айпишниками яндекса, у них одни цены, для остальных другие цены.
Задача такая, хочу сделать так, чтобы сотрудникам яндекса сайт выдавал цены, отличные от всех остальных людей. Узнал диапазон адресов яндекса, нашел функцию php, которая может проверять вхождение IP в диапазон. В php все супер - работает. Уже второй день пытаюсь заставить это все работать в simpla.
У меня есть функция php:
Код:
function ip_in_range( $ip, $range ) {
if ( strpos( $range, '/' ) == false ) {
$range .= '/32';
}
// $range is in IP/CIDR format eg 127.0.0.1/24
list( $range, $netmask ) = explode( '/', $range, 2 );
$range_decimal = ip2long( $range );
$ip_decimal = ip2long( $ip );
$wildcard_decimal = pow( 2, ( 32 - $netmask ) ) - 1;
$netmask_decimal = ~ $wildcard_decimal;
return ( ( $ip_decimal & $netmask_decimal ) == ( $range_decimal & $netmask_decimal ) );
}
Я хочу эту функцию использовать в шаблоне product.tpl, чтобы выводить цену в зависимости от результата выполнения этой функции. Прочитал, что можно сделать через plugins к smarty, сделал файл в каталоге Smarty/libs/plugins
function.ip_in_range.php
Код:
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File: function.ip_in_range.php
* Type: function
* Name: ip_in_range
* Purpose: check ip address in range
* -------------------------------------------------------------
*/
function smarty_function_ip_in_range( $params, &$smarty ) {
if ( strpos( $params['range'], '/' ) == false ) {
$params['range'] .= '/32';
}
// $params['range'] is in IP/CIDR format eg 127.0.0.1/24
list( $params['range'], $netmask ) = explode( '/', $params['range'], 2 );
$range_decimal = ip2long( $params['range'] );
$ip_decimal = ip2long( $params['ip'] );
$wildcard_decimal = pow( 2, ( 32 - $netmask ) ) - 1;
$netmask_decimal = ~ $wildcard_decimal;
return ( ( $ip_decimal & $netmask_decimal ) == ( $range_decimal & $netmask_decimal ) );
}
?>
Тренируюсь на боевом сайте, поэтому работаю в register.tpl
Пытаюсь вызывать - не выходит.
{ip_in_range ip="5.255.254.1" range="5.255.192.0/18"}
Код обновил, теперь все работает.
Теперь, когда у нас на сайте кто-то с айпишниками яндекса, у них одни цены, для остальных другие цены.
Последнее редактирование: