diff --git a/plugins/page/classes/actions/ActionPage.class.php b/plugins/page/classes/actions/ActionPage.class.php
index b4e9535b..26b11962 100644
--- a/plugins/page/classes/actions/ActionPage.class.php
+++ b/plugins/page/classes/actions/ActionPage.class.php
@@ -116,6 +116,8 @@ class PluginPage_ActionPage extends ActionPlugin {
$_REQUEST['page_seo_keywords']=$oPageEdit->getSeoKeywords();
$_REQUEST['page_seo_description']=$oPageEdit->getSeoDescription();
$_REQUEST['page_active']=$oPageEdit->getActive();
+ $_REQUEST['page_main']=$oPageEdit->getMain();
+ $_REQUEST['page_sort']=$oPageEdit->getSort();
$_REQUEST['page_id']=$oPageEdit->getId();
} else {
/**
@@ -141,6 +143,30 @@ class PluginPage_ActionPage extends ActionPlugin {
$this->Message_AddError($this->Lang_Get('page_admin_action_delete_error'),$this->Lang_Get('error'));
}
}
+ /**
+ * Обработка изменения сортировки страницы
+ */
+ if ($this->GetParam(0)=='sort' and $oPage=$this->PluginPage_Page_GetPageById($this->GetParam(1))) {
+ $this->Security_ValidateSendForm();
+ $sWay=$this->GetParam(2)=='down' ? 'down' : 'up';
+ $iSortOld=$oPage->getSort();
+ if ($oPagePrev=$this->PluginPage_Page_GetNextPageBySort($iSortOld,$oPage->getPid(),$sWay)) {
+ $iSortNew=$oPagePrev->getSort();
+ $oPagePrev->setSort($iSortOld);
+ $this->PluginPage_Page_UpdatePage($oPagePrev);
+ } else {
+ if ($sWay=='down') {
+ $iSortNew=$iSortOld-1;
+ } else {
+ $iSortNew=$iSortOld+1;
+ }
+ }
+ /**
+ * Меняем значения сортировки местами
+ */
+ $oPage->setSort($iSortNew);
+ $this->PluginPage_Page_UpdatePage($oPage);
+ }
/**
* Получаем и загружаем список всех страниц
*/
@@ -172,6 +198,7 @@ class PluginPage_ActionPage extends ActionPlugin {
* Обновляем свойства страницы
*/
$oPageEdit->setActive(getRequest('page_active') ? 1 : 0);
+ $oPageEdit->setMain(getRequest('page_main') ? 1 : 0);
$oPageEdit->setDateEdit(date("Y-m-d H:i:s"));
if (getRequest('page_pid')==0) {
$oPageEdit->setUrlFull(getRequest('page_url'));
@@ -186,6 +213,7 @@ class PluginPage_ActionPage extends ActionPlugin {
$oPageEdit->setText(getRequest('page_text'));
$oPageEdit->setTitle(getRequest('page_title'));
$oPageEdit->setUrl(getRequest('page_url'));
+ $oPageEdit->setSort(getRequest('page_sort'));
/**
* Обновляем страницу
*/
@@ -214,6 +242,7 @@ class PluginPage_ActionPage extends ActionPlugin {
*/
$oPage=Engine::GetEntity('PluginPage_Page');
$oPage->setActive(getRequest('page_active') ? 1 : 0);
+ $oPage->setMain(getRequest('page_main') ? 1 : 0);
$oPage->setDateAdd(date("Y-m-d H:i:s"));
if (getRequest('page_pid')==0) {
$oPage->setUrlFull(getRequest('page_url'));
@@ -228,6 +257,7 @@ class PluginPage_ActionPage extends ActionPlugin {
$oPage->setText(getRequest('page_text'));
$oPage->setTitle(getRequest('page_title'));
$oPage->setUrl(getRequest('page_url'));
+ $oPage->setSort(getRequest('page_sort'));
/**
* Добавляем страницу
*/
@@ -284,6 +314,13 @@ class PluginPage_ActionPage extends ActionPlugin {
$this->Message_AddError($this->Lang_Get('page_create_parent_page_error'),$this->Lang_Get('error'));
$bOk=false;
}
+ /**
+ * Проверяем сортировку
+ */
+ if (getRequest('page_sort') and !is_numeric(getRequest('page_sort'))) {
+ $this->Message_AddError($this->Lang_Get('page_create_sort_error'),$this->Lang_Get('error'));
+ $bOk=false;
+ }
/**
* Выполнение хуков
*/
diff --git a/plugins/page/classes/modules/page/Page.class.php b/plugins/page/classes/modules/page/Page.class.php
index c65c91ad..7d66c61f 100644
--- a/plugins/page/classes/modules/page/Page.class.php
+++ b/plugins/page/classes/modules/page/Page.class.php
@@ -186,5 +186,23 @@ class PluginPage_ModulePage extends Module {
public function SetPagesPidToNull() {
return $this->oMapper->SetPagesPidToNull();
}
+ /**
+ * Получает слудующую по сортировке страницу
+ *
+ * @param unknown_type $iSort
+ * @param unknown_type $sWay
+ * @return unknown
+ */
+ public function GetNextPageBySort($iSort,$sPid,$sWay='up') {
+ return $this->oMapper->GetNextPageBySort($iSort,$sPid,$sWay);
+ }
+ /**
+ * Получает значение максимальной сртировки
+ *
+ * @return unknown
+ */
+ public function GetMaxSortByPid($sPid) {
+ return $this->oMapper->GetMaxSortByPid($sPid);
+ }
}
?>
\ No newline at end of file
diff --git a/plugins/page/classes/modules/page/entity/Page.entity.class.php b/plugins/page/classes/modules/page/entity/Page.entity.class.php
index 9021a087..70a6063f 100644
--- a/plugins/page/classes/modules/page/entity/Page.entity.class.php
+++ b/plugins/page/classes/modules/page/entity/Page.entity.class.php
@@ -49,6 +49,12 @@ class PluginPage_ModulePage_EntityPage extends Entity
}
public function getActive() {
return $this->_aData['page_active'];
+ }
+ public function getMain() {
+ return $this->_aData['page_main'];
+ }
+ public function getSort() {
+ return $this->_aData['page_sort'];
}
public function getLevel() {
@@ -91,5 +97,11 @@ class PluginPage_ModulePage_EntityPage extends Entity
public function setActive($data) {
$this->_aData['page_active']=$data;
}
+ public function setMain($data) {
+ $this->_aData['page_main']=$data;
+ }
+ public function setSort($data) {
+ $this->_aData['page_sort']=$data;
+ }
}
?>
\ No newline at end of file
diff --git a/plugins/page/classes/modules/page/mapper/Page.mapper.class.php b/plugins/page/classes/modules/page/mapper/Page.mapper.class.php
index bc764e77..e721c588 100644
--- a/plugins/page/classes/modules/page/mapper/Page.mapper.class.php
+++ b/plugins/page/classes/modules/page/mapper/Page.mapper.class.php
@@ -27,11 +27,13 @@ class PluginPage_ModulePage_MapperPage extends Mapper {
page_date_add,
page_seo_keywords,
page_seo_description,
- page_active
+ page_active,
+ page_main,
+ page_sort
)
- VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?d)
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?d, ?d, ?d)
";
- if ($iId=$this->oDb->query($sql,$oPage->getPid(),$oPage->getUrl(),$oPage->getUrlFull(),$oPage->getTitle(),$oPage->getText(),$oPage->getDateAdd(),$oPage->getSeoKeywords(),$oPage->getSeoDescription(),$oPage->getActive()))
+ if ($iId=$this->oDb->query($sql,$oPage->getPid(),$oPage->getUrl(),$oPage->getUrlFull(),$oPage->getTitle(),$oPage->getText(),$oPage->getDateAdd(),$oPage->getSeoKeywords(),$oPage->getSeoDescription(),$oPage->getActive(),$oPage->getMain(),$oPage->getSort()))
{
return $iId;
}
@@ -48,10 +50,12 @@ class PluginPage_ModulePage_MapperPage extends Mapper {
page_date_edit = ? ,
page_seo_keywords = ? ,
page_seo_description = ? ,
- page_active = ?
+ page_active = ?,
+ page_main = ?,
+ page_sort = ?
WHERE page_id = ?d
";
- if ($this->oDb->query($sql,$oPage->getPid(),$oPage->getUrl(),$oPage->getUrlFull(),$oPage->getTitle(),$oPage->getText(),$oPage->getDateEdit(),$oPage->getSeoKeywords(),$oPage->getSeoDescription(),$oPage->getActive(),$oPage->getId()))
+ if ($this->oDb->query($sql,$oPage->getPid(),$oPage->getUrl(),$oPage->getUrlFull(),$oPage->getTitle(),$oPage->getText(),$oPage->getDateEdit(),$oPage->getSeoKeywords(),$oPage->getSeoDescription(),$oPage->getActive(),$oPage->getMain(),$oPage->getSort(),$oPage->getId()))
{
return true;
}
@@ -102,7 +106,7 @@ class PluginPage_ModulePage_MapperPage extends Mapper {
page_pid as PARENT_KEY
FROM
".Config::Get('plugin.page.table.page')."
- ORDER by page_title asc;
+ ORDER by page_sort desc;
";
if ($aRows=$this->oDb->select($sql)) {
return $aRows;
@@ -133,5 +137,36 @@ class PluginPage_ModulePage_MapperPage extends Mapper {
}
return $aResult;
}
+
+ public function GetNextPageBySort($iSort,$sPid,$sWay) {
+ if ($sWay=='up') {
+ $sWay='>';
+ $sOrder='asc';
+ } else {
+ $sWay='<';
+ $sOrder='desc';
+ }
+ $sPidNULL='';
+ if (is_null($sPid)) {
+ $sPidNULL='page_pid IS NULL and';
+ }
+ $sql = "SELECT * FROM ".Config::Get('plugin.page.table.page')." WHERE { page_pid = ? and } {$sPidNULL} page_sort {$sWay} ? order by page_sort {$sOrder} limit 0,1";
+ if ($aRow=$this->oDb->selectRow($sql,is_null($sPid) ? DBSIMPLE_SKIP : $sPid, $iSort)) {
+ return Engine::GetEntity('PluginPage_Page',$aRow);
+ }
+ return null;
+ }
+
+ public function GetMaxSortByPid($sPid) {
+ $sPidNULL='';
+ if (is_null($sPid)) {
+ $sPidNULL='and page_pid IS NULL';
+ }
+ $sql = "SELECT max(page_sort) as max_sort FROM ".Config::Get('plugin.page.table.page')." WHERE 1=1 { and page_pid = ? } {$sPidNULL} ";
+ if ($aRow=$this->oDb->selectRow($sql,is_null($sPid) ? DBSIMPLE_SKIP : $sPid)) {
+ return $aRow['max_sort'];
+ }
+ return null;
+ }
}
?>
\ No newline at end of file
diff --git a/plugins/page/plugin.xml b/plugins/page/plugin.xml
index cb56c6f7..83abab22 100644
--- a/plugins/page/plugin.xml
+++ b/plugins/page/plugin.xml
@@ -7,7 +7,7 @@
+
+ {$aLang.page_create_sort_notice}
+ +
+ +
{$aLang.page_create_seo_description_notice}
+
+ {$aLang.page_create_sort_notice}
diff --git a/plugins/page/templates/skin/developer/actions/ActionPage/admin.tpl b/plugins/page/templates/skin/developer/actions/ActionPage/admin.tpl index 2c95aa8d..bc6d686c 100644 --- a/plugins/page/templates/skin/developer/actions/ActionPage/admin.tpl +++ b/plugins/page/templates/skin/developer/actions/ActionPage/admin.tpl @@ -24,7 +24,8 @@