Mat*_*man 9 javascript google-analytics ruby-on-rails
我想要做的是在我的控制器中使用谷歌分析的自定义事件跟踪,逻辑完成.我不太确定如何将javascript代码放入我的控制器中,或者根本不可能.我如何在我的控制器中放置这样的东西:
_trackEvent(category, action, opt_label, opt_value, opt_noninteraction)
Run Code Online (Sandbox Code Playgroud)
要么
_gaq.push(['_trackEvent', 'Videos', 'Play', 'Gone With the Wind']);
Run Code Online (Sandbox Code Playgroud)
谢谢!我应该使用哪一个?编辑:
以下是我根据建议进行设置的方法:
跟踪代码部分:
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-ACCOUNT']);
_gaq.push(['_setDomainName', 'sitename.com']);
_gaq.push(['_trackPageview']);
<%= render "layouts/ga_events" %>
(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>
Run Code Online (Sandbox Code Playgroud)
_ga_events.html.erb(我在"value"参数中添加了)
<% unless session[:events].nil? %>
<% session[:events].each do |event|%>
_gaq.push(['_trackEvent', '<%= event[:category]%>', '<%= event[:action]%>', '<%= event[:label]%>', '<%= event[:value]%>']);
<% end %>
<% end %>
<% session[:events] = Array.new %>
Run Code Online (Sandbox Code Playgroud)
应用程序控制器(添加"值参数")
protected
# GA event logger
def log_event(category, action, label = nil, value = nil)
session[:events] ||= Array.new
session[:events] << {:category => category, :action => action, :label => label, :value => value}
end
Run Code Online (Sandbox Code Playgroud)
在我的任务控制器中测试它:
def create
@task = @user.tasks.build(params[:task])
@task.author = current_user unless @user == current_user
if @task.save
log_event("Tasks", "Created", current_user.email, "123")
redirect_back tasks_path, :notice => t('tasks.created')
else
redirect_back tasks_path, :alert => @task.errors.full_messages
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:这里我的GA输出代码,看起来一切都是正确的:
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA_CODE']);
_gaq.push(['_setDomainName', 'SUBDOMAIN']);
_gaq.push(['_trackPageview']);
_gaq.push(['_trackEvent', 'Priority', 'Created (day)', 'Label info', '']);
(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>
Run Code Online (Sandbox Code Playgroud)
cai*_*nne 19
这是我如何做到的,它与RoR的实现方式非常相似flash.从本质上讲,在服务器端,您可以存储最终要通过Javascript推送到GA的事件.最终呈现页面时,您将呈现Javascript以推送事件,并重置您的商店.
所以...
# application_controller.rb
protected
def log_event(category, action, label)
session[:events] ||= Array.new
session[:events] << {:category => category, :action => action, :label => label}
end
Run Code Online (Sandbox Code Playgroud)
..根据您的喜好,从您的个人控制器方法中调用该方法.
# application.html.erb
<head>
... other stuff...
<!-- Google Analytics -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', '<%= CONFIG['ga_account_id'] %>']);
_gaq.push(['_trackPageview']);
<%= render "layouts/ga_events" %>
</script>
Run Code Online (Sandbox Code Playgroud)
..和那个小部分引用的是:
# _ga_events.html.erb
<% unless session[:events].nil? %>
<% session[:events].each do |event|%>
_gaq.push(['_trackEvent', '<%= event[:category]%>', '<%= event[:action]%>', '<%= event[:label]%>']);
<% end %>
<% end %>
<% session[:events] = Array.new %>
Run Code Online (Sandbox Code Playgroud)