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 {
    /* інші методи проігноровано для стислості */
    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 Февраль 2011

Комментарии (заморожены на какое-то время)

  • @Дмитрий: ніяк, пишіть метод у контроллері, наприклад, у вашому mysite/code/Page.php (class Page_Controller), видавайте звідти дані, та посилайтеся на ці дані у шаблоні (наприклад, так: $PageComments).

    Автор Артем, 30/04/2015 7:13pm (5 лет назад)

  • А как вставить php код в саму страницу?

    Автор Дмитрий, 29/04/2015 12:37pm (5 лет назад)


Интернет реклама