Класс GRLAB+шаблонизатор

3.49K
.
IdKoder

Итак,многоуважаемый юзер! Сначала немного о нашем моде движка ,а именно - о файле grlab.php

Данный файл является своего рода дополнительным мини-фреймворком с публичными правами функций и возможностью статического вызова.

Список методов (+/-)
Метод GRLAB::singltone()
Данный метод есть экземпляр нашего класса,т.к. создание копий (клонирования) класса запрещено его системой,так же как и вызов конструктора напрямую.

Метод __clone()
Метод,выдающий ошибку уровня T_WARNING ,запрещающий клонирование класса.

Метод GRLAB::storeObject($obj,$key)
Объект регистрации нового объекта (утилиты) из папки .grlab. Имя объекта является именем файла-утилиты*,а $key является ключом данного объекта к вызову из метода GRLAB::getObject($key).
Важно: имя объекта в виде $object ,в спойлере "Примеры" будет экземпляр работы

Примеры кода (+/-)
Вызов класса и тестирование
<?php
require_once(ROOTPATH.'/incfiles/classes/grlab.php');
//Подключаем класс
$GRLAB=GRLAB::singltone();
print $GRLAB->getName();
//получаем имя мода
?>


Метод GRLAB::storeObject()
<?php
//Сам метод

public static function storeObject($object,$key)
{
require_once(ROOTPATH.'/incfiles/classes/.grlab/'.$object.'.class.php');
self::$objects[$key]=new $object;
}
?>
<?php
//Регистрация и получение объекта
require_once(ROOTPATH.'/incfiles/classes/grlab.php');
//Включили мод
$GRLAB=GRLAB::singltone();
//Экземпляр мода
$GRLAB->storeObject('test','myutil');
//Зарегистрировали
$UTIL=$GRLAB->getObject('myutil');
//Получили экземпляр
$UTIL->test();
//Вызвали утилиту
?>


Сам класс GRLAB
<?php
/**
*@copyright JohnCMS 6.1.1
*@author Gr.LAB Company
*Класс GTLAB
*/

class GRLAB{

/**
*Переменная объектов
*@access private
*/

private static $objects=array();

/**
*Переменная шаблонизатора
*@access private
*/

private static $models=array();

/**
*Имя фреймворка (да назовем так)
*@access private
*/

private static $framework=array(
'name'=>'GTLAB JohnCMS Mini Framework',
'version'=>'1.0'
);

/**
*Переменная экземпляра
*@access private
*/

private static $instance;

/**
*Запрещаем вызов конструктора
*@access private
*/

private function __construct()
{
}

/**
*Экземпляр нашего класса
*@access public
*/

public static function singltone()
{
if(!isset(self::$instance))self::$instance=__CLASS__;
return self::$instance;
}

/**
*Информация о фреймворке
*@access public
*/

public static function getGRLAB($key)
{
return self::$framework[$key];
}

/**
*Регистрация утилиты
*@access public
*/

public static function storeObject($name,$key)
{
require_once(ROOTPATH.'/incfiles/classes/.grlab/'.$name.'.class.php');
self::$objects[$key]=new $name;
}

/**
*Получение объекта
*@access public
*/

public static function getObject($key)
{
return self::$objects[$key];
}
}
?>


Шаблонизатор
Данный класс является утилитой к выше указанному.
Методы (+/-)
htmler::storeSetting()
Устанавливает настройки класса - имя модели и ее содержимое (последнее изменять не рекомендуется).

Примеры кода (+/-)
Класс htmler
<?php
/**
*Класс шаблонизатора
*@copyright JohnCMS 6.1.1
*@author Gr.LAB
*/

