TiA

Рейтинг
116
Регистрация
12.06.2009
awilum:
Вот только не надо опять.

Что опять? Я ведь еще не начинал :D

awilum:
Но Template CMS полностью отличается от Get Simple CMS по архитектуре и коду.

Ага. Навскидку.

Template CMS 2.0.3. Файл Security.php:


function safeName($str, $delimiter = '-') {
$str = trim($str);
$str = str_replace(array(' ?',' ','--','"','!','@','#','$','%','^','&','*','(',')','+','{','}',
'|',':','"','<','>','?','[',']','\\',';',"'",',','/','*','+','~','`','=','laquo',
'raquo',']>','%3c','%253c','%3e','%0e','%28','%29','%2528','%26','%24','%3f','%3b','%3d','<!--','-->'),
array('',$delimiter,'-','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''),
$str);
$str = str_replace('--','-',$str);
$str = rtrim($str, "-");
return translitIt($str);
}

Get Simple 3.1.0. Файл basic.php:


function clean_url($text) {
$text = strip_tags(lowercase($text));
$code_entities_match = array(' ?',' ','--','&quot;','!','@','#','$','%','^','&','*','(',')','+','{','}','|',':','"','<','>','?','[',']','\\',';',"'",',','/','*','+','~','`','=','.');
$code_entities_replace = array('','-','-','','','','','','','','','','','','','','','','','','','','','','','','');
$text = str_replace($code_entities_match, $code_entities_replace, $text);
$text = urlencode($text);
$text = str_replace('--','-',$text);
$text = rtrim($text, "-");
return $text;
}

Такого там много. чувствуется, так сказать, влияние :D Могу еще поискать. Надо?

awilum:
Код на равне с WP и Drupal по чистоте/грамотности написания.

Не живите иллюзиями и слушайте что вам говорят. Хотя бы иногда.

awilum:
Покажете мне другую CMS из этой категории в которой Template CMS у которой код чище ?

Легко. Из того небольшого списка, что я посмотрел, мне наибольше Stacey понравилась. Чистый ООП код. Даже обработкой исключений разработчики не побрезговали. Молодцы. Не помешало бы ввести полноценную автозагрузку классов, но с учетом количества классов и так нормально.

Есть, конечно, пару замечаний, но в целом хорошо. Можете в код глянуть, там есть чему поучиться.

awilum:
Единственный конкурент Template CMS в своей категории - Get Simple

Кстати, ваша CMS в некоторых местах с Get Simple поразительно похожа ;)

awilum:
Почитав, ваш пост, я даже не буду выбирать цитаты из него и тратить время на объяснения и ответы.

А и вправду? Зачем?

Хотя если честно, то я не жалею, что потратил два-три часика на копание в вашей, так сказать, CMS. Реализация чего-то издалека похожего на базу данных на XML - это мощно :)

awilum:
Архитектура и продуманность в разу лучше Кандидат CMS, GetSimple...

Взгляните на ту же Stacey или Блоголет. Они получше вашей будут в плане архитектуры и чистоты кода.

Что вы так за Кандидат CMS вцепились? Она в разы проще и быстрее вашей. Для сателлитов и простеньких сайтов самое оно.

В Кандидате все предельно просто работает. Пришел запрос, отфильтровались 3 переменные пути, а также массивы $_POST и $_GET. Дальше сразу происходит подгрузка страницы, разбивка на блоки, формирование меню, подгрузка шаблона с PHP вставками и вывод страницы. Это все делается быстро. Очень быстро.

awilum:
Также более подробное сравнение с Кандидатом CMS

Вы как-то определитесь для чего ваша система. Рассмотрим одно из применений - сателлиты и ваше сравнение в данном контектсте с Кандидатом.

1. Зачем сателлитам так называемое подобие БД? Там нужно чтобы страничка выводилась как можно быстрее и с минимумом потребляемых ресурсов. В идеале: считал файлик со страничкой, считал файлик шаблона, чуть магии - и получайте поисковики страничку. Именно так и работает Кандидат.

2. Установка. В случае с Кандидатом его нужно просто залить на хостинг. "Просто добавь воды", как говориться.

3. Документация. У меня на знакомство с Кандидатом ушло минут 15. Разбираться там особо не в чем. В TemplateCMS нужно еще посидеть, подумать с вашими вызовами функций...

4. Расширяемость. "Powerful Plugin API" - :D Вы API той же Joomla видели в глаза? В Кандидате все просто и понятно: include() в шаблоне. Для установки Сапы полезная штучка.

5. Модульность. См. п. выше. В Кандидате CMS может быть легко переписана под конкретные нужды. Времени это займет раза в два меньше, чем поиск ответа на вопрос "а что же делает функция addHookP()".

6. Управление пользователями. На сателлите :D Зачем?

7. См. выше.

8., 9. и 10. А в Кандидате этого нельзя?

11. KandidatCMS_v.1.4.4_light в распакованном виде около 326 кб. львиную долю занимают темы оформления.

12. :D

13, 14, 15, 16, 17, 18 и 19 - зачем?

Мораль: вы или создавайте систему для сателлитов/простеньких сайтов, или двигайтесь в сторону порталов.

