![]() |
#1 |
Эксперт
Регистрация: 12.12.2009
Адрес: Ростов-на-Дону
Сообщений: 1,537
Вес репутации: 257
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Заранее приношу извинения за сумбурность изложения. Вдруг кто поймёт
![]() Вот размышлял над тем как должен выглядеть быстрый (в плане малой загрузки сервера) и "удобный для меня" конструктор сайтов, и выношу на суд общественности первые результаты размышлений/экспериментов. Может конечно велосипед изобрёл (это случайно не model-view-controller?) Знаком с wordpress и drupal. Это системы основанные на контенте, всё крутится вокруг контента. А что если сделать систему в которой всё крутится вокруг "типов страниц" (а не типов контента, как, например, в друпале) т.е. 1. есть шаблон страницы, с некими регионами, в которые можно выводить информацию. 2. есть классы реализующие типы страниц. в этих классах есть методы get_region_header, get_region_footer и т.д. возвращающие контент, который должен отобразиться в соответствующих регионах. Т.е. класс типа страницы - полностью определяет что будет выдано в шаблон. 3. ядро системы - определяет к какому типу относится запрашиваемая страница (например по урл - /тип_страницы/имя_материала 4. ядро системы создаёт объект класса типа страницы обслуживающего этот данный тип страницы (в конструкторе передаём имя_материала) 5. ядро системы опрашивает объект страницы "что будем показывать в этом регионе" (для всех регионов шаблона) 6. ядро системы передаёт собранную информацию в шаблон. Само наполнение страницы - берётся из других классов, реализующих "типы материалов" (простой текст, текст с заголовком, карточка клиента и т.п.), или "блоки-виджеты" - комментарии и т.п. т.е. логика работы ядра будет выглядеть так: 1. тип_страницы = (определили тип страницы по url) 2. имя материала=(определили имя материала по url) 3. require_once(class_тип_страницы.php); 4. $o=new class_тип_страницы(имя_материала); 5. Опросили - чего будем выводить в регионы шаблона $regions['header']=$o->get_header(); .... $regions['footer']=$o->get_footer(); 6. передали массив $regions в шаблон, чтоб все регионы попали на свои места на странице. Минусы и плюсы 1. CMS вряд ли получится (надо лазить в код чтоб что-то поменять) НО поменять что-то на какой-то странице - легко и понятно где и как. 2. По поводу кэширования - сплошные плюсы (например, класс страницы может передать ядру информацию - какие регионы на этой странице можно кэшировать, и можно ли кэшировать страницу целиком) 3. Каждый тип контента реализуется в отдельной таблице базы данных (т.е. нет необходимости в модулях типа CCK в друпал) +к быстродействию 4. Загружаются только действительно необходимые для отображения данной страницы классы/модули +к быстродействию 5. Ясно видно какие блоки на каких страницах отображаются (не из админки конечно видно, а из кода) 6. Из-за чего собственно и начались размышления - возможность реализации "виртуальных" страниц, вообще не хранящихся в базе, а генерирующих контент по "имени_материала" в url. Ну и соответственно - возможность оставлять комментарии к таким "виртуальным" страницам. Простой пример - имя_материала - любое слово, контент страницы - только комментарии к этому слову (пример надуманный, но нечто подобное как раз и понадобилось) Если кто-нибудь что-нибудь понял. Прошу... ![]()
__________________
Самый удобный Хостинг (в т.ч. сейчас - бесплатное полугодовое тестирование хостинга Node.JS) |
![]() |
![]() |
![]() |
#3 |
Эксперт
|
![]() да несомненно. конечно так оно сложно сказать сходу, но думаю смысл очевиден.
__________________
|
![]() |
![]() |
![]() |
#4 |
Эксперт
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 264
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() eresik
У меня примерно так все и работает, только посложнее малек и еще гибче и не на пхп. Например через урл передавать тип контента - плохая идея. Да и зачем? Каждый объект должен сам знать, какого он типа. Также видел самописные цмс, работающие почти так, как вы описали. |
![]() |
![]() |
![]() |
#5 |
шайтанама
|
![]() >>> get_region_header, get_region_footer
дальше не читал. Выкинуть хедеры и футеры и начать думать заного.
__________________
МордоКнига ![]() |
![]() |
![]() |
![]() |
#6 |
Эксперт
Регистрация: 12.12.2009
Адрес: Ростов-на-Дону
Сообщений: 1,537
Вес репутации: 257
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Чего это их выкидывать.
Пусть будет возможность делать полностью уникальные страницы. Если охота чтоб хедеры/футеры везде были одинаковые - можно: 1. в базовом классе для типов страниц прописать "значения по умолчанию" 2. класс страницы может движку сообщать "регионы хедер и футер - можно кэшировать, без учёта авторизации пользователя (для всех пользователей - одинаковый контент в этих регионах)" или просто заранее прописать постоянное содержимое в шаблон страницы. (т.е. вызовом метода класс_типа_страницы->get_region_header() - всего лишь запрашиваем доп информацию выводимую в хеадер, если она есть) Щас "в процессе реализации", пока всё нравится. Удобно, не то что в друпале. Потестирую, возможно минусы перевесят конечно ("неуниверсальность" модулей/виджетов/шаблонов, каждый модуль/виджет реализует свой API) Пример реализации "виртуальных" страниц, генерируемых по url - http://turistovo.ru
__________________
Самый удобный Хостинг (в т.ч. сейчас - бесплатное полугодовое тестирование хостинга Node.JS) Последний раз редактировалось eresik; 18.10.2010 в 10:08. |
![]() |
![]() |
![]() |
#7 |
Мне повезёт!
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 291
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() У вас жестко задано деление страницы на 3 блока - хедер, футер и собственно сам контент. Между тем, блоков этих может быть как больше, так и меньше.
Я не говорю, что это плохо - есть очевидный плюс - простота. Но есть и очевидный минус - не универсальность. Где для вас оптимум - смотреть вам самим, т.к. достичь и простоты, и универсальности, и функциональность одновременно невозможно.
__________________
If it's not great, it's not the end. |
![]() |
![]() |
![]() |
#8 | |
Эксперт
Регистрация: 12.12.2009
Адрес: Ростов-на-Дону
Сообщений: 1,537
Вес репутации: 257
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Минус - кэшируются только регионы, но не отдельные блоки (а может это и плюс, хз). Если регион найден в кэше, то get_region_... вообще не вызывается. Запрашиваются только регионы страницы не обнаруженные в кэше (и регионы, по поводу которых класс типа страницы сообщил, что их нельзя кэшировать) Во-вторых - заранее сделать в шаблоне страницы кучу регионов (что сейчас и реализовано), и если блоков в регионе нет - регион вообще не выводится (т.е. если get_region_comments() - ничего не вернул, то регион комментариев вообще не выводится на страницу) В третьих (мне это не надо, но если очень хочется) - каждый тип страницы может сообщать движку "а мои блоки-регионы выводить в такой-то шаблон", т.е можно использовать несколько шаблонов (но как правило - в этом нет необходимости)
__________________
Самый удобный Хостинг (в т.ч. сейчас - бесплатное полугодовое тестирование хостинга Node.JS) Последний раз редактировалось eresik; 18.10.2010 в 10:27. Причина: Добавлено сообщение |
|
![]() |
![]() |
![]() |
#9 |
Мне повезёт!
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 291
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Тогда жестко заданы регионы, суть дела от этого не меняется
![]()
__________________
If it's not great, it's not the end. |
![]() |
![]() |
![]() |
#10 | |
Эксперт
Регистрация: 12.12.2009
Адрес: Ростов-на-Дону
Сообщений: 1,537
Вес репутации: 257
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Ну так это ж и не MVC
Так они во всех CMS жёстко заданы ![]() Цитата:
ЗНАЕТ в каком регионе будет выведена информация ЗНАЕТ у какого модуля взять информацию для вывода в этот регион, ЗНАЕТ в каком порядке будут выводится блоки в регионе (он их сам заносит в массив блоков для запрашиваемого региона). Роль класса страницы - загрузить модули используемые для вывода инфы на запрашиваемую страницу, и вернуть содержимое регионов полученное от модулей, например, от модуля комментариев) т.е. пример метода класса страницы, для вывода комментариев PHP код:
__________________
Самый удобный Хостинг (в т.ч. сейчас - бесплатное полугодовое тестирование хостинга Node.JS) Последний раз редактировалось eresik; 18.10.2010 в 11:01. |
|
![]() |
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
есть идея | tanir23 | Софт для оптимизаторов и вебмастеров | 13 | 02.09.2010 21:13 |
Идея | Йа Орешко | Курилка | 21 | 18.08.2010 01:36 |
Родилась идея СДЛ | Anadonam | Курилка | 19 | 14.01.2010 23:57 |
Идея!!! | Love911 | Курилка | 12 | 22.09.2009 12:47 |
Есть идея! | valu0808 | Курилка | 5 | 20.06.2009 01:55 |
Часовой пояс GMT +3, время: 18:58.