2015-09-07 2 views
1

Я пытаюсь переписать простой (в теории) счетчик страниц на основе файлов cookie для платной рекламы, используя встроенные функции cookie Rails. Посетите новую страницу = увеличьте значение «cookie» cookie на единицу и т. Д. Когда посетитель попадает на просмотры X-страниц, покажите paywall. Это в paywall.js файл, который использует jquery.cookie.js работы:Как переписать простую функцию .js page view counter cookie в Rails?

$(document).ready(function() { 
// create cookie 
    var visited = $.cookie('visited'); // visited = 0 
    var pageTitle = document.title; 
    if (visited == 7) { 
    $("p.counter").html("From this point, you will always see fancybox on next visit!"); 
    // open fancybox after 1 secs on 8th visit 
    setTimeout(function() { 
     $.fancybox.open({ 
      href: "#inline" 
     }); 
    }, 1000); 
    } else { 
    visited++; // increase counter of visits 
    $("p.counter span").append(visited); 
    // set new cookie value to match visits 
    $.cookie('visited', visited, { 
     expires: 365, // expires after one year 
     path: "/" 
    }); 
    return false; 
} 
}); // ready 

В следующем, помещенный в контроллер приложения, почти работает, но счетчик страниц работает с помощью сеанса [: счетчик]. Количество страниц увеличивается отлично, но он обнуляется и начинает отсчет снова, если закрыть и снова открыть браузер (очевидно):

before_filter :set_visitor_cookie 

def set_visitor_cookie 
    cookies[:visits] = { 
    value: increment_counter, 
    expires: 1.year.from_now 
    } 
end 

def increment_counter 
    if session[:counter].nil? 
    session[:counter] = 0 
    end 
    session[:counter] += 1 
end 

Так как я пишу метод increment_counter или метод set_visitor_cookie непосредственно, просто увеличить значение на 1 на каждом просмотре страницы?

ответ

0

Хорошо, сделали. Не уверен, понимаю ли я, почему код приращения работает точно так, как он есть (если есть какие-либо эксперты Ruby, переходите сюда), но эти три метода и работа перед фильтром выполняются так же, как и код jquery в вопросе, увеличивая счетчик в cookie и не используя сеансы, поэтому он сохраняется во всех перезапусках браузера (пока кто-то не очистит их файлы cookie, но мы можем беспокоиться о evercookie или снятии отпечатков пальцев в другой день). Вы можете использовать это, чтобы вызвать плательщик, другой вид popover или почти все, что я предполагаю.

before_filter :set_visitor_cookie 

def set_visitor_cookie 
    cookies[:visits] = { 
    value: increment_counter, 
    expires: 1.year.from_now 
    } 

    paywall 
end 

def increment_counter 
    @pageviews = cookies[:visits].to_i 
    if @pageviews.nil? 
    @pageviews == 0 
    end 
    @pageviews += 1 
end 

def paywall 
    if cookies[:visits].to_i > 5 
    flash[:success] = "Paywall time" 
    end 
end 

Установите целочисленное значение в платном доступе метода все, что вы хотите для вашего платного доступа или пирога, и изменить код в если п делать то, что вы хотите это сделать, когда счетчик выходит за пределами значения отсчета.