Недавно познакомился с отличной CMS для создания простой соцсети, коллективных блогов — Livestreet. Система очень гибкая, построена грамотно, по сути — это framework, и позволяет достаточно легко расширить функционал. Планирую периодически писать в блоге заметки об этой системе.
Итак, понадобилось мне помимо удаления/редактирования топика — просто снимать его с публикации, при просмотре списка или единичной записи. \classes\actions\ActionTopic.class.php
Добавляем эвент unpublish
$this->AddEvent('unpublish','EventUnpublish');
/** * Регистрируем евенты * */ protected function RegisterEvent() { $this->AddEvent('add','EventAdd'); $this->AddEventPreg('/^published$/i','/^(page(\d+))?$/i','EventShowTopics'); $this->AddEventPreg('/^saved$/i','/^(page(\d+))?$/i','EventShowTopics'); $this->AddEvent('edit','EventEdit'); $this->AddEvent('unpublish','EventUnpublish'); $this->AddEvent('delete','EventDelete'); }
Реализуем сам метод EventUnpublish()
protected function EventUnpublish() { $this->Security_ValidateSendForm(); /** * Получаем номер топика из УРЛ и проверяем существует ли он */ $sTopicId=$this->GetParam(0); if (!($oTopic=$this->Topic_GetTopicById($sTopicId))) { return parent::EventNotFound(); } /** * проверяем есть ли право на удаление топика */ if (!$this->ACL_IsAllowDeleteTopic($oTopic,$this->oUserCurrent)) { return parent::EventNotFound(); }$oTopic->setPublish(0); if ($this->Topic_UpdateTopic($oTopic)) { if (!$oTopic->getPublish() and !$this->oUserCurrent->isAdministrator() and $this->oUserCurrent->getId()!=$oTopic->getUserId()) { Router::Location($oBlog->getUrlFull()); } Router::Location($oTopic->getUrl()); } else { $this->Message_AddErrorSingle($this->Lang_Get('system_error')); return Router::Action('error'); } /** * Перенаправляем на страницу со списком топиков из блога этого топика */ Router::Location($oTopic->getBlog()->getUrlFull()); }
Готово!
Теперь в файлах темы можно добавить ссылку на снятие с публикации
/templates/skin/new/topic.tpl /templates/skin/new/topic_list.tpl
<ul> <li><a href="{$oBlog->getUrlFull()}">{$oBlog->getTitle()|escape:'html'}</a> </li> {if $oUserCurrent and ($oUserCurrent->getId()==$oTopic->getUserId() or $oUserCurrent->isAdministrator() or $oBlog->getUserIsAdministrator() or $oBlog->getUserIsModerator() or $oBlog->getOwnerId()==$oUserCurrent->getId())} <li><a href="{cfg name='path.root.web'}/{$oTopic->getType()}/edit/{$oTopic->getId()}/" title="{$aLang.topic_edit}">{$aLang.topic_edit}</a></li> {/if} {if $oUserCurrent and ($oUserCurrent->isAdministrator() or $oBlog->getUserIsAdministrator() or $oBlog->getOwnerId()==$oUserCurrent->getId())} <li><a href="{router page='topic'}delete/{$oTopic->getId()}/?security_ls_key={$LIVESTREET_SECURITY_KEY}" title="{$aLang.topic_delete}" onclick="return confirm('{$aLang.topic_delete_confirm}');">{$aLang.topic_delete}</a></li> {/if} {if $oUserCurrent and ($oUserCurrent->isAdministrator() or $oBlog->getUserIsAdministrator() or $oBlog->getOwnerId()==$oUserCurrent->getId())} <li><a href="{router page='topic'}unpublish/{$oTopic->getId()}/?security_ls_key={$LIVESTREET_SECURITY_KEY}" title="unpublish">Unpublish</a></li> {/if} </ul>