PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
Crate
Отправлено: 20 Января, 2012 - 06:45:57
Посетитель
Покинул форум
Сообщений всего: 312
Дата рег-ции: Янв. 2012
Помог: 4 раз(а)
Вот что примерно получилось:
PHP:
скопировать код в буфер обмена
class Style {
function parse ($path, $name) {
$cache->check($path, $name);
}
}
class Cache {
function check ($path, $name) {
$file = ROOT.$path;
if (file_exists(ROOT."/data/cache".$name)) {include_once (ROOT."/cache/".$name.".php");}
else {$this->compile($path, $name);}
}
function compile ($path, $name) {
$source = fopen ($path);
$file = fread ($source);
$result = str_replace ("\{PATH_TO_APP\}", "<?= ".PATH_TO_APP." ; ?> ", $file);
if ($result == true) {
fwrite (ROOT."/data/cache/".$name.".php", $result);
include_once (ROOT."/data/cache/".$name.".php");
}
else {$this->compile($path, $name);}
}
}
$style = new Style ();
$cache = new Cache ();
Вызов:
Дополнительно:
(Добавление)
Полностью рабочий код (вызов тот же):
PHP:
скопировать код в буфер обмена
class Style {
function parse ( $path , $name ) {
$file = ROOT. $path ;
if ( file_exists ( ROOT
. "/data/cache/" . $name ) ) { include_once ( ROOT
. "/data/cache/" . $name . ".php" ) ; } else { $this -> compile ( $path , $name ) ; }
}
function compile ( $path , $name ) {
$result = str_replace ( "{" . "PATH_TO_APP" . "}" , PATH
, $file ) ; include_once ( ROOT. "/data/cache/" . $name . ".php" ) ;
}
}
$style = new Style ( ) ;
(Отредактировано автором: 20 Января, 2012 - 08:09:58)
sKaa
Отправлено: 20 Января, 2012 - 15:32:20
Частый посетитель
Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011
Откуда: Россия г. Нижний Новгород
Помог: 25 раз(а)
[+]
Добавь метод assign, пригодится.
PHP:
скопировать код в буфер обмена
class Style {
protected $vars = array ( ) ; function parse ( $path , $name ) {
$file = ROOT. $path ;
if ( file_exists ( ROOT
. "/data/cache/" . $name ) ) { include_once ( ROOT
. "/data/cache/" . $name . ".php" ) ; } else { $this -> compile ( $path , $name ) ; }
}
public function assign( $var , $value ) {
$this -> vars [ $var ] = $value ;
}
else {
$this -> vars [ $var ] =& $value ;
}
}
function compile ( $path , $name ) {
$result = str_replace ( "{" . "PATH_TO_APP" . "}" , PATH
, $file ) ; // ---------
include_once ( ROOT. "/data/cache/" . $name . ".php" ) ;
}
Теперь можно делать так :
и в шаблоне будет доступна новая переменная $qwe, значение которой будет 123...
Так же можно для удобства сделать чтобы каждый метод возвращал объект класса. Аля текучий интерфейс.
$style= new Style();
$style->assign('qwe', 123)->parse(...)->compile ($path, $name);(Отредактировано автором: 20 Января, 2012 - 17:28:57)
Crate
Отправлено: 21 Января, 2012 - 12:41:03
Посетитель
Покинул форум
Сообщений всего: 312
Дата рег-ции: Янв. 2012
Помог: 4 раз(а)
А вот другой вопрос: как мне поступить если например нужно заменить много значений?
Попробовал циклом, но нечего не выходит:
PHP:
скопировать код в буфер обмена
class Style {
function parse ( $path , $name ) {
if ( file_exists ( ROOT
. "/data/cache/" . $name ) ) { include_once ( ROOT
. "/data/cache/" . $name . ".php" ) ; } else { $this -> compile ( $path , $name ) ; }
}
function compile ( $path , $name ) {
$result = $this -> replace ( $file ) ;
// $result = $this->replace ($file);
include_once ( ROOT. "/data/cache/" . $name . ".php" ) ;
}
function replace ( $data ) {
"{" . "PATH" . "}" => PATH,
"{L_" . "PANEL" . "}" => $language [ 'panel' ] ,
"{L_" . "PARAMETERS" . "}" => $language [ 'parapeters' ] ,
"{L_" . "GENERAL" . "}" => $language [ 'general' ] ,
"{L_" . "PAGES" . "}" => $language [ 'pages' ] ,
"{L_" . "LINK" . "}" => $language [ 'link' ] ,
"{L_" . "TITLE" . "}" => $language [ 'title' ] ,
"{L_" . "SUBTITLE" . "}" => $language [ 'subtitle' ] ,
"{L_" . "CONTENT" . "}" => $language [ 'content' ] ,
"{L_" . "DESCRIPTION" . "}" => $language [ 'description' ] ,
"{L_" . "KEYWORDS" . "}" => $language [ 'keywords' ] ,
"{L_" . "ANNOUNCE" . "}" => $language [ 'announce' ] ,
"{L_" . "POSITION" . "}" => $language [ 'position' ] ,
"{L_" . "STATUS" . "}" => $language [ 'status' ] ,
"{L_" . "MEDIAFILES" . "}" => $language [ 'mediafiles' ] ,
"{L_" . "PACKS" . "}" => $language [ 'packs' ] ,
"{L_" . "UPDATES" . "}" => $language [ 'updates' ] ,
"{L_" . "STYLES" . "}" => $language [ 'styles' ] ,
"{L_" . "LANGUAGES" . "}" => $language [ 'languages' ] ,
"{L_" . "PLUGINS" . "}" => $language [ 'plugins' ] ,
"{L_" . "LIBRARIES" . "}" => $language [ 'libraries' ] ,
"{L_" . "TOOLS" . "}" => $language [ 'tools' ] ,
"{L_" . "PAGES_CREATE_SUCCESS" . "}" => $language [ 'pages_create_success' ] ,
"{L_" . "PAGES_EDIT_SUCCESS" . "}" => $language [ 'pages_edit_success' ] ,
) ;
foreach ( $replace as $key => $val ) {
}
return $result ;
}
}
$style = new Style ( ) ;
Crate
Отправлено: 21 Января, 2012 - 13:33:11
Посетитель
Покинул форум
Сообщений всего: 312
Дата рег-ции: Янв. 2012
Помог: 4 раз(а)
Мелкий
Спасибо, все работает =)
sKaa пишет: Вообще для таких целей я вверху как раз и описал метод assign
Он мне не нужен, т. к. все переменные будут в ядре.
(Добавление)
Правда теперь не хочет заменять на языковые переменные типа $language['panel'].
Crate
Отправлено: 22 Января, 2012 - 10:28:44
Посетитель
Покинул форум
Сообщений всего: 312
Дата рег-ции: Янв. 2012
Помог: 4 раз(а)
Ребята, а как теперь кэш обновлять? Я думал очищать папку, но гугл нашел только вот это:
PHP:
скопировать код в буфер обмена
function recRMDir( $path ) {
if ( $obj != '.' && $obj != '..' ) {
if ( ! recRMDir( $path . $obj ) ) return false ;
if ( ! unlink ( $path . $obj ) ) return false ; }
}
}
if ( !@ rmdir ( $path ) ) return false ; return true ;
}
return false ;
}
Проверил. Не работает. можно в принципе и удалять папку целиком а потом создавать ее заново, но как сделать проще?
Crate
Отправлено: 23 Января, 2012 - 09:16:01
Посетитель
Покинул форум
Сообщений всего: 312
Дата рег-ции: Янв. 2012
Помог: 4 раз(а)
Люди, у меня проблема. Проверил в E_ALL там пишет:
Код:
PHP:
скопировать код в буфер обмена
<?PHP
/* This file is part of */
class Style {
function parse ( $path ) {
$this -> check ( $path , $name ) ;
}
function check ( $path , $name ) {
if ( file_exists ( ROOT
. "/data/cache/" . $name ) ) { include_once ( ROOT
. "/data/cache/" . $name . ".php" ) ; } else { $this -> compile ( $path , $name ) ; }
}
function compile ( $path , $name ) {
$result = $this -> replace ( $file ) ;
include_once ( ROOT. "/data/cache/" . $name . ".php" ) ;
}
function replace ( $data ) {
"{PATH}" => PATH,
"{L_PANEL}" => $language [ 'panel' ] ,
"{L_PARAMETERS}" => $language [ 'parameters' ] ,
"{L_GENERAL}" => $language [ 'general' ] ,
"{L_PAGES}" => $language [ 'pages' ] ,
"{L_LINK}" => $language [ 'link' ] ,
"{L_TITLE}" => $language [ 'title' ] ,
"{L_SUBTITLE}" => $language [ 'subtitle' ] ,
"{L_CONTENT}" => $language [ 'content' ] ,
"{L_DESCRIPTION}" => $language [ 'description' ] ,
"{L_KEYWORDS}" => $language [ 'keywords' ] ,
"{L_ANNOUNCE}" => $language [ 'announce' ] ,
"{L_POSITION}" => $language [ 'position' ] ,
"{L_STATUS}" => $language [ 'status' ] ,
"{L_MEDIAFILES}" => $language [ 'mediafiles' ] ,
"{L_PACKS}" => $language [ 'packs' ] ,
"{L_UPDATES}" => $language [ 'updates' ] ,
"{L_STYLES}" => $language [ 'styles' ] ,
"{L_LANGUAGES}" => $language [ 'languages' ] ,
"{L_PLUGINS}" => $language [ 'plugins' ] ,
"{L_LIBRARIES}" => $language [ 'libraries' ] ,
"{L_TOOLS}" => $language [ 'tools' ] ,
"{L_PAGES_CREATE_SUCCESS}" => $language [ 'pages_create_success' ] ,
"{L_PAGES_EDIT_SUCCESS}" => $language [ 'pages_edit_success' ] ,
) ;
// $result = preg_replace ("{^([A-Z]+)$}", $matches["$1"], $data);
return $result ;
}
function update ( ) {
$handle = opendir ( ROOT
. "/data/cache" ) ; while ( false !== ( $file = readdir ( $handle ) ) ) { }
if ( $delete == true ) { $result = "Удаление завершено." ; }
else { echo "Удаление незавершено." ; }
/*
$delete = rmdir (ROOT."/data/cache");
$create = mkdir (ROOT."/data/cache");
if ($delete == true) {$result = "Удаление завершено.";}
else {echo "Удаление незавершено.";}
if ($create == true) {$result = "Создание завершено.";}
else {echo "Создание незавершено.";}
if ($delete == true and $create == true) {$result = "Обновление завершено.";}
*/
return $result ;
}
}
$style = new Style ( ) ;
?>
Языковой массив находится в другом файле, но он подключается через инклюд. В чем проблема то?
Поиск в теме | Версия для печати
Страниц (3): « 1 2 [3]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« CMS и фреймворки »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB