Silverstripe: Как вставить код Google Analytics (или любой другой код) в самом конце html-хидера?

Метки: , , ,

По умолчанию, у Silverstripe CMS нет никаких средств для того, чтобы поместить javascript-код в самом конце хтмл-хидера (непосредственно перед закрывающим тегом "</head>"). Я столкнулся с этим сегодня, так как хотел вставить туда код Google Analytics. Конечно, я знаю, что, технически, можно поставить этот код в любое место страницы, но у меня были проблемы со статистикой и я хотел быть уверен, что я сделал всё так, как написано в документации у Гугла.

Вы, несомненно, знаете где получить код Google Analytics. Но я, на всякий случай, напомню последовательность действий для его получения:

  1. Идём на страницу где перечислены сайты, по которым вы получаете статистику: https://www.google.com/analytics/settings/
  2. Переходим по ссылке «Изменить» ("Edit") на страницу настроек нужного вам сайта
  3. Жмём на ссылку «Проверить статус» ("Check Status") и попадаем на страницу с кодом отслеживания откуда его и копируем

С помощью нижеприведённого отрывка кода, вы сможете поместить любой свой код в секцию html-заголовка очень близко к закрывающему тегу. Этот код делает свою работу на одной из поздних стадий выполнения, поэтому, шансы, что что-то допишется после вас очень малы:

mysite/code/Page.php:

class Page_Controller extends ContentController {
/* othere methods were skipped */

public function getViewer($action) {
Requirements::insertHeadTags(<<<EOF
<script type="text/javascript">
alert('Put your code here!');
</script>
EOF
);
return parent::getViewer($action);
}
}

То есть, я просто переопределил Controller::getViewer() в моём Page_Controller и сделал своё дело как-раз перед вызовом родительского метода.

С другой стороны, если для вас не принципиально будет ли ваш код в непосредственной близости от закрывающего тега "</head>", то можете воспользоваться официальными средствами для управления джава-скриптами в Silverstripe CMS:

// Page::init()
Requirements::customScript('alert("Put your code here!")');

Также, если вам нужно прикрепить к странице javascript-файл, то этот код может помочь:

// Page::init()
// Путь к файлу задаётся относительно корня сайта:
Requirements::javascript('mysite/javascript/script.js');

# загрузить javascript-файл из папки текущей темы
Requirements::javascript('themes/' . SSViewer::current_theme() . '/javascript/script.js');

Три последние строчки из предыдущих примеров поместят javascript-код в тело html-документа. Класс Requirements ведёт себя так по-умолчанию. Чтобы ваш джава-скрипт размещался где-то в пределах секции head, нужно выполнить этот код:

Requirements::set_write_js_to_body(false); 

Думаю, мудро будет поместить его в mysite/_config.php


13 February 2011

Оставить комментарий

Комментарии

На этой странице еще нет комментариев.

Комментарии по RSS для этой страницы | RSS лента всех комментариев


Баннерная реклама