mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-26 03:30:48 +03:00
Возможность делать именованные евенты и управлять блоками из конфига о их именам
This commit is contained in:
parent
d966c84257
commit
c82be977c6
|
@ -118,12 +118,12 @@ class ActionBlog extends Action {
|
|||
*
|
||||
*/
|
||||
protected function RegisterEvent() {
|
||||
$this->AddEventPreg('/^good$/i','/^(page(\d+))?$/i','EventTopics');
|
||||
$this->AddEvent('good','EventTopics');
|
||||
$this->AddEventPreg('/^bad$/i','/^(page(\d+))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^new$/i','/^(page(\d+))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^discussed$/i','/^(page(\d+))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^top$/i','/^(page(\d+))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^good$/i','/^(page(\d+))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEvent('good',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^bad$/i','/^(page(\d+))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^new$/i','/^(page(\d+))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^discussed$/i','/^(page(\d+))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^top$/i','/^(page(\d+))?$/i',array('EventTopics','topics'));
|
||||
|
||||
$this->AddEvent('add','EventAddBlog');
|
||||
$this->AddEvent('edit','EventEditBlog');
|
||||
|
@ -138,14 +138,14 @@ class ActionBlog extends Action {
|
|||
$this->AddEvent('ajaxbloginfo', 'AjaxBlogInfo');
|
||||
$this->AddEvent('ajaxblogjoin', 'AjaxBlogJoin');
|
||||
|
||||
$this->AddEventPreg('/^(\d+)\.html$/i','/^$/i','EventShowTopic');
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^(\d+)\.html$/i','EventShowTopic');
|
||||
$this->AddEventPreg('/^(\d+)\.html$/i','/^$/i',array('EventShowTopic','topic'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^(\d+)\.html$/i',array('EventShowTopic','topic'));
|
||||
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^(page(\d+))?$/i','EventShowBlog');
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^bad$/i','/^(page(\d+))?$/i','EventShowBlog');
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^new$/i','/^(page(\d+))?$/i','EventShowBlog');
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^discussed$/i','/^(page(\d+))?$/i','EventShowBlog');
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^top$/i','/^(page(\d+))?$/i','EventShowBlog');
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^(page(\d+))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^bad$/i','/^(page(\d+))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^new$/i','/^(page(\d+))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^discussed$/i','/^(page(\d+))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^top$/i','/^(page(\d+))?$/i',array('EventShowBlog','blog'));
|
||||
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^users$/i','/^(page(\d+))?$/i','EventShowUsers');
|
||||
}
|
||||
|
|
|
@ -395,16 +395,8 @@ $config['router']['config']['action_not_found'] = 'error';
|
|||
* Настройки вывода блоков
|
||||
*/
|
||||
$config['block']['rule_index_blog'] = array(
|
||||
'path' => array(
|
||||
'___path.root.web___/blog$',
|
||||
'___path.root.web___/blog/*$',
|
||||
'___path.root.web___/blog/*/page\d+$',
|
||||
'___path.root.web___/blog/*/*\.html$',
|
||||
'___path.root.web___/blog/*\.html$',
|
||||
'___path.root.web___/top(|(/.+))$',
|
||||
),
|
||||
'action' => array(
|
||||
'index', 'new'
|
||||
'index', 'blog' => array('{topics}','{topic}','{blog}')
|
||||
),
|
||||
'blocks' => array(
|
||||
'right' => array('stream'=>array('priority'=>100),'tags'=>array('priority'=>50),'blogs'=>array('params'=>array(),'priority'=>1))
|
||||
|
|
|
@ -71,6 +71,13 @@ abstract class Action extends LsObject {
|
|||
* @var string|null
|
||||
*/
|
||||
protected $sCurrentEvent=null;
|
||||
/**
|
||||
* Имя текущий евента
|
||||
* Позволяет именовать экшены на основе регулярных выражений
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
protected $sCurrentEventName=null;
|
||||
/**
|
||||
* Текущий экшен
|
||||
*
|
||||
|
@ -113,7 +120,17 @@ abstract class Action extends LsObject {
|
|||
throw new Exception("Incorrect number of arguments when adding events");
|
||||
}
|
||||
$aEvent=array();
|
||||
$aEvent['method']=func_get_arg($iCountArgs-1);
|
||||
/**
|
||||
* Последний параметр может быть массивом - содержать имя метода и имя евента(именованный евент)
|
||||
* Если указан только метод, то имя будет равным названию метода
|
||||
*/
|
||||
$aNames=(array)func_get_arg($iCountArgs-1);
|
||||
$aEvent['method']=$aNames[0];
|
||||
if (isset($aNames[1])) {
|
||||
$aEvent['name']=$aNames[1];
|
||||
} else {
|
||||
$aEvent['name']=$aEvent['method'];
|
||||
}
|
||||
if (!method_exists($this,$aEvent['method'])) {
|
||||
throw new Exception("Method of the event not found: ".$aEvent['method']);
|
||||
}
|
||||
|
@ -148,6 +165,7 @@ abstract class Action extends LsObject {
|
|||
continue 2;
|
||||
}
|
||||
}
|
||||
$this->sCurrentEventName=$aEvent['name'];
|
||||
$sCmd='$result=$this->'.$aEvent['method'].'();';
|
||||
$this->Hook_Run("action_event_".strtolower($this->sCurrentAction)."_before",array('event'=>$this->sCurrentEvent,'params'=>$this->GetParams()));
|
||||
eval($sCmd);
|
||||
|
@ -306,6 +324,15 @@ abstract class Action extends LsObject {
|
|||
return Router::GetActionClass();
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает имя евента
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function GetCurrentEventName() {
|
||||
return $this->sCurrentEventName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Вызывается в том случаи если не найден евент который запросили через URL
|
||||
* По дефолту происходит перекидывание на страницу ошибки, это можно переопределить в наследнике
|
||||
|
|
|
@ -44,6 +44,12 @@ class Router extends LsObject {
|
|||
* @var string|null
|
||||
*/
|
||||
static protected $sActionEvent=null;
|
||||
/**
|
||||
* Имя текущего евента
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
static protected $sActionEventName=null;
|
||||
/**
|
||||
* Класс текущего экшена
|
||||
*
|
||||
|
@ -272,6 +278,7 @@ class Router extends LsObject {
|
|||
$iTimeId=$oProfiler->Start('ExecAction',self::$sAction);
|
||||
|
||||
$res=$this->oAction->ExecEvent();
|
||||
self::$sActionEventName=$this->oAction->GetCurrentEventName();
|
||||
|
||||
$this->Hook_Run("action_shutdown_".strtolower($sActionClass)."_before");
|
||||
$this->oAction->EventShutdown();
|
||||
|
@ -344,6 +351,14 @@ class Router extends LsObject {
|
|||
static public function GetActionEvent() {
|
||||
return self::$sActionEvent;
|
||||
}
|
||||
/**
|
||||
* Возвращает имя текущего евента
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
static public function GetActionEventName() {
|
||||
return self::$sActionEventName;
|
||||
}
|
||||
/**
|
||||
* Возвращает класс текущего экшена
|
||||
*
|
||||
|
@ -455,7 +470,7 @@ class Router extends LsObject {
|
|||
* @param string $sPage
|
||||
* @return string
|
||||
*/
|
||||
protected function Rewrite($sPage) {
|
||||
public function Rewrite($sPage) {
|
||||
return (isset($this->aConfigRoute['rewrite'][$sPage]))
|
||||
? $this->aConfigRoute['rewrite'][$sPage]
|
||||
: $sPage;
|
||||
|
@ -470,7 +485,7 @@ class Router extends LsObject {
|
|||
* @param string $sPage
|
||||
* @return string
|
||||
*/
|
||||
protected function Standart($sPage) {
|
||||
public function Standart($sPage) {
|
||||
$aRewrite=array_flip($this->aConfigRoute['rewrite']);
|
||||
return (isset($aRewrite[$sPage]))
|
||||
? $aRewrite[$sPage]
|
||||
|
|
|
@ -574,7 +574,8 @@ class ModuleViewer extends Module {
|
|||
*/
|
||||
protected function BuildBlocks() {
|
||||
$sAction = strtolower(Router::GetAction());
|
||||
$sEvent = strtolower(Router::GetActionEvent());
|
||||
$sEvent = strtolower(Router::GetActionEvent());
|
||||
$sEventName = strtolower(Router::GetActionEventName());
|
||||
foreach($this->aBlockRules as $sName=>$aRule) {
|
||||
$bUse=false;
|
||||
/**
|
||||
|
@ -595,16 +596,24 @@ class ModuleViewer extends Module {
|
|||
* переходи к следующему действию.
|
||||
*/
|
||||
foreach ((array)$aRule['action'][$sAction] as $sEventPreg) {
|
||||
if(substr($sEventPreg,0,1)!='/') {
|
||||
if(substr($sEventPreg,0,1)=='/') {
|
||||
/**
|
||||
* значит это название event`a
|
||||
*/
|
||||
if($sEvent==$sEventPreg) { $bUse=true; break; }
|
||||
} else {
|
||||
/**
|
||||
* это регулярное выражение
|
||||
* Это регулярное выражение
|
||||
*/
|
||||
if(preg_match($sEventPreg,$sEvent)) { $bUse=true; break; }
|
||||
} elseif (substr($sEventPreg,0,1)=='{') {
|
||||
/**
|
||||
* Это имя event'a (именованный евент, если его нет, то совпадает с именем метода евента в экшене)
|
||||
*/
|
||||
if(trim($sEventPreg,'{}')==$sEventName) {
|
||||
$bUse=true;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* Это название event`a
|
||||
*/
|
||||
if($sEvent==$sEventPreg) { $bUse=true; break; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue