Как встроить скрипт Google Analytics (новая версия) в приложение на море - PullRequest
3 голосов
/ 18 января 2011

Я реализовал способ использования FileLibrary.

Тогда у меня есть следующий код:

updateRoot: anHtmlRoot

super updateRoot: anHtmlRoot.
anHtmlRoot title: self title.
anHtmlRoot link beShortcutIcon; url: MyfileLibrary  / #myGraphicPng.
anHtmlRoot javascript url: (MyFileLibrary urlOf: #analyticsJs)

Google проверит страницу в порядке, но никогда не получу реальные цифры, всегда находится в состоянии «ожидания данных».

Любой намек или пример будут оценены.

Ответы [ 2 ]

3 голосов
/ 18 января 2011

Вот несколько более сложный (дословно) пример для поддержки нескольких трекеров (например, для отслеживания данных CC для учетной записи клиента), пользовательских переменных и генерации URL:

updateRoot: root

super updateRoot: root.
root javascript with: (String streamContents: [:ws | self renderAnalyticsOn: ws]).

renderAnalyticsOn: stream

| options |
options := OrderedCollection new.
self trackingConfiguration keysAndValuesDo: 
        [:tracker :accountid |
        | isForClient |
        isForClient := tracker notEmpty.
        options add: (Array with: tracker , '_setAccount' with: accountid).
        isForClient
            ifTrue: 
                [options
                    add: (Array with: tracker , '_setDomainName' with: 'none');
                    add: (Array with: tracker , '_setAllowLinker' with: true);
                    add: (Array with: tracker , '_setAllowHash' with: false)].
        self trackingCustomVariables do: 
                [:array |
                array at: 1 put: tracker , array first.
                options add: array].
        options add: (Array with: tracker , '_trackPageview' with: '/' , self trackingURL)].
stream
    nextPutAll: 'var _gaq = _gaq || [];';
    nextPutAll: '_gaq.push('.
options do: [:ea | stream json: ea] separatedBy: [stream nextPut: $,].
stream nextPutAll: ');'.
stream
    nextPutAll: '(function() {';
    nextPutAll: 'var ga = document.createElement(''script''); ga.type = ''text/javascript''; ga.async = true;';
    nextPutAll: 'ga.src = (''https:'' == document.location.protocol ? ''https://ssl'' : ''http://www'') + ''.google-analytics.com/ga.js'';';
    nextPutAll: 'var s = document.getElementsByTagName(''script'')[0]; s.parentNode.insertBefore(ga, s);';
    nextPutAll: '})();'.

trackingConfiguration

| trackers |
trackers := (Dictionary new)
            at: '' put: 'UA-XXXX-YY';
            yourself.
self session googleAnalytics ifNotNil: [:v | trackers at: 'b.' put: v].
^trackers.

trackingCustomVariables

^Array with: (Array
                with: '_setCustomVar'
                with: 1
                with: 'Application'
                with: self class applicationName
                with: 2).

trackingURL

^String streamContents: [:ws | crumbs do: [:ea | ws nextPutAll: ea title asAnalyticsURL] separatedBy: [ws nextPut: $/]].

asAnalyticsURL

^self asLowercase copyReplace: Character space with: $_
3 голосов
/ 18 января 2011

Google Analytics хорошо работает с Seaside.Я использую его в течение многих лет на многих (в основном на пирсе) приморских сайтах.

  1. Убедитесь, что #analyticsJs содержит правильный код отслеживания Google Analytics.Гораздо эффективнее (и предложено Google) вставить код в тег script, но я предполагаю, что он также работает с использованием URL.

  2. Убедитесь, что ваше приложение работаетполное доменное имя (FQDN).Я предполагаю, что трекер не работает на localhost, см. Справка Google Analytics для получения дополнительной информации.

...