спасибо, я вроде разобрался. мне недавно ещё где-то мелькнуло что сессии не приспособлены для больших количеств одновременно и что может начать тормозить и чего-то одновременно делать там нельзя. наверно лучше в бд хранить, +1 запрос при загрузке не так страшно
а от способа хранить готовые запросы заранее я уже не хочу отказываться потомучто просто всё получается))
вот если интересно
когда страница генерится, создается массив в сессии. вот например таблица из 4 выбиралок по 4 кнопки. риквест_дата() это всё запихивает в сессию и на выходе выдаёт массив для шаблона сразу
Код:
$keys = request_data('USER_SETTINGS_PRIVACY', array(
'mod' => 'user_settings',
'section' => 'access'), array(
'wr' => array(0, 1, 2, 3),
'ww' => array(0, 1, 2, 3),
'pa' => array(0, 1, 2, 3),
'fl' => array(0, 1, 2, 3),
));
$template->assign_block_vars('user_settings_privacy', $keys);
на странице получаются кнопки типа
Код:
<td id="wr0" class="wr" onclick="request('9eee5ce5bef024abda870dbb72778a6b', 'cell_check')">set wr 0</td>
Код:
function request(h, callback)
{
$.getJSON("/request.php", {h: h}, function(obj){eval(callback+'(obj)');});
}
реквест пхп получает тока ключ, вытаскивает из сессии по этому ключу массив с остальными параметрами и по ним всё делает и какието данные на странцу возращает что типа сделал тото и тото, в данном случае красит кнопки в соответствии с новым состоянием
а в сессии вот скока фигни ради этих 16 кнопок
Код:
self|s:1:"1";request_data|a:16:{s:32:"9eee5ce5bef024abda870dbb72778a6b";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"wr";i:0;}s:32:"febb6337222ce1d2b4d2925b73942cdf";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"wr";i:1;}s:32:"0b45476007ade20032d838221cc8021d";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"wr";i:2;}s:32:"809a0d9425e3f55107de2a20e6f79104";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"wr";i:3;}s:32:"6227062615e72b750fb0d7100e865aef";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"ww";i:0;}s:32:"d27285fe23395661b0be9b47bca2720c";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"ww";i:1;}s:32:"57c3e117a9de3ced37e686d16f1a52bd";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"ww";i:2;}s:32:"54c6cf4d32e7d750fd610b89111789f4";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"ww";i:3;}s:32:"7d2a634f00263f61045f6ccb693401b5";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"pa";i:0;}s:32:"62e49aaea7dbee83800be51998420ea7";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"pa";i:1;}s:32:"174431f1925eb86fa7309530425455f0";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"pa";i:2;}s:32:"fd37a04af539605466bde72031135e13";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"pa";i:3;}s:32:"1ae5a83d2e7993ed0f9cfc44b29f5ec1";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"fl";i:0;}s:32:"52aa0eefe6e69ea9188ae549a4aa71f4";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"fl";i:1;}s:32:"a90528be6b255c238ce4c1ae45a65dff";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"fl";i:2;}s:32:"921b603e70d0a743f54609c6f749be70";a:3:{s:3:"mod";s:13:"user_settings";s:7:"section";s:6:"access";s:2:"fl";i:3;}}
вот и нормально такое в сессиях хранить и обновлять при каждой загрузке?
даже если их в бд хранить то помоему нагрузка типа той же что и опять права проверять
в среднем вот как выглядит проверка
Код:
if ( $album['section'] == 'u' )
{
$album_owner = t2a("SELECT * FROM users WHERE id='".$album['s_id']."'", 2);
$owner_id = 'u'.$album_owner['id'];
$user_relation = user_relation($album_owner['id']);
$user_access = $album_owner['access'];
if ( ( $user_access[0] >= $user_relation && $album['access'] >= $user_relation )
|| $album['s_id'] == $_SESSION['self'] ) $access = true;
…
+
Код:
function user_relation($user_id)
{
global $self_friends, $user_friends;
if ( !$user_friends ) $user_friends = user_friends($user_id);
$user_relation = 3; if ( $_SESSION['self'] )
{
if ( $user_id == $_SESSION['self'] ) $user_relation = 0; elseif ( is_array($user_friends) && in_array($_SESSION['self'], $user_friends) )
$user_relation = 1; elseif ( is_array($user_friends) && count(intersect($self_friends, $user_friends)) > 0 )
$user_relation = 2; }
return $user_relation;
}
function user_friends($user_id)
{
$user_friends = t2a("SELECT user_a AS user_id FROM friends
WHERE user_b='".$user_id."'
UNION SELECT user_b AS user_id FROM friends
WHERE user_a='".$user_id."'", 1);
return $user_friends['user_id'];
}
помоему слишком дофига чтоб повторно это проверять