mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-05-17 00:08:17 +03:00
добвлен функционал по управлению статическими страницами
This commit is contained in:
parent
0940f66876
commit
e1309cf175
|
@ -394,7 +394,7 @@ class ActionBlog extends Action {
|
|||
}
|
||||
}
|
||||
/**
|
||||
* Проверяем есть ли заголовок топика, с заменой всех пробельных символов на "_"
|
||||
* Проверяем есть ли URL блога, с заменой всех пробельных символов на "_"
|
||||
*/
|
||||
$blogUrl=preg_replace("/\s+/",'_',getRequest('blog_url'));
|
||||
$_REQUEST['blog_url']=$blogUrl;
|
||||
|
|
|
@ -16,41 +16,270 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* Обработка статических страниц, здесь пока пусто :)
|
||||
* Обработка статических страниц
|
||||
*
|
||||
*/
|
||||
class ActionPage extends Action {
|
||||
protected $sUserLogin=null;
|
||||
|
||||
public function Init() {
|
||||
$this->SetDefaultEvent('about');
|
||||
protected $aBadPageUrl=array('admin');
|
||||
|
||||
public function Init() {
|
||||
|
||||
}
|
||||
|
||||
protected function RegisterEvent() {
|
||||
$this->AddEvent('about','EventAbout');
|
||||
$this->AddEvent('download','EventDownload');
|
||||
/**
|
||||
* Регистрируем евенты
|
||||
*
|
||||
*/
|
||||
protected function RegisterEvent() {
|
||||
$this->AddEvent('admin','EventAdmin');
|
||||
$this->AddEventPreg('/^[\w\-\_]*$/i','EventShowPage');
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**********************************************************************************
|
||||
************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
|
||||
**********************************************************************************
|
||||
*/
|
||||
|
||||
************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
|
||||
**********************************************************************************
|
||||
*/
|
||||
|
||||
/**
|
||||
* Просто выводим шаблон
|
||||
* Отображение страницы
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
protected function EventAbout() {
|
||||
$this->Viewer_AddHtmlTitle('О проекте');
|
||||
protected function EventShowPage() {
|
||||
if (!$this->sCurrentEvent) {
|
||||
/**
|
||||
* Показывает дефолтную страницу
|
||||
*/
|
||||
//а это какая страница?
|
||||
}
|
||||
/**
|
||||
* Составляем полный URL страницы для поиска по нему в БД
|
||||
*/
|
||||
$sUrlFull=join('/',$this->GetParams());
|
||||
if ($sUrlFull!='') {
|
||||
$sUrlFull=$this->sCurrentEvent.'/'.$sUrlFull;
|
||||
} else {
|
||||
$sUrlFull=$this->sCurrentEvent;
|
||||
}
|
||||
/**
|
||||
* Ищем страничку в БД
|
||||
*/
|
||||
if (!($oPage=$this->Page_GetPageByUrlFull($sUrlFull,1))) {
|
||||
return $this->EventNotFound();
|
||||
}
|
||||
/**
|
||||
* Заполняем HTML теги и SEO
|
||||
*/
|
||||
$this->Viewer_AddHtmlTitle($oPage->getTitle());
|
||||
if ($oPage->getSeoKyewords()) {
|
||||
$this->Viewer_SetHtmlKeywords($oPage->getSeoKyewords());
|
||||
}
|
||||
if ($oPage->getSeoDescription()) {
|
||||
$this->Viewer_SetHtmlDescription($oPage->getSeoDescription());
|
||||
}
|
||||
|
||||
$this->Viewer_Assign('oPage',$oPage);
|
||||
/**
|
||||
* Устанавливаем шаблон для вывода
|
||||
*/
|
||||
$this->SetTemplateAction('page');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Просто выводим шаблон
|
||||
* Админка статическими страницами
|
||||
*
|
||||
*/
|
||||
protected function EventDownload() {
|
||||
$this->Viewer_AddHtmlTitle('Скачать движок');
|
||||
}
|
||||
protected function EventAdmin() {
|
||||
/**
|
||||
* Если пользователь не авторизован и не админ, то выкидываем его
|
||||
*/
|
||||
$this->oUserCurrent=$this->User_GetUserCurrent();
|
||||
if (!$this->oUserCurrent or !$this->oUserCurrent->isAdministrator()) {
|
||||
return $this->EventNotFound();
|
||||
}
|
||||
|
||||
$this->Viewer_AddHtmlTitle('Управление страницами');
|
||||
/**
|
||||
* Обработка создания новой странички
|
||||
*/
|
||||
if (getRequest('submit_page_save')) {
|
||||
if (!getRequest('page_id')) {
|
||||
$this->SubmitAddPage();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Обработка показа странички для редактирования
|
||||
*/
|
||||
if ($this->GetParam(0)=='edit') {
|
||||
if ($oPageEdit=$this->Page_GetPageById($this->GetParam(1))) {
|
||||
if (!getRequest('submit_page_save')) {
|
||||
$_REQUEST['page_title']=$oPageEdit->getTitle();
|
||||
$_REQUEST['page_pid']=$oPageEdit->getPid();
|
||||
$_REQUEST['page_url']=$oPageEdit->getUrl();
|
||||
$_REQUEST['topic_text']=$oPageEdit->getText();
|
||||
$_REQUEST['page_seo_keywords']=$oPageEdit->getSeoKyewords();
|
||||
$_REQUEST['page_seo_description']=$oPageEdit->getSeoDescription();
|
||||
$_REQUEST['page_active']=$oPageEdit->getActive();
|
||||
$_REQUEST['page_id']=$oPageEdit->getId();
|
||||
} else {
|
||||
/**
|
||||
* Если отправили форму с редактированием, то обрабатываем её
|
||||
*/
|
||||
$this->SubmitEditPage($oPageEdit);
|
||||
}
|
||||
$this->Viewer_Assign('oPageEdit',$oPageEdit);
|
||||
} else {
|
||||
$this->Message_AddError('Страница для редактирования не найдена','Ошибка');
|
||||
$this->SetParam(0,null);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Обработка удаления страницы
|
||||
* Замечание: если используется тип таблиц MyISAM, а InnoDB то возможно некорректное удаление вложенных страниц
|
||||
*/
|
||||
if ($this->GetParam(0)=='delete') {
|
||||
if ($this->Page_deletePageById($this->GetParam(1))) {
|
||||
$this->Message_AddNotice('Страница удалена');
|
||||
} else {
|
||||
$this->Message_AddError('Возникла ошибка при удалении страницы','Ошибка');
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Получаем и загружаем список всех страниц
|
||||
*/
|
||||
$aPages=$this->Page_GetPages();
|
||||
$this->Viewer_Assign('aPages',$aPages);
|
||||
}
|
||||
/**
|
||||
* Обработка отправки формы при редактировании страницы
|
||||
*
|
||||
* @param unknown_type $oPageEdit
|
||||
*/
|
||||
protected function SubmitEditPage($oPageEdit) {
|
||||
/**
|
||||
* Проверяем корректность полей
|
||||
*/
|
||||
if (!$this->CheckPageFields()) {
|
||||
return ;
|
||||
}
|
||||
/**
|
||||
* Обновляем свойства страницы
|
||||
*/
|
||||
$oPage=new PageEntity_Page();
|
||||
$oPageEdit->setActive(getRequest('page_active') ? 1 : 0);
|
||||
$oPageEdit->setDateEdit(date("Y-m-d H:i:s"));
|
||||
if (getRequest('page_pid')==0) {
|
||||
$oPageEdit->setUrlFull(getRequest('page_url'));
|
||||
$oPageEdit->setPid(null);
|
||||
} else {
|
||||
$oPageEdit->setPid(getRequest('page_pid'));
|
||||
$oPageParent=$this->Page_GetPageById(getRequest('page_pid'));
|
||||
$oPageEdit->setUrlFull($oPageParent->getUrlFull().'/'.getRequest('page_url'));
|
||||
}
|
||||
$oPageEdit->setSeoDescription(getRequest('page_seo_description'));
|
||||
$oPageEdit->setSeoKyewords(getRequest('page_seo_keywords'));
|
||||
$oPageEdit->setText(getRequest('topic_text'));
|
||||
$oPageEdit->setTitle(getRequest('page_title'));
|
||||
$oPageEdit->setUrl(getRequest('page_url'));
|
||||
/**
|
||||
* Обновляем страницу
|
||||
*/
|
||||
if ($this->Page_UpdatePage($oPageEdit)) {
|
||||
$this->Page_RebuildUrlFull($oPageEdit);
|
||||
$this->Message_AddNotice('Страница обновлена');
|
||||
$this->SetParam(0,null);
|
||||
$this->SetParam(1,null);
|
||||
} else {
|
||||
$this->Message_AddError('Внутреняя ошибка, повторите позже','Ошибка');
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Обработка отправки формы добавления новой страницы
|
||||
*
|
||||
*/
|
||||
protected function SubmitAddPage() {
|
||||
/**
|
||||
* Проверяем корректность полей
|
||||
*/
|
||||
if (!$this->CheckPageFields()) {
|
||||
return ;
|
||||
}
|
||||
/**
|
||||
* Заполняем свойства
|
||||
*/
|
||||
$oPage=new PageEntity_Page();
|
||||
$oPage->setActive(getRequest('page_active') ? 1 : 0);
|
||||
$oPage->setDateAdd(date("Y-m-d H:i:s"));
|
||||
if (getRequest('page_pid')==0) {
|
||||
$oPage->setUrlFull(getRequest('page_url'));
|
||||
$oPage->setPid(null);
|
||||
} else {
|
||||
$oPage->setPid(getRequest('page_pid'));
|
||||
$oPageParent=$this->Page_GetPageById(getRequest('page_pid'));
|
||||
$oPage->setUrlFull($oPageParent->getUrlFull().'/'.getRequest('page_url'));
|
||||
}
|
||||
$oPage->setSeoDescription(getRequest('page_seo_description'));
|
||||
$oPage->setSeoKyewords(getRequest('page_seo_keywords'));
|
||||
$oPage->setText(getRequest('topic_text'));
|
||||
$oPage->setTitle(getRequest('page_title'));
|
||||
$oPage->setUrl(getRequest('page_url'));
|
||||
/**
|
||||
* Добавляем страницу
|
||||
*/
|
||||
if ($this->Page_AddPage($oPage)) {
|
||||
$this->Message_AddNotice('Новая страница добавлена');
|
||||
$this->SetParam(0,null);
|
||||
} else {
|
||||
$this->Message_AddError('Внутреняя ошибка, повторите позже','Ошибка');
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Проверка полей на корректность
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
protected function CheckPageFields() {
|
||||
$bOk=true;
|
||||
/**
|
||||
* Проверяем есть ли заголовок топика
|
||||
*/
|
||||
if (!func_check(getRequest('page_title'),'text',2,200)) {
|
||||
$this->Message_AddError('Название страницы должно быть от 2 до 200 символов','Ошибка');
|
||||
$bOk=false;
|
||||
}
|
||||
/**
|
||||
* Проверяем есть ли заголовок топика, с заменой всех пробельных символов на "_"
|
||||
*/
|
||||
$pageUrl=preg_replace("/\s+/",'_',getRequest('page_url'));
|
||||
$_REQUEST['page_url']=$pageUrl;
|
||||
if (!func_check(getRequest('page_url'),'login',1,50)) {
|
||||
$this->Message_AddError('URL должен быть от 1 до 50 символов и только на латинице + цифры и знаки "-", "_"','Ошибка');
|
||||
$bOk=false;
|
||||
}
|
||||
/**
|
||||
* Проверяем на счет плохих УРЛов
|
||||
*/
|
||||
if (in_array(getRequest('page_url'),$this->aBadPageUrl)) {
|
||||
$this->Message_AddError('URL должен отличаться от: '.join(',',$this->aBadPageUrl),'Ошибка');
|
||||
$bOk=false;
|
||||
}
|
||||
/**
|
||||
* Проверяем есть ли содержание страницы
|
||||
*/
|
||||
if (!func_check(getRequest('topic_text'),'text',1,50000)) {
|
||||
$this->Message_AddError('Текст страницы должен быть от 1 до 50000 символов','Ошибка');
|
||||
$bOk=false;
|
||||
}
|
||||
/**
|
||||
* Проверяем страницу в которую хотим вложить
|
||||
*/
|
||||
if (getRequest('page_pid')!=0 and !($oPageParent=$this->Page_GetPageById(getRequest('page_pid')))) {
|
||||
$this->Message_AddError('Неверно выбрана страница для вложения','Ошибка');
|
||||
$bOk=false;
|
||||
}
|
||||
|
||||
return $bOk;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -176,6 +176,16 @@ abstract class Action extends Object {
|
|||
return isset($this->aParams[$iOffset]) ? $this->aParams[$iOffset] : $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает список параметров из УРЛ
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
public function GetParams() {
|
||||
return $this->aParams;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Установить значение параметра(эмуляция параметра в URL).
|
||||
* После установки занова считывает параметры из роутера - для корректной работы
|
||||
|
|
143
classes/modules/page/Page.class.php
Normal file
143
classes/modules/page/Page.class.php
Normal file
|
@ -0,0 +1,143 @@
|
|||
<?
|
||||
/*-------------------------------------------------------
|
||||
*
|
||||
* LiveStreet Engine Social Networking
|
||||
* Copyright © 2008 Mzhelskiy Maxim
|
||||
*
|
||||
*--------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreet.ru
|
||||
* Contact e-mail: rus.engine@gmail.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
set_include_path(get_include_path().PATH_SEPARATOR.dirname(__FILE__));
|
||||
require_once('mapper/Page.mapper.class.php');
|
||||
|
||||
/**
|
||||
* Модуль статических страниц
|
||||
*
|
||||
*/
|
||||
class Page extends Module {
|
||||
protected $oMapper;
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
*/
|
||||
public function Init() {
|
||||
$this->oMapper=new Mapper_Page($this->Database_GetConnect());
|
||||
}
|
||||
/**
|
||||
* Добавляет страницу
|
||||
*
|
||||
* @param PageEntity_Page $oPage
|
||||
* @return unknown
|
||||
*/
|
||||
public function AddPage(PageEntity_Page $oPage) {
|
||||
return $this->oMapper->AddPage($oPage);
|
||||
}
|
||||
/**
|
||||
* Обновляет страницу
|
||||
*
|
||||
* @param PageEntity_Page $oPage
|
||||
* @return unknown
|
||||
*/
|
||||
public function UpdatePage(PageEntity_Page $oPage) {
|
||||
return $this->oMapper->UpdatePage($oPage);
|
||||
}
|
||||
/**
|
||||
* Получает страницу по полному УРЛу
|
||||
*
|
||||
* @param unknown_type $sUrlFull
|
||||
*/
|
||||
public function GetPageByUrlFull($sUrlFull,$iActive=1) {
|
||||
return $this->oMapper->GetPageByUrlFull($sUrlFull,$iActive);
|
||||
}
|
||||
/**
|
||||
* Получает страницу по её айдишнику
|
||||
*
|
||||
* @param unknown_type $sId
|
||||
* @return unknown
|
||||
*/
|
||||
public function GetPageById($sId) {
|
||||
return $this->oMapper->GetPageById($sId);
|
||||
}
|
||||
/**
|
||||
* Получает список всех страниц ввиде дерева
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
public function GetPages() {
|
||||
$aPages=array();
|
||||
$aPagesRow=$this->oMapper->GetPages();
|
||||
if (count($aPagesRow)) {
|
||||
$aPages=$this->BuildPagesRecursive($aPagesRow);
|
||||
}
|
||||
return $aPages;
|
||||
}
|
||||
/**
|
||||
* Строит дерево страниц
|
||||
*
|
||||
* @param unknown_type $aPages
|
||||
* @param unknown_type $bBegin
|
||||
* @return unknown
|
||||
*/
|
||||
protected function BuildPagesRecursive($aPages,$bBegin=true) {
|
||||
static $aResultPages;
|
||||
static $iLevel;
|
||||
if ($bBegin) {
|
||||
$aResultCommnets=array();
|
||||
$iLevel=0;
|
||||
}
|
||||
foreach ($aPages as $aPage) {
|
||||
$aTemp=$aPage;
|
||||
$aTemp['level']=$iLevel;
|
||||
unset($aTemp['childNodes']);
|
||||
$aResultPages[]=new PageEntity_Page($aTemp);
|
||||
if (isset($aPage['childNodes']) and count($aPage['childNodes'])>0) {
|
||||
$iLevel++;
|
||||
$this->BuildPagesRecursive($aPage['childNodes'],false);
|
||||
}
|
||||
}
|
||||
$iLevel--;
|
||||
return $aResultPages;
|
||||
}
|
||||
/**
|
||||
* Рекурсивно обновляет полный URL у всех дочерних страниц(веток)
|
||||
*
|
||||
* @param unknown_type $oPageStart
|
||||
*/
|
||||
public function RebuildUrlFull($oPageStart) {
|
||||
$aPages=$this->GetPagesByPid($oPageStart->getId());
|
||||
foreach ($aPages as $oPage) {
|
||||
$oPage->setUrlFull($oPageStart->getUrlFull().'/'.$oPage->getUrl());
|
||||
$this->UpdatePage($oPage);
|
||||
$this->RebuildUrlFull($oPage);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Получает список дочерних страниц первого уровня
|
||||
*
|
||||
* @param unknown_type $sPid
|
||||
* @return unknown
|
||||
*/
|
||||
public function GetPagesByPid($sPid) {
|
||||
return $this->oMapper->GetPagesByPid($sPid);
|
||||
}
|
||||
/**
|
||||
* Удаляет страницу по её айдишнику
|
||||
* Если тип таблиц БД InnoDB, то удалятся и все дочернии страницы
|
||||
*
|
||||
* @param unknown_type $sId
|
||||
* @return unknown
|
||||
*/
|
||||
public function deletePageById($sId) {
|
||||
return $this->oMapper->deletePageById($sId);
|
||||
}
|
||||
}
|
||||
?>
|
96
classes/modules/page/entity/Page.entity.class.php
Normal file
96
classes/modules/page/entity/Page.entity.class.php
Normal file
|
@ -0,0 +1,96 @@
|
|||
<?
|
||||
/*-------------------------------------------------------
|
||||
*
|
||||
* LiveStreet Engine Social Networking
|
||||
* Copyright © 2008 Mzhelskiy Maxim
|
||||
*
|
||||
*--------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreet.ru
|
||||
* Contact e-mail: rus.engine@gmail.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class PageEntity_Page extends Entity
|
||||
{
|
||||
public function getId() {
|
||||
return $this->_aData['page_id'];
|
||||
}
|
||||
public function getPid() {
|
||||
return $this->_aData['page_pid'];
|
||||
}
|
||||
public function getUrl() {
|
||||
return $this->_aData['page_url'];
|
||||
}
|
||||
public function getUrlFull() {
|
||||
return $this->_aData['page_url_full'];
|
||||
}
|
||||
public function getTitle() {
|
||||
return $this->_aData['page_title'];
|
||||
}
|
||||
public function getText() {
|
||||
return $this->_aData['page_text'];
|
||||
}
|
||||
public function getDateAdd() {
|
||||
return $this->_aData['page_date_add'];
|
||||
}
|
||||
public function getDateEdit() {
|
||||
return $this->_aData['page_date_edit'];
|
||||
}
|
||||
public function getSeoKyewords() {
|
||||
return $this->_aData['page_seo_keywords'];
|
||||
}
|
||||
public function getSeoDescription() {
|
||||
return $this->_aData['page_seo_description'];
|
||||
}
|
||||
public function getActive() {
|
||||
return $this->_aData['page_active'];
|
||||
}
|
||||
|
||||
public function getLevel() {
|
||||
return $this->_aData['level'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public function setId($data) {
|
||||
$this->_aData['page_id']=$data;
|
||||
}
|
||||
public function setPid($data) {
|
||||
$this->_aData['page_pid']=$data;
|
||||
}
|
||||
public function setUrl($data) {
|
||||
$this->_aData['page_url']=$data;
|
||||
}
|
||||
public function setUrlFull($data) {
|
||||
$this->_aData['page_url_full']=$data;
|
||||
}
|
||||
public function setTitle($data) {
|
||||
$this->_aData['page_title']=$data;
|
||||
}
|
||||
public function setText($data) {
|
||||
$this->_aData['page_text']=$data;
|
||||
}
|
||||
public function setDateAdd($data) {
|
||||
$this->_aData['page_date_add']=$data;
|
||||
}
|
||||
public function setDateEdit($data) {
|
||||
$this->_aData['page_date_edit']=$data;
|
||||
}
|
||||
public function setSeoKyewords($data) {
|
||||
$this->_aData['page_seo_keywords']=$data;
|
||||
}
|
||||
public function setSeoDescription($data) {
|
||||
$this->_aData['page_seo_description']=$data;
|
||||
}
|
||||
public function setActive($data) {
|
||||
$this->_aData['page_active']=$data;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
117
classes/modules/page/mapper/Page.mapper.class.php
Normal file
117
classes/modules/page/mapper/Page.mapper.class.php
Normal file
|
@ -0,0 +1,117 @@
|
|||
<?
|
||||
/*-------------------------------------------------------
|
||||
*
|
||||
* LiveStreet Engine Social Networking
|
||||
* Copyright © 2008 Mzhelskiy Maxim
|
||||
*
|
||||
*--------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreet.ru
|
||||
* Contact e-mail: rus.engine@gmail.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class Mapper_Page extends Mapper {
|
||||
|
||||
public function AddPage(PageEntity_Page $oPage) {
|
||||
$sql = "INSERT INTO ".DB_TABLE_PAGE."
|
||||
(page_pid,
|
||||
page_url,
|
||||
page_url_full,
|
||||
page_title,
|
||||
page_text,
|
||||
page_date_add,
|
||||
page_seo_keywords,
|
||||
page_seo_description,
|
||||
page_active
|
||||
)
|
||||
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?d)
|
||||
";
|
||||
if ($iId=$this->oDb->query($sql,$oPage->getPid(),$oPage->getUrl(),$oPage->getUrlFull(),$oPage->getTitle(),$oPage->getText(),$oPage->getDateAdd(),$oPage->getSeoKyewords(),$oPage->getSeoDescription(),$oPage->getActive()))
|
||||
{
|
||||
return $iId;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function UpdatePage(PageEntity_Page $oPage) {
|
||||
$sql = "UPDATE ".DB_TABLE_PAGE."
|
||||
SET page_pid = ? ,
|
||||
page_url = ? ,
|
||||
page_url_full = ? ,
|
||||
page_title = ? ,
|
||||
page_text = ? ,
|
||||
page_date_edit = ? ,
|
||||
page_seo_keywords = ? ,
|
||||
page_seo_description = ? ,
|
||||
page_active = ?
|
||||
WHERE page_id = ?d
|
||||
";
|
||||
if ($this->oDb->query($sql,$oPage->getPid(),$oPage->getUrl(),$oPage->getUrlFull(),$oPage->getTitle(),$oPage->getText(),$oPage->getDateEdit(),$oPage->getSeoKyewords(),$oPage->getSeoDescription(),$oPage->getActive(),$oPage->getId()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function GetPageByUrlFull($sUrlFull,$iActive) {
|
||||
$sql = "SELECT * FROM ".DB_TABLE_PAGE." WHERE page_url_full = ? and page_active = ?d ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sUrlFull,$iActive)) {
|
||||
return new PageEntity_Page($aRow);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function GetPageById($sId) {
|
||||
$sql = "SELECT * FROM ".DB_TABLE_PAGE." WHERE page_id = ? ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sId)) {
|
||||
return new PageEntity_Page($aRow);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function deletePageById($sId) {
|
||||
$sql = "DELETE FROM ".DB_TABLE_PAGE." WHERE page_id = ? ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sId)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function GetPages() {
|
||||
$sql = "SELECT
|
||||
*,
|
||||
page_id as ARRAY_KEY,
|
||||
page_pid as PARENT_KEY
|
||||
FROM
|
||||
".DB_TABLE_PAGE."
|
||||
ORDER by page_title asc;
|
||||
";
|
||||
if ($aRows=$this->oDb->select($sql)) {
|
||||
return $aRows;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function GetPagesByPid($sPid) {
|
||||
$sql = "SELECT
|
||||
*
|
||||
FROM
|
||||
".DB_TABLE_PAGE."
|
||||
WHERE
|
||||
page_pid = ? ";
|
||||
$aResult=array();
|
||||
if ($aRows=$this->oDb->select($sql,$sPid)) {
|
||||
foreach ($aRows as $aRow) {
|
||||
$aResult[]=new PageEntity_Page($aRow);
|
||||
}
|
||||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
|
@ -40,6 +40,19 @@ class Viewer extends Module {
|
|||
* @var unknown_type
|
||||
*/
|
||||
protected $sHtmlTitle=SITE_NAME;
|
||||
/**
|
||||
* SEO ключевые слова страницы
|
||||
*
|
||||
* @var unknown_type
|
||||
*/
|
||||
protected $sHtmlKeywords=SITE_KYEWORDS;
|
||||
/**
|
||||
* SEO описание страницы
|
||||
*
|
||||
* @var unknown_type
|
||||
*/
|
||||
protected $sHtmlDescription=SITE_DESCRIPTION;
|
||||
|
||||
/**
|
||||
* Разделитель заголовка HTML страницы
|
||||
*
|
||||
|
@ -102,6 +115,8 @@ class Viewer extends Module {
|
|||
* Загружаем HTML заголовки
|
||||
*/
|
||||
$this->Assign("sHtmlTitle",htmlspecialchars($this->sHtmlTitle));
|
||||
$this->Assign("sHtmlKeywords",htmlspecialchars($this->sHtmlKeywords));
|
||||
$this->Assign("sHtmlDescription",htmlspecialchars($this->sHtmlDescription));
|
||||
|
||||
}
|
||||
|
||||
|
@ -254,6 +269,22 @@ class Viewer extends Module {
|
|||
*/
|
||||
public function GetHtmlTitle() {
|
||||
return $this->sHtmlTitle;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ключевые слова keywords
|
||||
*
|
||||
* @param string $sText
|
||||
*/
|
||||
public function SetHtmlKeywords($sText) {
|
||||
$this->sHtmlKeywords=$sText;
|
||||
}
|
||||
/**
|
||||
* Устанавливает описание страницы desciption
|
||||
*
|
||||
* @param string $sText
|
||||
*/
|
||||
public function SetHtmlDescription($sText) {
|
||||
$this->sHtmlDescription=$sText;
|
||||
}
|
||||
/**
|
||||
* Формирует постраничный вывод
|
||||
|
|
|
@ -102,6 +102,8 @@ define('ACL_CAN_VOTE_USER',-1); // порог рейтинга при котор
|
|||
* Прочие настройки
|
||||
*/
|
||||
define('SITE_NAME','LiveStreet - бесплатный движок социальной сети'); // название сайта
|
||||
define('SITE_KYEWORDS','движок, livestreet, блоги, социальная сеть, бесплатный, php'); // seo keywords
|
||||
define('SITE_DESCRIPTION','LiveStreet - официальный сайт бесплатного движка социальной сети'); // seo description
|
||||
define('SITE_CLOSE_MODE',false); // использовать закрытый режим работы сайта, сайт будет доступен только авторизованным пользователям
|
||||
define('USER_USE_ACTIVATION',false); // использовать активацию при регистрации или нет
|
||||
define('USER_USE_INVITE',false); // использовать режим регистрации по приглашению или нет. Если использовать, то регистрация будет доступна ТОЛЬКО по приглашениям!
|
||||
|
|
|
@ -42,4 +42,5 @@ define('DB_TABLE_TOPIC_QUESTION_VOTE',DB_PREFIX_TABLE.'topic_question_vote');
|
|||
define('DB_TABLE_USER_ADMINISTRATOR',DB_PREFIX_TABLE.'user_administrator');
|
||||
define('DB_TABLE_TOPIC_COMMENT_ONLINE',DB_PREFIX_TABLE.'topic_comment_online');
|
||||
define('DB_TABLE_INVITE',DB_PREFIX_TABLE.'invite');
|
||||
define('DB_TABLE_PAGE',DB_PREFIX_TABLE.'page');
|
||||
?>
|
33
patch.sql
33
patch.sql
|
@ -142,6 +142,39 @@ ALTER TABLE `prefix_user` ADD `user_settings_notice_reply_comment` TINYINT( 1 )
|
|||
|
||||
ALTER TABLE `prefix_blog` ADD INDEX ( `blog_title` )
|
||||
|
||||
|
||||
--
|
||||
-- Структура таблицы `prefix_page`
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `prefix_page` (
|
||||
`page_id` int(11) unsigned NOT NULL auto_increment,
|
||||
`page_pid` int(11) unsigned default NULL,
|
||||
`page_url` varchar(50) NOT NULL,
|
||||
`page_url_full` varchar(254) NOT NULL,
|
||||
`page_title` varchar(200) NOT NULL,
|
||||
`page_text` text NOT NULL,
|
||||
`page_date_add` datetime NOT NULL,
|
||||
`page_date_edit` datetime default NULL,
|
||||
`page_seo_keywords` varchar(250) default NULL,
|
||||
`page_seo_description` varchar(250) default NULL,
|
||||
`page_active` tinyint(1) unsigned NOT NULL default '1',
|
||||
PRIMARY KEY (`page_id`),
|
||||
KEY `page_pid` (`page_pid`),
|
||||
KEY `page_url_full` (`page_url_full`,`page_active`),
|
||||
KEY `page_title` (`page_title`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
--
|
||||
-- Ограничения внешнего ключа сохраненных таблиц
|
||||
--
|
||||
|
||||
--
|
||||
-- Ограничения внешнего ключа таблицы `prefix_page`
|
||||
--
|
||||
ALTER TABLE `prefix_page`
|
||||
ADD CONSTRAINT `prefix_page_fk` FOREIGN KEY (`page_pid`) REFERENCES `prefix_page` (`page_id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
|
||||
|
||||
--
|
||||
|
|
124
templates/skin/habra/actions/ActionPage/add.tpl
Normal file
124
templates/skin/habra/actions/ActionPage/add.tpl
Normal file
|
@ -0,0 +1,124 @@
|
|||
<div id="window_load_img">
|
||||
<form method="POST" action="" enctype="multipart/form-data" id="form_upload_img" >
|
||||
<table width="500px" border="0">
|
||||
<tr>
|
||||
<th align="center" colspan="2">Вставка изображения</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Файл:</td>
|
||||
<td width="100%"><input type="file" name="img_file" style="width: 100%;" value=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Ссылка:</td>
|
||||
<td><input type="text" name="img_url" value="http://" style="width: 100%;">
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Выравнивание:</td>
|
||||
|
||||
<td>
|
||||
<select name="align">
|
||||
<option value="">нет</option>
|
||||
<option value="left">слева</option>
|
||||
<option value="right">справа</option>
|
||||
</select>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Описание:</td>
|
||||
<td><input type="text" name="title" style="width: 100%;"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<input type="button" value="Загрузить" onclick="ajaxUploadImg(document.getElementById('form_upload_img'));">
|
||||
<input type="button" value="Отмена" onclick="closeWindow('window_load_img'); return false;">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="backoffice">
|
||||
|
||||
<form action="" method="POST" id="thisform" enctype="multipart/form-data">
|
||||
|
||||
<label for="page_pid">Вложить в</label>
|
||||
<select name="page_pid" id="page_pid" style="width: 100%;">
|
||||
<option value="0"></option>
|
||||
{foreach from=$aPages item=oPage}
|
||||
<option style="margin-left: {$oPage->getLevel()*20}px;" value="{$oPage->getId()}" {if $_aRequest.page_pid==$oPage->getId()}selected{/if}>{$oPage->getTitle()}(/{$oPage->getUrlFull()}/)</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
<br /><span class="form_note_red"></span></p>
|
||||
|
||||
<p>
|
||||
<label for="page_title">Название:</label>
|
||||
<input type="text" id="page_title" name="page_title" value="{$_aRequest.page_title}" style="width: 100%;" /><br />
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<label for="page_url">URL:</label>
|
||||
<input type="text" id="page_url" name="page_url" value="{$_aRequest.page_url}" style="width: 100%;" /><br />
|
||||
</p>
|
||||
|
||||
<label for="topic_text">Текст:</label>
|
||||
|
||||
<div class="panel_topic_form" style="background: #eaecea; ">
|
||||
<select onchange="voidPutTag2('topic_text',this.value);" tabindex="-1">
|
||||
<option value="" class="title">Заголовок</option>
|
||||
<option value="h4">H4</option>
|
||||
<option value="h5">H5</option>
|
||||
<option value="h6">H6</option>
|
||||
</select>
|
||||
|
||||
<a href="#" onclick="voidPutB('topic_text'); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/img/bold_ru.gif" width="20" height="20" title="жирный"></a>
|
||||
<a href="#" onclick="voidPutI('topic_text'); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/img/italic_ru.gif" width="20" height="20" title="курсив"></a>
|
||||
<a href="#" onclick="voidPutU('topic_text'); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/img/underline_ru.gif" width="20" height="20" title="подчеркнуть"></a>
|
||||
<a href="#" onclick="voidPutS('topic_text'); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/img/strikethrough.gif" width="20" height="20" title="зачеркнутый"></a>
|
||||
|
||||
<a href="#" onclick="voidPutURL('topic_text'); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/img/link.gif" width="20" height="20" title="вставить ссылку"></a>
|
||||
<a href="#" onclick="voidPutCode('topic_text'); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/img/code.gif" width="30" height="20" title="код"></a>
|
||||
<a href="#" onclick="voidPutTag2('topic_text','video'); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/img/video.gif" width="20" height="20" title="видео"></a>
|
||||
|
||||
|
||||
<a href="#" onclick="showWindow('window_load_img'); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/img/img.gif" width="20" height="20" title="изображение"></a>
|
||||
|
||||
|
||||
<a href="#" onclick="voidPutTag('topic_text','<cut>'); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/img/cut.gif" width="20" height="20" title="кат"></a>
|
||||
</div>
|
||||
<textarea style="width: 100%;" name="topic_text" id="topic_text" rows="20">{$_aRequest.topic_text}</textarea><br>
|
||||
|
||||
|
||||
<span class="form_note">Разрешены ВСЕ html-теги, перевод строки ставится автоматически</span>
|
||||
<br />
|
||||
|
||||
|
||||
<p>
|
||||
<label for="page_seo_keywords">SEO keywords:</label>
|
||||
<input type="text" id="page_seo_keywords" name="page_seo_keywords" value="{$_aRequest.page_seo_keywords}" style="width: 100%;" /><br />
|
||||
<span class="form_note">Ключевые слова для SEO-оптимизации</span>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<label for="page_seo_description">SEO description:</label>
|
||||
<input type="text" id="page_seo_description" name="page_seo_description" value="{$_aRequest.page_seo_description}" style="width: 100%;" /><br />
|
||||
<span class="form_note">Описание для SEO-оптимизации</span>
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
<input type="checkbox" id="page_active" name="page_active" value="1" {if $_aRequest.page_active==1}checked{/if}/>
|
||||
<label for="page_active"> — показывать страницу</label>
|
||||
<br />
|
||||
</p>
|
||||
|
||||
|
||||
<p class="l-bot">
|
||||
<input type="submit" name="submit_page_save" value="сохранить"> <input type="submit" name="submit_page_cancel" value="отмена" onclick="window.location='{$DIR_WEB_ROOT}/page/admin/'; return false;">
|
||||
</p>
|
||||
|
||||
<input type="hidden" name="page_id" value="{$_aRequest.page_id}">
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
67
templates/skin/habra/actions/ActionPage/admin.tpl
Normal file
67
templates/skin/habra/actions/ActionPage/admin.tpl
Normal file
|
@ -0,0 +1,67 @@
|
|||
{include file='header.tpl'}
|
||||
|
||||
{include file='system_message.tpl'}
|
||||
|
||||
|
||||
<BR>
|
||||
<h2>Управление статическими страницами</h2>
|
||||
|
||||
{if $aParams.0=='new'}
|
||||
<h4>Создание новой страницы</h4>
|
||||
{include file='actions/ActionPage/add.tpl'}
|
||||
{elseif $aParams.0=='edit'}
|
||||
<h4>Редактирование страницы «{$oPageEdit->getTitle()}»</h4>
|
||||
{include file='actions/ActionPage/add.tpl'}
|
||||
{else}
|
||||
<a href="{$DIR_WEB_ROOT}/page/admin/new/">добавить страницу</a>
|
||||
{/if}
|
||||
|
||||
|
||||
|
||||
<table width="100%" cellspacing="0" class="tbl">
|
||||
<tr>
|
||||
<th align="left">Название</th>
|
||||
<th align="center" width="250px">URL</th>
|
||||
<th align="center" width="50px">Активна</th>
|
||||
<th align="center" width="80px">Действие</th>
|
||||
</tr>
|
||||
|
||||
|
||||
{foreach from=$aPages item=oPage name=el2}
|
||||
{if $smarty.foreach.el2.iteration % 2 == 0}
|
||||
{assign var=className value=''}
|
||||
{else}
|
||||
{assign var=className value='colored'}
|
||||
{/if}
|
||||
<tr class="{$className}" onmouseover="this.className='colored_sel';" onmouseout="this.className='{$className}';">
|
||||
<td align="left" valign="middle">
|
||||
<img src="{$DIR_STATIC_SKIN}/img/{if $oPage->getLevel()==0}folder{else}new{/if}_16x16.gif" alt="" title="" border="0" style="margin-left: {$oPage->getLevel()*20}px;"/>
|
||||
<a href="{$DIR_WEB_ROOT}/page/{$oPage->getUrlFull()}/">{$oPage->getTitle()}</a>
|
||||
</td>
|
||||
<td align="left">
|
||||
/{$oPage->getUrlFull()}/
|
||||
</td>
|
||||
<td align="center">
|
||||
{if $oPage->getActive()}
|
||||
<img src="{$DIR_STATIC_SKIN}/img/vote_comment_up.gif" alt="Активна" title="Активна" border="0"/>
|
||||
{else}
|
||||
<img src="{$DIR_STATIC_SKIN}/img/vote_comment_up_gray.gif" alt="Не активна" title="Не активна" border="0"/>
|
||||
{/if}
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="{$DIR_WEB_ROOT}/page/admin/edit/{$oPage->getId()}/"><img src="{$DIR_STATIC_SKIN}/img/blog_edit.gif" alt="Редактировать" title="Редактировать" border="0"/></a>
|
||||
|
||||
<a href="{$DIR_WEB_ROOT}/page/admin/delete/{$oPage->getId()}/" onclick="return confirm('Вы действительно хотите удалить страницу «{$oPage->getTitle()}» со всеми вложенными страницами?');"><img src="{$DIR_STATIC_SKIN}/img/delete_16x16.gif" alt="Удалить" title="Удалить" border="0"/></a>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
|
||||
{include file='footer.tpl'}
|
||||
|
15
templates/skin/habra/actions/ActionPage/page.tpl
Normal file
15
templates/skin/habra/actions/ActionPage/page.tpl
Normal file
|
@ -0,0 +1,15 @@
|
|||
{include file='header.tpl'}
|
||||
|
||||
|
||||
|
||||
|
||||
<BR>
|
||||
<DIV class=tagsblock>
|
||||
|
||||
{$oPage->getText()}
|
||||
|
||||
</DIV>
|
||||
|
||||
|
||||
{include file='footer.tpl'}
|
||||
|
|
@ -152,4 +152,52 @@ div.comment_text2 {
|
|||
clear: both;
|
||||
margin-top: 1em;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
|
||||
table.tbl th
|
||||
{
|
||||
|
||||
vertical-align:bottom;
|
||||
|
||||
border: none;
|
||||
border-bottom: solid #B0C1D3 1px;
|
||||
|
||||
padding:.2em .6em .2em .65em;
|
||||
background:#e2e4e4;
|
||||
|
||||
font-size:0.9em;
|
||||
font-weight:normal;
|
||||
color:#6e6e6e;
|
||||
}
|
||||
table.tbl td
|
||||
{
|
||||
padding:6px 8px 6px 8px;
|
||||
border: none;
|
||||
border-right: solid #B0C1D3 1px;
|
||||
}
|
||||
table.tbl tr.colored td
|
||||
{
|
||||
background-color:#EEF6FB;
|
||||
|
||||
}
|
||||
table.tbl tr.colored_sel td
|
||||
{
|
||||
background-color:#D9FBC2;
|
||||
|
||||
}
|
||||
table.tbl
|
||||
{
|
||||
font-size:0.9em;
|
||||
border:none;
|
||||
margin:20px 0px 30px 0px;
|
||||
border-bottom:solid 1px #B0C1D3;
|
||||
}
|
||||
table.tbl td:first-child
|
||||
{
|
||||
border-left: solid #B0C1D3 1px
|
||||
}
|
||||
table.tbl td
|
||||
{
|
||||
/* <20><><EFBFBD> IE: */
|
||||
border-left: expression(previousSibling == null ? 'solid #B0C1D3 1px' : 'inherit');
|
||||
}
|
|
@ -3,14 +3,14 @@
|
|||
<HEAD>
|
||||
<TITLE>{$sHtmlTitle}</TITLE>
|
||||
<META http-equiv=Content-Type content="text/html; charset=UTF-8">
|
||||
<META name="DESCRIPTION" content="LiveStreet - официальный сайт бесплатного движка социальной сети">
|
||||
<META name="KEYWORDS" content="движок, livestreet, блоги, социальная сеть, бесплатный, php">
|
||||
<META name="DESCRIPTION" content="{$sHtmlDescription}">
|
||||
<META name="KEYWORDS" content="{$sHtmlKeywords}">
|
||||
|
||||
<LINK href="{$DIR_STATIC_SKIN}/img/favicon.ico" rel="shortcut icon">
|
||||
<LINK media=all href="{$DIR_STATIC_SKIN}/css/habrahabr.css?v=1" type=text/css rel=stylesheet>
|
||||
<LINK media=all href="{$DIR_STATIC_SKIN}/css/backoffice.css?v=2" type=text/css rel=stylesheet>
|
||||
<LINK media=all href="{$DIR_STATIC_SKIN}/css/global.css?v=4" type=text/css rel=stylesheet>
|
||||
<LINK media=all href="{$DIR_STATIC_SKIN}/css/my.css?v=3" type=text/css rel=stylesheet>
|
||||
<LINK media=all href="{$DIR_STATIC_SKIN}/css/my.css?v=4" type=text/css rel=stylesheet>
|
||||
<LINK media=all href="{$DIR_STATIC_SKIN}/css/Roar.css" type=text/css rel=stylesheet>
|
||||
<LINK media=all href="{$DIR_STATIC_SKIN}/css/Autocompleter.css" type=text/css rel=stylesheet>
|
||||
</HEAD>
|
||||
|
|
BIN
templates/skin/habra/img/delete_16x16.gif
Normal file
BIN
templates/skin/habra/img/delete_16x16.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 331 B |
BIN
templates/skin/habra/img/folder_16x16.gif
Normal file
BIN
templates/skin/habra/img/folder_16x16.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 363 B |
BIN
templates/skin/habra/img/new_16x16.gif
Normal file
BIN
templates/skin/habra/img/new_16x16.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 630 B |
Loading…
Reference in a new issue