В первом случае придется переделать всю архитектуру CMS в сторону ее упрощения, во втором случае придется переделать всю архитектуру в сторону расширяемости и модульности, добавить наконец-то контроль прав доступа к той или иной странице, модулю, добавить наконец-то поддержку нормальной БД (база данных на XML - это не база данных, это фигня). Можно таке добавить нормальную систему шаблонизации "аля DLE". Также придется поработать над производительностью и организацией функций/классов.

Dewey, а вам что от CMS надо? Всего лишь новости выводить? Такую и самому написать за 1-2 дня можно, насмотревшись видеоуроков всяких. Работать будет, быстро работать.

Stek:
У меня к примеру вызов голого php занимает 311к памяти.

Так оно примерно и есть.

foxi:
С стандартным шаблоном и контентом главная страница потребляет 244 Kb оперативки. Не по вордпресовски конечно но тоже непонятно откуда.

Поправочка: вам непонятно. 244 kb оперативки - это да, чертовски много :D

foxi:
движок конструктора foxi

Так вот где собака зарыта :D

А теперь о самой CMS. Скачал я это чудо, посмотрел...

Основные моменты:

1) написано все на функциях. Хорошо это или плохо сложно сказать. Но вот зачем в хелперах проверки на function_exists? Если уж создается система, то надо бы как-то решить проблему с именованием функций. Для навигации по коду мне как-то удобней было пользоваться "Поиском по содержимому файлов". Сама CMS организована очень непродуманно и запутанно.

2) глобальные переменные - это зло. В чем сакральный смысл функций:

function getPluginInfo() {

global $plugins_info;

return $plugins_info;

}

?

3) механизм обработки URI и фильтрация входящих данных. Это нужно видеть!

4) и, наверное, самый интересный момент. Так называемый XMLDB, сердце системы. Зачем все хранить в XML? Как показывает тестирование (http://habrahabr.ru/blogs/php/112402/) парсинг XML файлов на порядок медленней того же serialize. "На порядок" - это примерно в 10 раз. Feel the difference, что называется.

Хорошо, когда таких данных немного, но вот когда страничек 100-1000-10000 начинается песец. Сразу пример. В CMS-ке есть метод getAvailablePages(), который загружает и обрабатывает все странички из папки data/pages/. Если таких страниц много, то мало того, что оно будет долго обрабатываться, да еще и памяти будет непомерно жрать. Как минимум - это удвоенный объем папки со страницами.

Ситуация также усугубляется тем, что все настройки хранятся в XML...

Едем дальше. Основной функцией, которая используется для получения данных, является getXML(). При каждом вызове она считывает и декодирует из XML тот или иной файл. Вот вызвали эту функцию десять раз с тем же аргументом в функциях вроде pagesTitle(), pagesDescription(), pagesContent и т.д. - десять раз загрузился и был обработан XML файл со страницей. Нехило так, правда?

Мне страшно подумать, что случится если это все загнать в цикл для всех страниц... Жалких сто страничек - и получаем тысячу считываний и обработок XML. А это все память, это все ресурсы жесткого диска.

Решение тут предельно простое: создать кеш с декодированным содержимым сайта и хранить его в какой-то переменной. При вызове функции getXML() будет производиться проверка на наличие записи в массиве кеша, чтобы лишний раз не лезть на жесткий и не декодировать.

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

Итог: обычная CMS на файлах с кучей недоработок.

skurudo, то есть у вас при обращении http://url-сайта:8080 все хорошо, а при обращении на 80 порт такая фигня?

Попробуйте для проверки такой конфиг:

proxy_pass http://127.0.0.1:8080;

proxy_redirect http://127.0.0.1:8080/ /;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Real-IP $remote_addr;

closeyoureyes, mod_rpaf включен и работает?

netwind:
Не я виноват в том, что пользователи DLE не знают как включить полнотекстовый поиск.

Вы бы посмотрели в код как он работает прежде чем писать. Пользователи бывают разные.

netwind:
Ну вот пользователь приходит из поисковика на главную постоянно обновляющегося с помощью парсеров говносайта. Заходит, а там ничего нет. Новость "уплыла" на следующие страницы. Второе, что он будет делать - искать через поиск. Первое - закроет окно, говносайт же. Вот такая вот практика.

Вы, похоже, часто с говносайтами дело имеете. Мы вроде как сам DLE рассматриваем и конкретный случай с MySQL сервером, а не говносайты с парсерами в целом.

Raistlin:
TiA, Я сказал, что он у меня не падает от хост-трекера.

Я читать умею. Вы уже говорили, что у вас не падает некий сайт от host-tracker. Мы тут вроде как WP рассматриваем и не "у вас", а у конкретного человека.

О своих познаниях в области администрирования вы тоже сказали более чем достаточно, чтобы сформировалось вполне объективное мнение.

Raistlin:
ню-ню. У меня с дефолтными настройками ВДСка на 512 метров почему-то пашед...

Ключевое слово "у вас" :) Сам факт что у вас VDS пашет на дефолтных настройках много говорит о вас как об администраторе. Вас ждут великие сюрпризы :D HostAce говорите?

Raistlin:
Я вообще не понимаю, откуда вы взяли 60 метров на процесс апача, когда там 10 метрофф...

Опыт. 10 "метрофф" обычно занимает Apache, который отдает статику. Пора бы это уже знать.

Всего: 800