Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как вам такая реализация структуры, кмски/фреймворка
Форумы портала PHP.SU » Объявления » Наработки по собственным проектам » Как вам такая реализация структуры, кмски/фреймворка

Страниц (1): [1]
 

1. Alexx - 07 Декабря, 2008 - 18:01:01 - перейти к сообщению
Привет всем, хочу посоветоваться с вами, как лучше и в правильном ли я направление двигаюсь. Так как не хочется наступать на одни и теже грабли много раз.

Во всех прошлых не устраивала структура (сложно было разворачивать кмску для новых сайтов) поэтому и советуюсь с вами, как вам такая структура кмски. Я уверен что в этой должно быть проще! (хочу узнать ваше мнение).Так же можно считать этот пост маленьким анонсом кмски.

Кмс = цмс = Система управления контетом.
В общем у меня даже не кмска, а небольшой фреймворк получается.

Сейчас немного опишу что есть в кмске, а ниже подробней о каждом пункте.

- мультисайтовость
- мультиязычность
- страницы (шаблоны)
- Виды
- модули (MVC)
- контроллеры
- модели
- & Страницы -> Виды
- библиотеки*
- хелперы*
- логи (дебаггер)
- аякс
- библиотека Котерова “DbSimple” для работы с БД.
- чпу

* - 100% точно такие же по реализации, как у CodeIgniter (Но свои)
Пожалуй это всё.

Теперь подробней обо всём

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

Мультиязычность.
Так как в скором времени предстоит работа с сайтами, которые должны быть на разных языках. Разумно включить и мультиязычность. Тут нет ничего сложно просто в папке с сайтом есть директория languages ну а в нём папки с языками. В директории с языком может быть как один файл со всеми фразами так и директории (вообщем кому как удобней тот так и разбивает), главное что нужный язык можно подключить из любого места в шаблонах (так и етсь), написав $this->lang->load('адрес файл'), а вызывать нужные фразы можно через $this->lang->имя_файла->item('фраза'); Таким способ можно подключать хоть все языки сразу.

Страницы.
Я решил их назвать так. А вообще они очень похожи на шаблоны (как у нормальных людей, или типы страниц)
Какую страницу показывать будет решать система, в зависимости от текущего юрл.
У каждого сайта есть несколько типов страниц. Вот в директории со страницами и лежат эти типы. Например (Главная страница, Новости, Статя/Статьи, Обратная связь, ...)
Страницы представляют из себя обычный html, в котором выполняется пхп код.
Чтобы страницы не были просто страницами в них можно подключать (модули, виды, языки, (на счёт моделей не уверен, но у меня нет никаких ограничений нет, поэтому думаю можно будет)). И так чтобы подключить что-то нужно написать.

- $this->lang->load('язык'); // язык
- $this->modules->load('имя_модуля'); // Модуль
- $this->view('адрес файла с видом'); // Дополнительные шаблоны.
- $this->db // Обращенее к бд.
- $this->libraries...
- $this->helpers...
- закономерность я думаю понятна.

Вот вроде и всё что мне нужно от страниц.

Виды
Виды предоставляют теже возможности что и страницы. Только обращения к ним происходит либот от страниц либо от модулей ну или либо от самих видов.

Если обращение к виду происходит от страницы, то сначала ищем вид в директории со страницей, а потом в общей др. Если обращение происходит от модуля. То сначала смотрим в директории с модулем, потом в директории со страницей, а потом уже в общей др. Виды сделаны для того чтобы исключить один и тот же html код в шаблонах страниц. Например header, footer, ну и т.д. Чтобы подключить вид необходимо напистаь
- $this->view('адрес файла'); так же есть доп. параметры в которых можно указать, чтобы система возвращала результат работы вида в виде строки или передать в вид какие-то переменные.

Модули
Модули у меня с MVC
Поэтому в модуле есть контроллеры, модели и виды.
По умолчанию если мы подключаем модуль
- $this->modules->load('имя_модуля');
управление переходит на главный контроллер модуля (он должен иметь тоже имя что и имя модуля). Ну а в контроллере уже можно подключать другие суб-контроллеры, при этом всё управление передается подключаемому новому контроллеру.
- $this->controllers->load('имя_контроллера');
Так же подключать можно модели и виды.

