Доделываю свое чудо..
после долгих, нудных переписываний кода, пришел к окончательной форме и структуре
Работа mysql:
1. Сохраняет несколько подключений
2. Возможность переключений подключений во время выполнения
3. Смена базы подключения
4. Смена кодировки подключения
5. Хранение запросов в отдельных файлах
6. Обработка запросов
7. Автоматическая выдача результата в нужном формате(возможность изменения)
8. Обработка ошибок
Вес класса 3 килобайта
Работа шаблонизатора:
1. Внутренний синтаксис работы шаблонов для дизайнеров
Шаблон
test {$a}<br>
{elseif($a=="a")}
testa {$a}<br>
{else}
test null<br>
{endif}
{foreach($result as &key => &value)}
key: {&key}, value {&value}<br>
{endforeach}
Сохраненный кеш
test <?=$this->tpl_var[a]?><br>
<?}elseif($this->tpl_var[a]=="a"){?>
testa <?=$this->tpl_var[a]?><br>
<?}else{?>
test null<br>
<?}?>
<?foreach($this->tpl_var[result] as $key => $value){?>
key: <?=$key?>, value <?=$value?><br>
<?}?>
Результат
key: 1, value 1
key: 2, value 2
key: 3, value 3
2. Кеш шаблонов сохраняется в отдельной папке, проводится проверка на изменения шаблона,если шаблон изменен изменяется кеш
3. Поддержка классических блоков ({menu})
4. Выбор пользователю шаблонов (сессийный,куки и установленный стандарт)
Языки:
1.Обработка ключевых слов, что дает возможность мултиязычности
Пример
%menu% %0%
Меню/Menu
2. Ключевые фразы хранятся в отдельных файлах
3. Выбор языка для пользователя
4. система обработки ошибок для разных языков
!1! !login!
Результат:
Ошибка в воде аккаунта : doomer
Wrong account : doomer
5. Хранение в отдельных файлах
Безопасность:
Обработка всех входящих ПОТС и ГЕТ заголовков, сразу, обрыв при попытке взлома
CMS будет работать php<->ajax или стандарт(все зависит на любителя)
Системы
1. Новости
2. Пользователи
3. Форум
4. Голосования / опросы
5. Галерея
6. Гостевая книга
7. Система статистики
8. Система статей
и т.д.
AJAX(JS) библиотека разрабатывается с акцентом "минимум на максимум"
В общем вся система разрабатывается таким типом ))
Мой дивиз при разработке
Для линейки тоже будет работать))
Будет Платнай и Бесплатная версия(с значительным отличием)
Высказываем свои предложения и пожелания =)
Демку давай!!!11
You can't feeling! No you can't feeling! And you can't feeling!
— People = Shit
написана с нуля или за основу быва взята какая то cms ?
все писалось с нуля =) своими силами и знаниями =)
Демка, в нете, будет позднее, вместе с бесплатной версией =)
В бесплатной будет
1. Авторизация
2. Система новостей
3. Топы
возможно потом и подключу систему платежей
шаблонизатор работает теперь с
Локальными переменными и глобальными
Рабочие структуры
if/elseif/else/while/foreach/for/switch
Встроенные функции
А чем не нравится XSLT в качестве шаблонизатора (он вроде как для этого в стандарты W3C и внесен)? Зачем опять изобретать велосипед ввиде нового языка шаблонов? И чем не устраивают другие шаблонизаторы (благо их за последние лет 8 напахали достаточно)?
Чтобы CMS хорошо использовалась в первую очередь (ну очевидные вещи, как безглючность, адекватная админка и функционал) с ней должно быть просто работать дизайнеру/верстальщику и разработчику. С этой точки зрения язык шаблонов нужен либо стандартизированный (XSL) либо популярный (FastTemplate тот же), а сама CMS должна быть модульной (для дописывания компонент разработчиками) и "прозрачной" с точки зрения архитектуры (т.е. должно быть интуитивно понятно, как из своего модуля получить доступ к той или иной компоненте системы без граблей в 3 ряда, т.е. описано и реализовано адекватное API).
Без этого всего CMS будет на уровне поделок начала 2000-х годов, т.е. отставать от рынка на 9-10 лет. (ну AJAX - это, конечно, хорошо, но он "интересности" данной CMS не добавит).
ЗЫ: для экспериментов и раздумий, если, конечно, планы на CMS больше, чем сделать игрушку под сервера линейки, а что-то серьездное):
- а как обстоят дела с выводом, скажем, таблицы в 10.000 записей через шаблонизатор? (просто известный прикол того же FastTemplate, который на этом захлебывается и не укладывается в 30 сек).
- как обстоят дела с "безопасностью" шаблонов (например, как она к такому вот шаблону отнесется: {exec('rm -rf .');} или {exit();})?
- как обстоят дела с потреблением памяти и процессора? Делались ли замеры? Впишется ли она, скажем, в ресурсы на минимальном тарифе за 3 у.е. у какого-нить совсем тухлого хостера (т.е. 0.1% времени от C2D и 16Мб памяти под на процесс PHP) и если нет, то какие требования? (сюда же - оптимизация кода).
- помимо POST- и GET-запросов есть еще COOKIE, про них помним? (о безопасности)
- как со стрессоустоячивостью обстоят дела (т.е. планируется ли модуль отражения микро-DDoS-ов?
- планируется ли поддержка ЧПУ (обработка ссылок вида /articles/statya-ob-lineyke.html как get-запрос)?
А вообще - начинание очень хорошее, в первую очередь для самого автора. Личный опыт - бесценен.
- У тебя есть сердце?
- Сердце?... Нет, но у меня есть винтовка, а сердце... сердце - слишком хорошая мишень, чтобы носить его при себе...
Завтра сделаю краш тест и отвечу на ваши вопрос, думаю интересно всем.
Шаблонизатор устроен так обрабатывает слова сначала, и блоки, потом обрабатывает для кеша, а из кеша делается постоянный вызов
И не делает лишних тело движений. Код в 55 строк вес файла меньше двух кило байт максимум будет 80-150 строк
Doomer, не подумай, я не в коем случае не докапываюсь и не придираюсь. Просто это грабли, на которые уже тысячи людей наступали.
По поводу шаблонизатора: идею понял, теперь вопрос, как с правами на запись в cache-директорию, не смущают? Иногда это бывает опасно, например, если в коде окажется возможность remote include-а, то есть, куда записать шел-код и это место доступно извне.
По поводу тестов на производительность, это думаю будет полезно:
$startTime = microtime(true);
// тут все тело на генерацию страницы...
echo "<!-- Время генерации: " . sprintf("%.4f", (microtime(true) - $startTime)) . "sec. -->\n";
echo "<!-- Общее потребление памяти: " . memory_get_usage(true) . " байт, пик потребления памяти: " . memory_get_peak_usage(true) . " байт. -->\n";
?>
Ну я думаю очевидно, что больше 2-3 сек на генерацию страницы при тестах на домашней тачке - это недопустимо много (просто инече на вирутальном хостинге можно получить 20+ сек, что уже на гране фола) и есть смысл задуматься. Еще бывает полезно все mysqli_query(...) обернуть такими же замерителями скорости и посчитать суммарное время выполнения запросов.
- У тебя есть сердце?
- Сердце?... Нет, но у меня есть винтовка, а сердце... сердце - слишком хорошая мишень, чтобы носить его при себе...
Усовершенствовал шаблонизатор, теперь работает и со статическими страницами, то-есть, если страница не часто обновляется есть возможность сохранить её в кэш и от туда она будет грузится(учитывается обновление), это уменьшает нагрузку на сервер и бд,
Дальше будет сделан универсальный класс который будет работать с хранением данных(один интерфейс). Возможны варианты: Mysql,postSql,файловая система и т.п. Собственный тип запросов.
если есть желающие могу шаблонизатор выложить
ob_start();
$path = site_path . 'themes/'. $this->theme .'/'. $tpl . '.tpl.php';
if (file_exists($path) == false) {
trigger_error ('Template `' . $tpl . '` does not exist.', E_USER_NOTICE);
return false;
}
// Load variables
foreach ($this->vars as $key => $value) {
$$key = $value;
unset($this->vars[$key]);
}
include ($path);
$p = ob_get_contents();
ob_end_clean();
return $p;
}
чем не шаблонизатор (выдрано из контекста основного класса шаблонизатора, однако основная идея ясна и так : не стоит изобретать велосипеды. php уже есть и легче применять php вставки в теле шаблона, чем писать на PHP свой аналог PHP ) .


