[Решено частично] Кастомизация модуля Boost

Аватар пользователя divined divined 12 декабря 2011 в 13:50

Кто может оказать содействие в доработке модуля boost?

Смысл доработки:

Учитывать значение Cookie для генерации нового вида страницы в кэшэ.

Часть которая касается выбора файла для реврайтинга в .htaccess я сделал.
Т.е. Правило читает куки, и на основании его значения выбирает файлы для вывода:

1. site.ru/page1.html.gz //Если куки нет
2. site.ru/page1+r.html.gz //Если значение куки = r и т.д.

Требуется чтобы boost создавал разные варианты кэша для разных значений куки.

..Где будет использоваться:

На кукисах основан выбор валюты на сайте, соответственно значения куки могут быть r-рубли, b-баксы, e-евро.

Комментарии

Аватар пользователя divined divined 12 декабря 2011 в 18:42

Вроде решено, требует проверки:

В boost.module в функцию boost_file_path перед

<?php
if (   strpos($path'..') !== FALSE
?>

пишем:

<?php
  $cookie_value 
$_COOKIE['cookie_name'];
  if (
$cookie_value!=null) {
    
$path.= '+'.$cookie_value;
   }
?>

Теперь у нас генерируются файлы кэша для разного содержания определенной куки.

Далее в .htaccess:

RewriteCond %{DOCUMENT_ROOT}/cache/normal/%{SERVER_NAME}%{REQUEST_URI}+%{QUERY_STRING}\.html\.gz -s
RewriteRule .* cache/normal/%{SERVER_NAME}%{REQUEST_URI}+%{QUERY_STRING}\.html\.gz [L,T=text/html]

меняем на:

RewriteCond %{DOCUMENT_ROOT}/cache/normal/%{SERVER_NAME}%{REQUEST_URI}+%{QUERY_STRING}+cookie_value\.html\.gz -s
RewriteCond %{HTTP_COOKIE} cookie_name=cookie_value
RewriteRule .* cache/normal/%{SERVER_NAME}%{REQUEST_URI}+%{QUERY_STRING}+cookie_value\.html\.gz [L,T=text/html]
#это повторяем для каждого из возможных значений куки,  
#заменяя значения cookie_name и cookie_value
#возможно есть и более элегантный и универсальный метод, но я его не знаю Smile

#и для тех у кого куки еще нет:

RewriteCond %{DOCUMENT_ROOT}/cache/normal/%{SERVER_NAME}%{REQUEST_URI}+%{QUERY_STRING}\.html\.gz -s
RewriteCond %{HTTP_COOKIE} !(cookie_name)
RewriteRule .* cache/normal/%{SERVER_NAME}%{REQUEST_URI}+%{QUERY_STRING}\.html\.gz [L,T=text/html]

Еще надо не забыть + поменять на ваши разделители аргументов и повторить для несжатого содержимого

Аватар пользователя divined divined 12 декабря 2011 в 18:57

Нашел проблемку, если кэш создался для пользователей с пустыми кукисами, то для других уже не создается, будем ковырять дальше Smile

Аватар пользователя divined divined 12 декабря 2011 в 23:36

Вот такой вариант работает, устанавливает дефолтное значение для куки, уходим от стандартного именования файла вообще.
Осталось проверить все функции модуля, очищение и т.д. и т.п.

<?php1
  $cookie_value = $_COOKIE['cookie_name'];
  if ($cookie_value!=null) {
    $path.= '+'.$cookie_value;
   } else $path.= '+cookie_deafult_value;
?>
RewriteCond %{DOCUMENT_ROOT}/cache/normal/%{SERVER_NAME}%{REQUEST_URI}+%{QUERY_STRING}+cookie_value\.html\.gz -s
RewriteCond %{HTTP_COOKIE} cookie_name=cookie_value
RewriteRule .* cache/normal/%{SERVER_NAME}%{REQUEST_URI}+%{QUERY_STRING}+cookie_value\.html\.gz [L,T=text/html]
#это повторяем для каждого из возможных значений куки,  
#заменяя значения cookie_name и cookie_value
#возможно есть и более элегантный и универсальный метод, но я его не знаю Smile
 
#и для тех у кого куки еще нет:
 
RewriteCond %{DOCUMENT_ROOT}/cache/normal/%{SERVER_NAME}%{REQUEST_URI}+%{QUERY_STRING}+cokie_default_value\.html\.gz -s
RewriteCond %{HTTP_COOKIE} !(cookie_name)
RewriteRule .* cache/normal/%{SERVER_NAME}%{REQUEST_URI}+%{QUERY_STRING}+cokie_default_value\.html\.gz [L,T=text/html]