Библиотеки
Библиотеки это теже классы, созданные в помощь разработчику.

Хелперы
Это уже не библиотеки и не классы, это просто отдельные функции. Опять же для помощи в разработке.

Логи
Логи собираются в определенной директории выбранного сайта с именами (датой d.m.Y H:i); ну и отчётами внутри. Логируются как ошибки так и сообщения для отладки. Что-то залогировать можно след. Образом
- log_message('debug', 'текст');
ошибки логируются автоматически.
В конфиге каждого сайта можно настроить разынй уровень логирования либо в обще его отключить.

аякс
Работать с аяком можно из любого места для этого лишь нужно написать
die('содержимое, которое нужно вернуть'); кроме этого ничего лишнего отданно не будет так как используется буфферизация.

Для работы с БД я включил в набор библиотеку Котерова.
Подробней о ней можно почитать на сайте dklab.ru

Ну и кужа же без чпу. В настройках сайта нужного сайта всё это можно настроить, например можно включить опцию, чтобы добавлялся суффикс к адресу, например ('.html'); Работать с юрл можно
написав $this->uri->segment('номер нужного нам сегменты');
Вообще с классом uri много тонкостей, чтобы не сбиваться я дам ссылку на похожее описание, собственно на то что я опирался, когда писал этот класс, там есть моменты похожие http://code-igniter[dot]ru/user_guid[dot][dot][dot]braries/uri[dot]html

Концовка.
Забыл написать про админку, Так как систему мульсайтовая то и админка может быть как для группы сайтов так и для каждого сайта персональная. Поэтому в настройках сайта можно указать директорию нужной админкой. Ну а там уже админка разберёться что и как показывать. Админка строится только так же как и сайт, тоесть из страниц, модулей, видов и т.д. Теперь о моём решение чтобы не таскать кучу библиотек за собой на каждый сайт. Если мы делаем много сайтов на этой кмски, то вопрос слежения за библиотеками решается сам по себе. Если мы видим что библиотека нужна для нескльких сайтов то кладём её в папку с библиотеками в системныю директорию. А если только для одного сайт, то в папку в директорию сайта. Тоже самое с хелперами.

Теперь зачем я всё это написал, так как я уже много раз наступал на грабли (заходил в тупик), хотел бы услышать комментарии людей хорошо понимающих в этой области. И предусмотреть в системе сразу несколько разных вариантов. А не открывать их для себя при создании сайта. Что очень часто выбивает из сроков отведённых на разработку сайта.

А ещё в видах можно использовать следущее. Его не нужно воспринимать в серьёз, но да, такое в системе тоже есть.

Обращение к страницам из страниц или из видов.
$this->pages->load('имя страницы'); таким способ мы можем подключить какую-то нужную нам страницу. Например у меня была такая необходимость для одного сайта. На главной странице мне необходимо было вывести статью, которая привязана к внутренней странице. Поэтому я использовал след. конструкцию

$this->pages->load('articles', FALSE);
$this->pages->articles->modules->load('articles');
echo $this->pages->articles->modules->articles->getArticle();

На производительности это не как не сказалось, так как загрузился только каркас страницы и модуль статей. Сам шаблон страницы статей не выполнялся (false).

Фух, вроде всё объяснил, жду критики и советов.
Спасибо за внимание.
2. valenok - 07 Декабря, 2008 - 19:58:15 - перейти к сообщению
Конечно всё хорошо и здорово. Чем он лучше codeigniter ?
Первое что можно сделать до сипользования чего либо, это решить, а оно того стоит?,
просто сравнив с аналогами.
3. Джур - 07 Декабря, 2008 - 20:21:52 - перейти к сообщению
вообщем я тоже писал-писал и дописался, что кода в моей CMS/CMF в 20 раз меньше чем было первоначально и все блочное... Так о чем я...

