1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-05-17 00:08:17 +03:00

добвлен функционал по управлению статическими страницами

This commit is contained in:
Mzhelskiy Maxim 2008-10-24 05:23:13 +00:00
parent 0940f66876
commit e1309cf175
18 changed files with 943 additions and 27 deletions

View file

@ -394,7 +394,7 @@ class ActionBlog extends Action {
}
}
/**
* Проверяем есть ли заголовок топика, с заменой всех пробельных символов на "_"
* Проверяем есть ли URL блога, с заменой всех пробельных символов на "_"
*/
$blogUrl=preg_replace("/\s+/",'_',getRequest('blog_url'));
$_REQUEST['blog_url']=$blogUrl;

View file

@ -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;
}
}
?>

View file

@ -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).
* После установки занова считывает параметры из роутера - для корректной работы

View 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);
}
}
?>

View 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;
}
}
?>

View 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;
}
}
?>

View file

@ -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;
}
/**
* Формирует постраничный вывод

View file

@ -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); // использовать режим регистрации по приглашению или нет. Если использовать, то регистрация будет доступна ТОЛЬКО по приглашениям!

View file

@ -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');
?>

View file

@ -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;
--

View 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>
&nbsp;
<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"> &mdash; показывать страницу</label>
<br />
</p>
<p class="l-bot">
<input type="submit" name="submit_page_save" value="сохранить">&nbsp; <input type="submit" name="submit_page_cancel" value="отмена" onclick="window.location='{$DIR_WEB_ROOT}/page/admin/'; return false;">&nbsp;
</p>
<input type="hidden" name="page_id" value="{$_aRequest.page_id}">
</form>
</div>

View 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>
&nbsp;
<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'}

View file

@ -0,0 +1,15 @@
{include file='header.tpl'}
<BR>
<DIV class=tagsblock>
{$oPage->getText()}
</DIV>
{include file='footer.tpl'}

View file

@ -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');
}

View file

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 630 B