Здравствуйте!
На сайте есть скрипт Я.Метрики с асинхронным кодом в файле .../xsltTpls/layouts/default.xsl:
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
var yaParams = {IP-address: "<?php echo $_SERVER['REMOTE_ADDR']; ?>"};
</script>
<script type="text/javascript">
(function (d, w, c) {
(w[c] = w[c] || []).push(function() {
try {
w.yaCounter******** = new Ya.Metrika({ id:********, webvisor:true, clickmap:true, trackLinks:true, accurateTrackBounce:true, params:window.yaParams||{ } });
}
catch(e) { }
});
var n = d.getElementsByTagName("script")[0],
s = d.createElement("script"),
f = function () {
n.parentNode.insertBefore(s, n);
};
s.type = "text/javascript";
s.async = true;
s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";
if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else { f(); }
})(document, window, "yandex_metrika_callbacks");
</script>
<noscript><div><img src="//mc.yandex.ru/watch/********" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
В этом коде прошу обратить внимание на следующий скрипт, и параметр:
<script type="text/javascript">
var yaParams = {IP-address: "<?php echo $_SERVER['REMOTE_ADDR']; ?>"};
</script>
params:window.yaParams||{ }
Так как Я.Метрика перестал выводить IP-адреса посетителей, приходится изощряться таким образом, чтобы при выявлении злостных вредителей сайта, добавить их IP в черный список.
Но скрипт + параметр (см. второй код) не выполняют свою функцию, т.е. IP-адреса так и не видны.
Может кто подскажет, как для тестирования выводить IP-адрес в .../xsltTpls/layouts/default.xsl через скрипт/php? А также, как правильно все сделать, чтобы IP-адреса посетителей выводились в Я.Метрике?
в custom.php пишем
public function getUserIp {
return $_SERVER['REMOTE_ADDR'];
}
в шаблоне
<script type="text/javascript">
var yaParams = {IP-address: "<xsl:value-of select="document('udata://custom/getUserIp')/udata" />"};
</script>
Была одна неточность в макросе - казалось бы мелочь - забыли скобки "()"
public function getUserIp() {
return $_SERVER['REMOTE_ADDR'];
}
Без этих скобок на сайте была ошибка в custom.php, в строке начала макроса. Надо что-то внутри скобок прописать или нет?
можно как-то так
public function getUserIp() {
//получаем HTTP_X_FORWARDED_FOR
$forward_ip = @getenv('HTTP_X_FORWARDED_FOR');
if(empty($forward_ip)){
$user_ip = @getenv('REMOTE_ADDR');
$proxy_ip = '';
} else{
$user_ip = $forward_ip;
$proxy_ip = @getenv('REMOTE_ADDR');
}
return $user_ip;
}