1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-29 04:55:02 +03:00
ifhub.club/classes/modules/sys_viewer/Viewer.class.php

295 lines
7.8 KiB
PHP
Raw Normal View History

2008-09-21 09:36:57 +03:00
<?
/*-------------------------------------------------------
*
* 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
*
---------------------------------------------------------
*/
require_once('classes/lib/external/Smarty-2.6.19/libs/Smarty.class.php');
/**
* Модуль обработки шаблонов используя шаблонизатор Smarty
*
*/
class Viewer extends Module {
/**
* Объект Smarty
*
* @var Smarty
*/
protected $oSmarty;
/**
* Коллекция(массив) блоков.
* Обозначение $aBlockRight вместо $aBlock исключительно с целью дальнейшего расширения :)
*
* @var array
*/
protected $aBlockRight=array();
/**
* Заголовок HTML страницы
*
* @var unknown_type
*/
protected $sHtmlTitle=SITE_NAME;
/**
* Разделитель заголовка HTML страницы
*
* @var unknown_type
*/
protected $sHtmlTitleSeparation=' / ';
/**
* Инициализация модуля
*
*/
public function Init() {
/**
* Создаём объект Smarty и устанавливаем необходиму параметры
*/
$this->oSmarty = new Smarty();
$this->oSmarty->template_dir=DIR_SMARTY_TEMPLATE;
$this->oSmarty->compile_dir=DIR_SMARTY_COMPILED;
$this->oSmarty->cache_dir=DIR_SMARTY_CACHE;
$this->oSmarty->plugins_dir=array(DIR_SMARTY_PLUG,'plugins');
/**
* Подключаем к Smarty небольшой плагинчик форматирования даты
*/
$this->oSmarty->register_function("date_format", "func_date_smarty");
}
/**
* Выполняет загрузку необходимый(возможно даже системный :)) переменных в шалон
*
*/
public function VarAssign() {
/**
* Загружаем весь $_REQUEST, предварительно обработав его функцией func_htmlspecialchars()
*/
$aRequest=$_REQUEST;
func_htmlspecialchars($aRequest);
$this->Assign("_aRequest",$aRequest);
/**
* Параметры стандартной сессии
*/
$this->Assign("_sPhpSessionName",session_name());
$this->Assign("_sPhpSessionId",session_id());
/**
* Загружаем константы путей
*/
$this->Assign("DIR_STATIC_SKIN",DIR_STATIC_SKIN);
$this->Assign("DIR_WEB_ROOT",DIR_WEB_ROOT);
$this->Assign("DIR_STATIC_ROOT",DIR_STATIC_ROOT);
$this->Assign("SITE_NAME",SITE_NAME);
$this->Assign("DIR_UPLOADS_IMAGES",DIR_UPLOADS_IMAGES);
/**
* Загружаем список блоков
*/
$this->Assign("aBlockRight",$this->aBlockRight);
/**
* Загружаем HTML заголовки
*/
$this->Assign("sHtmlTitle",htmlspecialchars($this->sHtmlTitle));
}
/**
* Выводит на экран(браузер) обработанный шаблон
*
* @param string $sTemplate
*/
public function Display($sTemplate) {
/**
* Если шаблон найден то выводим, иначе ошибка
*/
if ($this->TemplateExists($sTemplate)) {
$this->oSmarty->display($sTemplate);
} else {
throw new Exception('Не найден шаблон: '.$sTemplate);
}
}
/**
* Загружает переменную в шаблон
*
* @param string $sName
* @param unknown_type $value
*/
public function Assign($sName,$value) {
$this->oSmarty->assign($sName, $value);
}
/**
* Возвращает обработанный шаблон
*
* @param string $sTemplate
* @return string
*/
public function Fetch($sTemplate) {
return $this->oSmarty->fetch($sTemplate);
}
/**
* Проверяет существование шаблона
*
* @param string $sTemplate
* @return bool
*/
public function TemplateExists($sTemplate) {
return $this->oSmarty->template_exists($sTemplate);
}
/**
* Добавляет блок для отображения
*
* @param string $sName
* @param arra $aParams - параметры блока, которые будут переданы обработчику блока
*/
public function AddBlockRight($sName,$aParams=array()) {
/**
* Если смогли определить тип блока то добавляем его
*/
$sType=$this->DefineTypeBlock($sName);
if ($sType=='undefined') {
return false;
}
$this->aBlockRight[]=array(
'type' => $sType,
'name' => $sName,
'params' => $aParams,
);
return true;
}
/**
* Добавляет список блоков
*
* @param array $aBlocks
*/
public function AddBlocksRight($aBlocks) {
/**
* Удаляем ранее добавленые блоки
*/
$this->ClearBlocksRight();
foreach ($aBlocks as $sBlock) {
$this->AddBlockRight($sBlock);
}
}
/**
* Удаляет блоки
*
*/
public function ClearBlocksRight() {
$this->aBlockRight=array();
}
/**
* Определяет тип блока
*
* @param string $sName
* @return string('block','template','undefined')
*/
protected function DefineTypeBlock($sName) {
if ($this->TemplateExists('block.'.$sName.'.tpl')) {
/**
* Если найден шаблон вида block.name.tpl то считаем что тип 'block'
*/
return 'block';
} elseif ($this->TemplateExists($sName)) {
/**
* Если найден шаблон по имени блока то считаем его простым шаблоном
*/
return 'template';
} else {
/**
* Считаем что тип не определен
*/
throw new Exception('Не найден шаблон подключаемого блока: '.$sName);
return 'undefined';
}
}
/**
* Устанавливаем заголовок страницы(тег <title>)
*
* @param string $sText
*/
public function SetHtmlTitle($sText) {
$this->sHtmlTitle=$sText;
}
/**
* Добавляет часть заголовка страницы через разделитель
*
* @param string $sText
*/
public function AddHtmlTitle($sText) {
$this->sHtmlTitle=$sText.$this->sHtmlTitleSeparation.$this->sHtmlTitle;
}
/**
* Возвращает текущий заголовок страницы
*
* @return unknown
*/
public function GetHtmlTitle() {
return $this->sHtmlTitle;
}
/**
* Формирует постраничный вывод
*
* @param int $iCount
* @param int $iCurrentPage
* @param int $iCountPerPage
* @param int $iCountPageLine
* @param string $sBaseUrl
* @return array()
*/
public function MakePaging($iCount,$iCurrentPage,$iCountPerPage,$iCountPageLine,$sBaseUrl) {
if ($iCount==0) {
return false;
}
$iCountPage=ceil($iCount/$iCountPerPage);
if (!preg_match("/^[1-9]\d*$/i",$iCurrentPage)) {
$iCurrentPage=1;
}
if ($iCurrentPage>$iCountPage) {
$iCurrentPage=$iCountPage;
}
$aPagesLeft=array();
$iTemp=$iCurrentPage-$iCountPageLine;
$iTemp = $iTemp<1 ? 1 : $iTemp;
for ($i=$iTemp;$i<$iCurrentPage;$i++) {
$aPagesLeft[]=$i;
}
$aPagesRight=array();
for ($i=$iCurrentPage+1;$i<=$iCurrentPage+$iCountPageLine and $i<=$iCountPage;$i++) {
$aPagesRight[]=$i;
}
$iNextPage = $iCurrentPage<$iCountPage ? $iCurrentPage+1 : false;
$iPrevPage = $iCurrentPage>1 ? $iCurrentPage-1 : false;
$aPaging=array(
'aPagesLeft' => $aPagesLeft,
'aPagesRight' => $aPagesRight,
'iCountPage' => $iCountPage,
'iCurrentPage' => $iCurrentPage,
'iNextPage' => $iNextPage,
'iPrevPage' => $iPrevPage,
'sBaseUrl' => $sBaseUrl,
);
return $aPaging;
}
}
?>