Вообщем пока непоюзаешь систему, не натянешь на нее шаблон, трудно сказать где там грабли и куда посылать разработчика (за пивом или на... Ха-ха )

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

Дему нам, дему! дему!! дему!!!
4. Alexx - 07 Декабря, 2008 - 21:07:58 - перейти к сообщению
valenok пишет:
Конечно всё хорошо и здорово. Чем он лучше codeigniter ?
Первое что можно сделать до сипользования чего либо, это решить, а оно того стоит?,
просто сравнив с аналогами.


У меня кмска/фреймворк
А CodeIgniter же просто заготовка (фреймворк). При первом обращение к нему там только один контроллер ('hello_world') и всё . Так же не понятно как на нём поступать с мультисайтовость и мультиязычностью. Я же зашел немного дальше у меня сразу в комплект входят готовые модули с возможностью развернуть на них (пока сайт визитку, дальше больше) ну и сама админка (управление сайтом). Некоторые плюсы вроде описал.

По поводу демы, Демы пока нет. Но я думую в течение двух недель постараюсь хорошенько прокомметировать код, подготовить пару примеров. И выложить исходный код. А дальше уже ставте и тестите ;) буду очень рад этому. Спасибо за хорошие отзывы.
5. valenok - 07 Декабря, 2008 - 23:39:16 - перейти к сообщению
Будем ждать =)
А пока мне не совсем ясно, на кого рассчитано это все. На Васю у которого папа силен в математике, или на программистов которые возьмут твою программу за основу ?
Исходить наверное нужно из позиции того, что пользователь которому захотелось быстро красивый сайт визитку показать завтра будущему боссу, не будет перечитывать томы документаций, хотя и программист не будет, но и вообще наверное после нажатия на кнопочку Скачать, больше о тебе не вспомнит. А вот программисты же давно имеют все свое.
К сожалению нечто среднее на кого бы ты мог ориентироваться - не существует.
Поэтому хорошо документированный код, комментарии к месту и прочее уже хороши когда
пошло обширное распространение, и туда уже пишут плагины. А до тех пор, уверен уйдет просто уйма времени.

Могу присоединиться к разработке твоего движка косвенным образом.
Давай сразу строить сайт на его основе, где будет и мультисайтовость, и мультиязычность.
Мне нужно чтото в стиле sourceforge.com только на другом языке.
Планируется как интегрированная часть совсем другого сервиса, но это уже потом, походу. Пробуем, или ты пока сам подописываешь нехватающие части, залатаешь дырки и попишешь документации ?
6. Alexx - 08 Декабря, 2008 - 14:25:44 - перейти к сообщению
valenok пишет:
Будем ждать =)
А пока мне не совсем ясно, на кого рассчитано это все. На Васю у которого папа силен в математике, или на программистов которые возьмут твою программу за основу ?
Исходить наверное нужно из позиции того, что пользователь которому захотелось быстро красивый сайт визитку показать завтра будущему боссу, не будет перечитывать томы документаций, хотя и программист не будет, но и вообще наверное после нажатия на кнопочку Скачать, больше о тебе не вспомнит. А вот программисты же давно имеют все свое.
К сожалению нечто среднее на кого бы ты мог ориентироваться - не существует.
Поэтому хорошо документированный код, комментарии к месту и прочее уже хороши когда
пошло обширное распространение, и туда уже пишут плагины. А до тех пор, уверен уйдет просто уйма времени.

Могу присоединиться к разработке твоего движка косвенным образом.
Давай сразу строить сайт на его основе, где будет и мультисайтовость, и мультиязычность.
Мне нужно чтото в стиле sourceforge.com только на другом языке.
Планируется как интегрированная часть совсем другого сервиса, но это уже потом, походу. Пробуем, или ты пока сам подописываешь нехватающие части, залатаешь дырки и попишешь документации ?


Расчитано всё конечно прежде всего на разработчика. Но стараюсь не забывать и про Вась.
Изначальные комментарии в коде очень не помешают даже самому себе. При развёртывании нового сайта, многое забывается. А комментарии хорошо освежают памать.