class htmler{

/**
*Патч с шаблоном
*/

private static $path='models/';

/**
*Интерпретатор (выкл. по умолчанию)
*/

private static $php=false;

/**
*Экземпляр по типу родительского фреймворка
*/

private static $instance;

/**
*Закрытые данные
*/

private static $Settings=array(
'model_name'=>'none',
'model_body'=>'none'
);

/**
*Функция-модель класса
*/

public static function getInstance()
{
$class=__CLASS__;
self::$instance=new $class;
return self::$instance;
}

/**
*Функция-настройщик
*/

public static function storeSetting($setting,$value)
{
self::$Settings[$setting]=$value;
}

/**
*Получение содержимого модели
*/

private static function open()
{
self::$Settings['model_body']=file_get_contents(ROOTPATH.self::$path.self::$Settings['model_name'].'.dps');
}

/**
*Замена переменных
*/

private static function replace($vars)
{
foreach($vars as $var)
{
global $var;
self::$Settings['model_body']=strtr(self::$Settings['model_body'],array("[{$var}]",$$var));
}
}

/**
*PHP интерпретатор модели
*/

private static function php()
{
self::$Settings['model_body']=eval('?>'.self::$Settings['model_body']);;
}

/**
*Вывод модели
*/

public static function view($vars)
{
self::open();
if($vars!=null)self::replace($vars);
self::php();
return self::$Settings['model_body'];
}
}
?>


Использование шаблонизатизатора
<?php
require(ROOTPATH.'incfiles/classes/grlab.php');
$GRLAB=GRLAB::singltone();
$GRLAB->storeObject('htmler','htmler');
$HTMLER=$GRLAB->getObject('htmler');
$HTMLER->storeSetting('model_name','test');
$HTMLER->open();
print $HTMLER->view(null);
?>


Текущие скриншоты (+/-)


Тему не удалять,описание допиливаю!
Почистил от флуда
.

Нутром чую что это всё нереально круто, но не могу понять зачем это всё.

.
Ей 25

Это для Джона? И что с помощью этого чуда можно сделать?

.
Блиносвёрт ?

завтра узнаем

.

Сделайте мне развидеть это.

.
(\/)____o_O____(\/)

IdKoder, GR? есть расшифрофки? случайно не работаете вместе с товарищем http://johncms.com/users/profi ... 34545 , хотелось бы глянуть что там наворотили, есть ли совместимость со стандартными функциями ядра джона, и зачем статика?

.
IdKoder

Статика нужна из-за закрытого конструктора и клонирования класса.
Сам файл размещен в папке incfiles/classes/ под именем grlab.php . Я написал его по типу ядра фреймворка - та же структура и принцип. Сейчас дописал и проверяю шаблонизатор.
Шаблонизатор лежит в incfiles/classes/.grlab/htmler.class.php ,и я его зарегистрировал как утилиту:

<?php
//Файл incfiles/core.php
require(ROOTPATH.'incfiles/classes/grlab.php');
$GRLAB=GRLAB::singltone();
//А вот и зачем статика - прямой вызов конструктора запрещен
$GRLAB->storeObject('htmler','htmler');
$HTMLER=$GRLAB->getObject('htmler');
//Сейчас продемонстрирую работу шаблонизатора
$HTMLER->storeSetting('model_name','test');
//Говорим классу,что работаем с моделью test.dps из ROOTPATH/models
$HTMLER->open();
//Читаем модель
print $HTMLER->view();
//Выводим
?>

В моделях есть поддержка выполнения PHP кода. Для работы с сущ. переменными в файле модели необходимо сделать их глобальными.

А сейчас я подъехал к работе и прощаюсь с Вами.
.

По поводу примеров и расшифровки:
Gr.LAB - это моя команда разработчиков. Grig (моя фамилия) Laboratory.

Пример с установленными скриптами есть тють. Сейчас переписываю самого Джони под систему шаблонов.
Думаю,эти модификации будут полезны и дизайнерам, и кодерам.

.
Think different

ЯННП

.
КоханийВолодимир

Оно то всë круто, реально, Олег сейчас даже опущенным себя чувствует, звонил - говорил, но так как WAP-сайты доживают свои последние годы, то куда круче было бы увидить что-то другое, эттакое связаное не посредственно с WEB-ом.

Всего: 82