#php
#php
Вопрос:
У меня есть global.php файл, который я вызываю из верхней части каждого скрипта. Этот скрипт предназначен для размещения всей информации моего заголовка.
Проблема, которая возникает, заключается в том, что как только я помещаю код Google Analytics в global.php он больше не регистрирует данные в моем Google Analytics.
Вот global.php код:
<?php
/* this file needs to be included in every user-facing script that serves ads */
/* this will prevent "PHP Warning: Cannot modify header information - headers already sent.." */
ob_start();
/* this will make session cookie worl for both http://www.comehike.com and http://comehike.com
* session cookie lifetime is set to 2 hours
*/
session_set_cookie_params("7200", "/", ".comehike.com");
/* it is better to have session_start here rather then in every page
* session_start needs to be called before any headers sent to not trigger php warning */
session_start();
global $production;
$production = true;
/*============================== ad pacement utils ===============================*/
/*
* this helper module will simplify ads placement in production and simulate ads in development.
* It will allow to turn of the ads for the user with premium account.
*
* To use this module:
* in the head, where google site verification needs to be included, add the following
<?php
printGoogleSiteVerification();
?>
* in the page, where ads needs to be inserted, add the following lines (example):
<?php
printGoogleAdPlacement(7425893768, 250, 250, '10/11/10');
?>
*/
function printGoogleSiteVerification(){
global $production;
$str = '';
if($production===true){
$str.= '<meta name="google-site-verification" content="RJcu8ObHW6huUbyea336xJ1WgLiC4478fz3_3r_zthc" />'."n";
$str.= '<meta name="alexaVerifyID" content="-2hEyu8phk6CFHF-PTqdQvP2B8k" />'."n";
}
echo $str;
}
function hasPremium(){
return false;
/*
//this is a sample function to check is user has a premium account.
//in this example alex won't see any ads
if($_SESSION["user_id"]==='alex'){
return true;
}else{
return false;
}*/
}
//ex: printGoogleAdPlacement(7425893768, 728, 90, 10/11/10)
//ex: printGoogleAdPlacement(7425893768, 250, 250, 10/11/10)
//ex: printGoogleAdPlacement(7425893768, 200, 200, 10/11/10)
function printGoogleAdPlacement($google_ad_slot, $width, $height, $created){
global $production;
//user with premium won't see any ads.
//the question is what goes into the slots instead?
if(hasPremium() === true) {return;}
$str = '';
if($production === true){
$str.= '<script type="text/javascript"><!--'."n";
$str.= 'google_ad_client = "pub-1884332214318974";'."n";
$str.= '/* '.$width.'x'.$height.', created '.$created.' */'."n";
$str.= 'google_ad_slot = "'.$google_ad_slot.'";'."n";
$str.= 'google_ad_width = '.$width.';'."n";
$str.= 'google_ad_height = '.$height.';'."n";
$str.= '//-->'."n";
$str.= '</script>'."n";
$str.= '<script type="text/javascript"'."n";
$str.= 'src="http://pagead2.googlesyndication.com/pagead/show_ads.js">'."n";
$str.= '</script>'."n";
}else{
/*
$str .= '<div style="padding:0; height:'.($height 20).'px; width:'.$width.'px;border: 1px solid #888;background:#fff;">'.
'<div>Advertisement</div>'.
'<img src="images/fake_ads/ad_'.$width.'_'.$height.'.png"></img>'.
'</div>';
*/
$str = '<img src="images/fake_ads/ad_'.$width.'_'.$height.'.png"></img>';
}
$str = '<div style="padding:0; height:'.($height).'px; width:'.$width.'px;background:#fff;">'.
$str.
'</div>';
echo $str;
}
/* =============== end of ad placement utils =================== */
/* ===================== google anaytics ========================*/
function printGoogleAnalytics()
{
$str = '';
if($production === true)
{
$str.= '<script type="text/javascript">'."n";
$str.= '(function() {'."n";
$str.= ' var ga = document.createElement("script"); ga.type = "text/javascript"; ga.async = true;'."n";
$str.= ' ga.src = ("https:" == document.location.protocol ? "https://ssl" : "http://www") ".google-analytics.com/ga.js";'."n";
$str.= ' var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ga, s);'."n";
$str.= '})();'."n";
$str.= '</script>'."n";
}
echo $str;
}
/* ===================== end of google anaytics ========================*/
?>
Вот пример страницы, где это происходит:
http://www.comehike.com/outdoors/hiking_headlamp.php
Если я удалю код goog analitics из global.php и поместите его в заголовок как обычный html, это работает, потому что я могу видеть данные о посетителях. Если я помещу его в global.php файл, он не работает.
И вот функция, которую я пытаюсь вызвать из заголовка, который находится в global.php
Есть идеи, что здесь происходит не так? Если бы это была просто проблема с синтаксисом, она была бы гораздо более нарушенной, верно?
Комментарии:
1. когда ваша страница отобразится, посмотрите на исходный код для отладки
2. @Ibu вы имеете в виду исходный код html?
3. Да, исходный код html, посмотрите, правильно ли загружен код Google
4. @Ibu Хороший момент. К сожалению, он, кажется, правильно загружен.
5. Используйте firebug, чтобы проверить, загружен ли скрипт
google-analytics.com/ga.js
в head. посмотрите на DOM, которого нет в исходном коде html
Ответ №1:
Я просмотрел код и не вижу ничего неправильного, код правильно создает тег script и добавляет его в заголовок вашего документа.
Однако недавно у меня возникла похожая проблема при попытке проверить мою страницу в Google, чтобы найти их тег script. Мое первое решение было похоже на ваше, которое заключается в вставке кода непосредственно в html, однако это было не то, что я хотел, поскольку я хотел, чтобы он автоматически включался на все страницы, поэтому вот что я сделал вместо этого.
Переписывание кода на php, похоже, по какой-то причине нарушает его. таким образом, вместо того, чтобы переписывать строку за строкой, вы можете записать все это как одну строку, используя синтаксис HEREDOC:
$str =<<<GOOGLECODE
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'XX-XXXXXXX-XX']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement("script"); ga.type = "text/javascript"; ga.async = true;
ga.src = ("https:" == document.location.protocol ? "https://ssl" : "http://www") ".google-analytics.com/ga.js";
var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
GOOGLECODE;
Затем вы можете повторить свой $ str.
echo $str;
кроме того, поскольку вы используете выходной буфер, вы также можете использовать этот метод
function printGoogleAnalytics()
{
?>
<script type="text/javascript">
....
</script>
<?php
}
...
вызов скрипта выведет промежуточный HTML-код.
Я надеюсь, что это поможет решить вашу проблему
Комментарии:
1. Спасибо!! Вы мне совсем немного помогли.