Если присоеденишся к разработке это будет хорошо, (отправил тебе мои контакты в ЛС)
Мне нужна где-то неделя, на то чтобы протестить структуру, дабы потом не столкнуться с тупиками в логике. А дальше начну писать оболочку, админку, и модули. После первых модулей. Напишу документацию к ним. Но думаю тебе сорцы можно и раньше отдать, ничего страшного не будет.
7. valenok - 08 Декабря, 2008 - 21:12:40 - перейти к сообщению
Я думаю сейчас не имеет смысла что либо пытаться создать.
Подожду уже документацию, модули и более менее устойчивое ядро, а там можно уже
будет пытаться чтото с этим сделать на практике.
8. Stierus - 29 Декабря, 2008 - 17:07:36 - перейти к сообщению
Тоесть на основе codeigniter вы делаете Cms (пишите модели, представления, контроллеры для админки и клиентской части), я правильно понял ?
9. Alexx - 29 Декабря, 2008 - 21:41:37 - перейти к сообщению
Stierus пишет:
Тоесть на основе codeigniter вы делаете Cms (пишите модели, представления, контроллеры для админки и клиентской части), я правильно понял ?


Нет, из кодеигнитера я взял только MVC для модулей, и пару библиотек.

В принципе можно было бы конечно, заточить КИ как сделали MaxSite, но кажется мне это очень большим извратом,

Уже готова мультисайтовость, и мультиязычность, осталось ещё проработать страницы, и сделать разграничение прав доступа для админки.
10. Alexx - 07 Января, 2009 - 22:56:39 - перейти к сообщению
Докладываю о небольших успехах в разработке ;)
Изначально был разработан фреймворк, а на нём уже была построена кмс. Которая прилагается как бонус к фреймворку. Поэтому можно развернуть не просто сайт но и полноценное веб приложение на подобие cms.

ВОЗМОЖНОСТИ

Мультисайтовость
- Возможна одновременная работа c ресурсами сразу нескольких сайтов
- Ресурсы сайтов не пересекаются с друг другом.
- Сайты могут находится как на разных доменах так и на одном.
- Каждый сайт может иметь несколько алиасов
Например:
домен http://a[dot]ru это сайт а, домен http://b[dot]ru - сайт б
или http://b[dot]ru/sites/a = сайт а (url может быть любой, заданный в алиасах сайта)

Мультиязычность
- Каждый сайт может иметь несколько языков
- Каждый язык может иметь свою структуру сайта
- Авто/url определение языка по/для пользователя(ю)

SEO friendly
- title
- keywords
- description
- last page modifed

ХАРАКТЕРИСТИКИ

Безопасность
Запросы к БД проверяются на sql_injection, а url фильтруются на xss атаки.

Производительность
- Код системы выполняется только по мере надобности. Лишний код не выполняется.

Кеширование
Кешируется страницы, модули, виды.
Для каждого элемента можно установить время хранения, параметры сброса кеша.
Так же кешируются результаты запросов к БД. +Ожидается кеширование переменных.

Работа с базой данных
DbSimple - Используется библиотека абстракции от СУБД (MySQL, PostgreSQL, FireBird), имеющая очень лаконичный интерфейс и множество удобных на практике возможностей: различные виды placeholder-ов (в том числе списковые), построение динамически генерируемых запросов без запутывания и снижения читабельности кода, кэширование результатов запроса, выборка данных в виде массива или дерева одновременная работа сразу с несколькими подключениями к БД.

Фишки
Одновременная работа сразу с несколькими страницами.
p.s Страница есть контейнер содержащий шаблон, модули, виды. Поэтому одновременная работа сразу с несколькими страницами заключается в работе сразу с ресурсами разных страниц.


У кого какие ещё будут пожелания? После доведения кода до ума, будет выложен код под лицензией BSD (Делай с кодом, что хочешь, но копирайт не забудь поставить.)

 

Powered by ExBB FM 1.0 RC1