Sergey |
|
---|---|
# Gunslinger :Начнем издалека. Вот текст этой функции, которая загружает плагин function sed_getextplugins($hook, $cond='R')
{
global $sed_plugins, $usr;
if (is_array($sed_plugins))
{
foreach($sed_plugins as $i => $k)
{
if($k['pl_hook']==$hook && sed_auth('plug', $k['pl_code'], $cond))
{
$extplugins[$i] = $k;
}
}
}
return $extplugins;
} а теперь посмотрим типичный пример описания установки плагина Auth_guests=R
Lock_guests=W12345A
Auth_members=R
Lock_members=W12345A типичный вызов: /* === Hook === */
$extp = sed_getextplugins('list.main'); Ведите, в вызове функции sed_getextplugins один параметр, а в описании их два. Что обозначает это вызов? Этот, типовой вызов обозначает, что это Auth_guests=R
Lock_guests=W12345A
Auth_members=R
Lock_members=W12345A системе пофиг, это выполняется одним образом $cond='R' т.е. всегда, если вы установили Auth в R . Имеется еще один момент. У функции sed_getextplugins($hook, $cond='R') проводится выборка по имени хука $hook всех активных (не отключенных) одноименных с хуком элементов плагинов. Выборка производится из массива $sed_plugins Выборка производится один раз по ключу $cond. Следовательно, если у вас появилась мысль использовать плагин для группы "доверенных товарищей" вам придется позаботится об этом самим, т.е. написать особый плагин загрузки ваших плагинов для "доверенных товарищей". вот вызов для получения правильного доступа по правам из page.inc.php к категории (списку) list($usr['auth_read'], $usr['auth_write'], $usr['isadmin'], $usr['auth_download']) = sed_auth('page', $pag['page_cat'], 'RWA1'); аналогично, должно быть и к плагину для группы товарищей. Следующий момент, это не понимание работы оператора (тут отвлеченный пример): if (is_array($extp))
{ foreach($extp as $k => $pl) { include_once($cfg['plugins_dir'].'/'.$pl['pl_code'].'/'.$pl['pl_file'].'.php'); } }
Оператор foreach коварен. Он вначале у себя внутри выбирает все элементы из $extp а потом их перебирает, поэтому !! вы не сможете уже переопределить массив $extp дальше. Конечно, надо несколько другой механизм применять, но необходимость этого встречается только в отдельных случаях, когда вы решили динамически подвинуть или исключить плагин. Не выйдет. Другое коварство заключается в именах переменных. Такие простенькие имена типа $i или $k могут использоваться и другими разработчиками других плагинов, особенно, состоящих из нескольких частей. Можно ненароком потереть или переопределить чужую переменную. В этом случае лучше перейти к своему классу или на худой конец оформить свой плагин функцией. www.cotonti.mobi
|
|
Dit bericht is bewerkt door Sergey (2010-01-30 05:09, 15 jaren ago) |