ActionRss
Package | application.actions |
---|---|
Inheritance | class ActionRss » Action » LsObject |
Since | 1.0 |
Source Code | /application/classes/actions/ActionRss.class.php |
Экшен бработки RSS
Автор класса vovazol(http://livestreet.ru/profile/vovazol/)
Protected Properties
Property | Type | Description | Defined By |
---|---|---|---|
_aBehaviors | Список поведений в виде готовых объектов, формируется автоматически | LsObject | |
aBehaviors | array | Список поведений | LsObject |
aParams | array | Список параметров из URL | Action |
aParamsEventMatch | array | Список совпадений по регулярному выражению для евента | Action |
aRegisterEvent | array | Список зарегистрированных евентов | Action |
aRegisterEventExternal | array | Список евентов, которые нужно обрабатывать внешним обработчиком | Action |
sActionTemplate | string|null | Шаблон экшена | Action |
sCurrentAction | null|string | Текущий экшен | Action |
sCurrentEvent | string|null | Текущий евент | Action |
sCurrentEventName | string|null | Имя текущий евента | Action |
sDefaultEvent | string|null | Дефолтный евент | Action |
Public Methods
Method | Description | Defined By |
---|---|---|
ActionCall() | Позволяет запускать не публичные методы экшена через объект | Action |
ActionCallExists() | Проверяет метод экшена на существование | Action |
ActionGet() | Возвращает свойство объекта экшена | Action |
ActionSet() | Устанавливает свойство объекта экшена | Action |
AddBehaviorHook() | Добавляет хук поведения | LsObject |
AttachBehavior() | Присоединяет поведение к объекту | LsObject |
DetachBehavior() | Отсоединяет поведение от объекта | LsObject |
EventShutdown() | Выполняется при завершение экшена, после вызова основного евента | Action |
ExecEvent() | Запускает евент на выполнение | Action |
GetActionClass() | Получить каталог с шаблонами экшена(совпадает с именем класса) | Action |
GetBehavior() | Возвращает объект поведения по его имени | LsObject |
GetBehaviors() | Возвращает все объекты поведения | LsObject |
GetCurrentEventName() | Возвращает имя евента | Action |
GetDefaultEvent() | Получает евент по умолчанию | Action |
GetParam() | Получает параметр из URL по его номеру, если его нет то null | Action |
GetParams() | Получает список параметров из УРЛ | Action |
GetTemplate() | Получить шаблон | Action |
Init() | Инициализация | ActionRss |
RemoveBehaviorHook() | Удаляет хук поведения | LsObject |
RunBehaviorHook() | Запускает хук поведения на выполнение | LsObject |
SetDefaultEvent() | Устанавливает евент по умолчанию | Action |
SetParam() | Установить значение параметра(эмуляция параметра в URL). | Action |
__call() | Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля | LsObject |
__clone() | При клонировании сбрасываем поведения | LsObject |
__construct() | Конструктор | Action |
__get() | Обработка доступа к объекты поведения | LsObject |
Protected Methods
Method | Description | Defined By |
---|---|---|
AddEvent() | Добавляет евент в экшен | Action |
AddEventPreg() | Добавляет евент в экшен, используя регулярное выражение для евента и параметров | Action |
EventErrorDebug() | Выводит отладочную информацию в стандартном сообщении | Action |
EventNotFound() | Вызывается в том случаи если не найден евент который запросили через URL | Action |
GetEventMatch() | Возвращает элементы совпадения по регулярному выражению для евента | Action |
GetParamEventMatch() | Возвращает элементы совпадения по регулярному выражению для параметров евента | Action |
InitRss() | Указывает браузеру правильный content type в случае вывода RSS-ленты | ActionRss |
PrepareBehaviors() | Инициализация поведений | LsObject |
RegisterEvent() | Регистрация евентов | ActionRss |
RegisterEventExternal() | Регистрируем внешние обработчики для евентов | Action |
RssColectiveBlog() | Вывод RSS топиков из коллективного блога | ActionRss |
RssComments() | Вывод RSS последних комментариев | ActionRss |
RssGood() | Вывод RSS интересных топиков | ActionRss |
RssNew() | Вывод RSS новых топиков | ActionRss |
RssPersonalBlog() | Вывод RSS топиков из персонального блога или всех персональных | ActionRss |
RssTag() | Вывод RSS топиков по определенному тегу | ActionRss |
RssTopicComments() | Вывод RSS комментариев конкретного топика | ActionRss |
SetTemplate() | Устанавливает какой шаблон выводить | Action |
SetTemplateAction() | Устанавливает какой шаблон выводить | Action |
getTopicText() | Формирует текст топика для RSS | ActionRss |
Method Details
Init()
method
public void Init()
|
Source Code: /application/classes/actions/ActionRss.class.php#34 (show)
public function Init()
{
$this->SetDefaultEvent('index');
Router::SetIsShowStats(false);
}
Инициализация
InitRss()
method
protected void InitRss()
|
Source Code: /application/classes/actions/ActionRss.class.php#43 (show)
protected function InitRss()
{
header('Content-Type: application/rss+xml; charset=utf-8');
}
Указывает браузеру правильный content type в случае вывода RSS-ленты
RegisterEvent()
method
protected void RegisterEvent()
|
Source Code: /application/classes/actions/ActionRss.class.php#51 (show)
protected function RegisterEvent()
{
$this->AddEvent('index', 'RssGood');
$this->AddEvent('new', 'RssNew');
$this->AddEvent('allcomments', 'RssComments');
$this->AddEvent('comments', 'RssTopicComments');
$this->AddEvent('tag', 'RssTag');
$this->AddEvent('blog', 'RssColectiveBlog');
$this->AddEvent('personal_blog', 'RssPersonalBlog');
}
Регистрация евентов
RssColectiveBlog()
method
protected void RssColectiveBlog()
|
Source Code: /application/classes/actions/ActionRss.class.php#291 (show)
protected function RssColectiveBlog()
{
$sBlogUrl = $this->GetParam(0);
/**
* Если блог существует, то получаем записи
*/
if (!$sBlogUrl or !($oBlog = $this->Blog_GetBlogByUrl($sBlogUrl)) or $oBlog->getType() == "close") {
return parent::EventNotFound();
} else {
$aResult = $this->Topic_GetTopicsByBlog($oBlog, 1, Config::Get('module.topic.per_page') * 2, 'good');
}
$aTopics = $aResult['collection'];
/**
* Формируем данные канала RSS
*/
$aChannel['title'] = Config::Get('view.name');
$aChannel['link'] = Router::GetPath('/');
$aChannel['description'] = Router::GetPath('/') . ' / ' . $oBlog->getTitle() . ' / RSS channel';
$aChannel['language'] = 'ru';
$aChannel['managingEditor'] = Config::Get('general.rss_editor_mail');
$aChannel['generator'] = Router::GetPath('/');
/**
* Формируем записи RSS
*/
$topics = array();
foreach ($aTopics as $oTopic) {
$item['title'] = $oTopic->getTitle();
$item['guid'] = $oTopic->getUrl();
$item['link'] = $oTopic->getUrl();
$item['description'] = $this->getTopicText($oTopic);
$item['pubDate'] = $oTopic->getDateAdd();
$item['author'] = $oTopic->getUser()->getLogin();
$item['category'] = htmlspecialchars($oTopic->getTags());
$topics[] = $item;
}
/**
* Формируем ответ
*/
$this->InitRss();
$this->Viewer_Assign('aChannel', $aChannel);
$this->Viewer_Assign('aItems', $topics);
$this->SetTemplateAction('index');
}
Вывод RSS топиков из коллективного блога
RssComments()
method
protected void RssComments()
|
Source Code: /application/classes/actions/ActionRss.class.php#149 (show)
protected function RssComments()
{
/**
* Получаем закрытые блоги, чтобы исключить их из выдачи
*/
$aCloseBlogs = $this->Blog_GetInaccessibleBlogsByUser();
/**
* Получаем комментарии
*/
$aResult = $this->Comment_GetCommentsAll('topic', 1, Config::Get('module.comment.per_page') * 2, array(),
$aCloseBlogs);
$aComments = $aResult['collection'];
/**
* Формируем данные канала RSS
*/
$aChannel['title'] = Config::Get('view.name');
$aChannel['link'] = Router::GetPath('/');
$aChannel['description'] = Router::GetPath('/') . ' / RSS channel';
$aChannel['language'] = 'ru';
$aChannel['managingEditor'] = Config::Get('general.rss_editor_mail');
$aChannel['generator'] = Router::GetPath('/');
/**
* Формируем записи RSS
*/
$comments = array();
foreach ($aComments as $oComment) {
$item['title'] = 'Comments: ' . $oComment->getTarget()->getTitle();
$item['guid'] = $oComment->getTarget()->getUrl() . '#comment' . $oComment->getId();
$item['link'] = $oComment->getTarget()->getUrl() . '#comment' . $oComment->getId();
$item['description'] = $oComment->getText();
$item['pubDate'] = $oComment->getDate();
$item['author'] = $oComment->getUser()->getLogin();
$item['category'] = 'comments';
$comments[] = $item;
}
/**
* Формируем ответ
*/
$this->InitRss();
$this->Viewer_Assign('aChannel', $aChannel);
$this->Viewer_Assign('aItems', $comments);
$this->SetTemplateAction('index');
}
Вывод RSS последних комментариев
RssGood()
method
protected void RssGood()
|
Source Code: /application/classes/actions/ActionRss.class.php#65 (show)
protected function RssGood()
{
/**
* Получаем топики
*/
$aResult = $this->Topic_GetTopicsGood(1, Config::Get('module.topic.per_page') * 2, false);
$aTopics = $aResult['collection'];
/**
* Формируем данные канала RSS
*/
$aChannel['title'] = Config::Get('view.name');
$aChannel['link'] = Router::GetPath('/');
$aChannel['description'] = Config::Get('view.name') . ' / RSS channel';
$aChannel['language'] = 'ru';
$aChannel['managingEditor'] = Config::Get('general.rss_editor_mail');
$aChannel['generator'] = Config::Get('view.name');
/**
* Формируем записи RSS
*/
$topics = array();
foreach ($aTopics as $oTopic) {
$item['title'] = $oTopic->getTitle();
$item['guid'] = $oTopic->getUrl();
$item['link'] = $oTopic->getUrl();
$item['description'] = $this->getTopicText($oTopic);
$item['pubDate'] = $oTopic->getDateAdd();
$item['author'] = $oTopic->getUser()->getLogin();
$item['category'] = htmlspecialchars($oTopic->getTags());
$topics[] = $item;
}
/**
* Формируем ответ
*/
$this->InitRss();
$this->Viewer_Assign('aChannel', $aChannel);
$this->Viewer_Assign('aItems', $topics);
$this->SetTemplateAction('index');
}
Вывод RSS интересных топиков
RssNew()
method
protected void RssNew()
|
Source Code: /application/classes/actions/ActionRss.class.php#107 (show)
protected function RssNew()
{
/**
* Получаем топики
*/
$aResult = $this->Topic_GetTopicsNew(1, Config::Get('module.topic.per_page') * 2, false);
$aTopics = $aResult['collection'];
/**
* Формируем данные канала RSS
*/
$aChannel['title'] = Config::Get('view.name');
$aChannel['link'] = Router::GetPath('/');
$aChannel['description'] = Router::GetPath('/') . ' / RSS channel';
$aChannel['language'] = 'ru';
$aChannel['managingEditor'] = Config::Get('general.rss_editor_mail');
$aChannel['generator'] = Router::GetPath('/');
/**
* Формируем записи RSS
*/
$topics = array();
foreach ($aTopics as $oTopic) {
$item['title'] = $oTopic->getTitle();
$item['guid'] = $oTopic->getUrl();
$item['link'] = $oTopic->getUrl();
$item['description'] = $this->getTopicText($oTopic);
$item['pubDate'] = $oTopic->getDateAdd();
$item['author'] = $oTopic->getUser()->getLogin();
$item['category'] = htmlspecialchars($oTopic->getTags());
$topics[] = $item;
}
/**
* Формируем ответ
*/
$this->InitRss();
$this->Viewer_Assign('aChannel', $aChannel);
$this->Viewer_Assign('aItems', $topics);
$this->SetTemplateAction('index');
}
Вывод RSS новых топиков
RssPersonalBlog()
method
protected void RssPersonalBlog()
|
Source Code: /application/classes/actions/ActionRss.class.php#338 (show)
protected function RssPersonalBlog()
{
$this->sUserLogin = $this->GetParam(0);
if (!$this->sUserLogin) {
/**
* RSS-лента всех записей из персональных блогов
*/
$aResult = $this->Topic_GetTopicsPersonal(1, Config::Get('module.topic.per_page') * 2);
} elseif (!$oUser = $this->User_GetUserByLogin($this->sUserLogin)) {
return parent::EventNotFound();
} else {
/**
* RSS-лента записей персонального блога указанного пользователя
*/
$aResult = $this->Topic_GetTopicsPersonalByUser($oUser->getId(), 1, 1,
Config::Get('module.topic.per_page') * 2);
}
$aTopics = $aResult['collection'];
/**
* Формируем данные канала RSS
*/
$aChannel['title'] = Config::Get('view.name');
$aChannel['link'] = Router::GetPath('/');
$aChannel['description'] = ($this->sUserLogin)
? Router::GetPath('/') . ' / ' . $oUser->getLogin() . ' / RSS channel'
: Router::GetPath('/') . ' / RSS channel';
$aChannel['language'] = 'ru';
$aChannel['managingEditor'] = Config::Get('general.rss_editor_mail');
$aChannel['generator'] = Router::GetPath('/');
/**
* Формируем записи RSS
*/
$topics = array();
foreach ($aTopics as $oTopic) {
$item['title'] = $oTopic->getTitle();
$item['guid'] = $oTopic->getUrl();
$item['link'] = $oTopic->getUrl();
$item['description'] = $this->getTopicText($oTopic);
$item['pubDate'] = $oTopic->getDateAdd();
$item['author'] = $oTopic->getUser()->getLogin();
$item['category'] = htmlspecialchars($oTopic->getTags());
$topics[] = $item;
}
/**
* Формируем ответ
*/
$this->InitRss();
$this->Viewer_Assign('aChannel', $aChannel);
$this->Viewer_Assign('aItems', $topics);
$this->SetTemplateAction('index');
}
Вывод RSS топиков из персонального блога или всех персональных
RssTag()
method
protected void RssTag()
|
Source Code: /application/classes/actions/ActionRss.class.php#248 (show)
protected function RssTag()
{
$sTag = urldecode($this->GetParam(0));
/**
* Получаем топики
*/
$aResult = $this->Topic_GetTopicsByTag($sTag, 1, Config::Get('module.topic.per_page') * 2, false);
$aTopics = $aResult['collection'];
/**
* Формируем данные канала RSS
*/
$aChannel['title'] = Config::Get('view.name');
$aChannel['link'] = Router::GetPath('/');
$aChannel['description'] = Router::GetPath('/') . ' / RSS channel';
$aChannel['language'] = 'ru';
$aChannel['managingEditor'] = Config::Get('general.rss_editor_mail');
$aChannel['generator'] = Router::GetPath('/');
/**
* Формируем записи RSS
*/
$topics = array();
foreach ($aTopics as $oTopic) {
$item['title'] = $oTopic->getTitle();
$item['guid'] = $oTopic->getUrl();
$item['link'] = $oTopic->getUrl();
$item['description'] = $this->getTopicText($oTopic);
$item['pubDate'] = $oTopic->getDateAdd();
$item['author'] = $oTopic->getUser()->getLogin();
$item['category'] = htmlspecialchars($oTopic->getTags());
$topics[] = $item;
}
/**
* Формируем ответ
*/
$this->InitRss();
$this->Viewer_Assign('aChannel', $aChannel);
$this->Viewer_Assign('aItems', $topics);
$this->SetTemplateAction('index');
}
Вывод RSS топиков по определенному тегу
RssTopicComments()
method
protected void RssTopicComments()
|
Source Code: /application/classes/actions/ActionRss.class.php#196 (show)
protected function RssTopicComments()
{
$sTopicId = $this->GetParam(0);
/**
* Топик существует?
*/
if (!($oTopic = $this->Topic_GetTopicById($sTopicId)) or !$oTopic->getPublish() or $oTopic->getBlog()->getType() == 'close') {
return parent::EventNotFound();
}
/**
* Получаем комментарии
*/
$aResult = $this->Comment_GetCommentsByFilter(array('target_id' => $oTopic->getId(),
'target_type' => 'topic',
'delete' => 0
), array('comment_id' => 'desc'), 1, 100);
$aComments = $aResult['collection'];
/**
* Формируем данные канала RSS
*/
$aChannel['title'] = Config::Get('view.name');
$aChannel['link'] = Router::GetPath('/');
$aChannel['description'] = Router::GetPath('/') . ' / RSS channel';
$aChannel['language'] = 'ru';
$aChannel['managingEditor'] = Config::Get('general.rss_editor_mail');
$aChannel['generator'] = Router::GetPath('/');
/**
* Формируем записи RSS
*/
$comments = array();
foreach ($aComments as $oComment) {
$item['title'] = 'Comments: ' . $oTopic->getTitle();
$item['guid'] = $oTopic->getUrl() . '#comment' . $oComment->getId();
$item['link'] = $oTopic->getUrl() . '#comment' . $oComment->getId();
$item['description'] = $oComment->getText();
$item['pubDate'] = $oComment->getDate();
$item['author'] = $oComment->getUser()->getLogin();
$item['category'] = 'comments';
$comments[] = $item;
}
/**
* Формируем ответ
*/
$this->InitRss();
$this->Viewer_Assign('aChannel', $aChannel);
$this->Viewer_Assign('aItems', $comments);
$this->SetTemplateAction('index');
}
Вывод RSS комментариев конкретного топика
getTopicText()
method
protected void getTopicText($oTopic)
| ||
$oTopic |
Source Code: /application/classes/actions/ActionRss.class.php#394 (show)
protected function getTopicText($oTopic)
{
$sText = $oTopic->getTextShort();
if ($oTopic->getTextShort() != $oTopic->getText()) {
$sText .= "<br><a href=\"{$oTopic->getUrl()}#cut\" title=\"{$this->Lang_Get('topic.read_more')}\">";
if ($oTopic->getCutText()) {
$sText .= htmlspecialchars($oTopic->getCutText());
} else {
$sText .= $this->Lang_Get('topic.read_more');
}
$sText .= "</a>";
}
return $sText;
}
Формирует текст топика для RSS