Очень часто на форумах поддержки спрашивают как вставить счетчик, или жалуются что html-код выдает ошибку.

Ошибка появляется потому что в дизайне используется, так называемый, прямой вывод через echo "..."; или echo '....'; И каждый раз когда в вашем коде появляется кавычка, открывающая строку, php считает что вывод закончен, а дальше идет исполняемый код - в итоге ошибка.

Есть несколько путей решения проблемы:

1) экранировать:

echo "<!--LiveInternet counter--><script type="text/javascript">document. write("<img src='http://counter.yadro.ru/hit?r" + escape(document.referrer) + ((typeof(screen)==\"undefined\")?\"\":\";s\"+screen.width+\"*\"+screen.height+\"*\"+(screen.colorDepth?screen.colorDepth:screen.pixelDepth)) + \";u\" + escape(document.URL) +\";i\" + escape(\"Жж\"+document.title.substring(0,80)) + \";\" + Math.random() + "' width=1 height=1 alt=''>")</script><!--/LiveInternet-->";

экранирование делается добавлением слеша перед каждой кавычкой, если у вас сразу после echo идет двойная, то экранируем двойные, если одинарная, то одинарные. Где-нибудь ошиблись или пропустили - кирдык.

2) подбрать правильные кавычки, если в коде много двойных, брать всю строку в одинарные:

echo '<!--LiveInternet counter--><script type="text/javascript">document. write("<img src='http://counter.yadro.ru/hit?r" + escape(document.referrer) + ((typeof(screen)=="undefined")?"":";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?screen.colorDepth:screen.pixelDepth)) + ";u" + escape(document.URL) +";i" + escape("Жж"+document.title.substring(0,80)) + ";" + Math.random() + "' width=1 height=1 alt=''>")</script><!--/LiveInternet-->';

но экранировать все равно надо, где-нибудь пропустили - кирдык. При том что если вы вставляете например в панель, то вы можете выбрать внешние  кавычки для строки, но если вы вставляете в файл темы, то там как правило уже идет вывод, и приходится подстраиваться под него.

3) можно закрыть тег php поставить html-код и снова открыть тег

opentable('счетчики');
?>
<!--LiveInternet counter--><script type="text/javascript">document. write("<img src='http://counter.yadro.ru/hit?r" + escape(document.referrer) + ((typeof(screen)=="undefined")?"":";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?screen.colorDepth:screen.pixelDepth)) + ";u" + escape(document.URL) +";i" + escape("Жж"+document.title.substring(0,80)) + ";" + Math.random() + "' width=1 height=1 alt=''>")</script><!--/LiveInternet-->
<?
closetable();

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

4) есть еще один способ, подойдет тем, кто хочет положить в переменную произвольный html-код с различными кавычками, но не хочет заморачиваться с экранированием.

 

echo <<<HTML
<!--LiveInternet counter--><script type="text/javascript">document. write("<img src='http://counter.yadro.ru/hit?r" + escape(document.referrer) + ((typeof(screen)=="undefined")?"":";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?screen.colorDepth:screen.pixelDepth)) + ";u" + escape(document.URL) +";i" + escape("Жж"+document.title.substring(0,80)) + ";" + Math.random() + "' width=1 height=1 alt=''>")</script><!--/LiveInternet-->
HTML;
$a = <<<HTML
<!--LiveInternet counter--><script type="text/javascript">document. write("<img src='http://counter.yadro.ru/hit?r" + escape(document.referrer) + ((typeof(screen)=="undefined")?"":";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?screen.colorDepth:screen.pixelDepth)) + ";u" + escape(document.URL) +";i" + escape("Жж"+document.title.substring(0,80)) + ";" + Math.random() + "' width=1 height=1 alt=''>")</script><!--/LiveInternet-->
HTML;
my_function($a);

Здесь я привел пример как можно сразу код вывести и как можно его положить в переменную для дальнейшего использования. Таким способом можно все счетчики положить в переменные, а потом использовать с нужном месте верстки.
Важно! <<<HTML и HTML; должны находиться на отдельных строчках.

 

За что мне нравится этот способ:

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