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
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Как сделать правильную CMS [3]
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
morph-x
Если у тебя клас Page возвращает страницу то какие переменные тогда собирает темплейт?
А если это части страниц то как ты привязываешь возвращенное модулями к перменным
Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011
Помог: 0 раз(а)
DeepVarvar, Здесь вьюшка не такая как у MVC. Здесь файл view.php просто возвращает результат работы модуля (т.е. обработанный результат, html-код, а не сырой результат), и вьюшка здесь как бы действительно делает запросы. Наверное мне лучше ее переименовать .
DeepVarvar
Отправлено: 19 Ноября, 2011 - 02:05:36
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
morph-x пишет:
обработанный результат, html-код, а не сырой результат
С этим ясно.
morph-x пишет:
вьюшка здесь как бы действительно делает запросы
Плохо. Хотя вы и говорите что с MVC не пересекаетесь, но это не так.
morph-x пишет:
пробегается по всех каталогах
Во всех ли или только в необходимых в данный момент?
Если во всех - минус в количестве обращений к ФС.
Если в необходимых в данный момент - тогда это явно не вьюшка.
Являются ли вьюшками те подключаемые файлы?
Судя по логике это "модельки", или же в них хтмл с логикой?
Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011
Помог: 0 раз(а)
DeepVarvar пишет:
Являются ли вьюшками те подключаемые файлы?
Да это как раз они. В каждой папке с модулем присутствует файл view.php. Последняя строчка в нем возвращает обработанный результат, который нужно вставить в нужное место в шаблоне. А то что пробегается по всех папках, это не вьюшка это у меня как бы шаблонизатор, кстати он пробегается не по всех папках. Он ищет переменные в шаблоне (например переменная меню выглядит так: {menu}), и записывает в массив. И получается как бы список модулей которые нужно использовать.
DeepVarvar
Отправлено: 19 Ноября, 2011 - 02:31:51
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
morph-x пишет:
{menu}
А если макрос в шаблоне объявлен более одного раза, как поступает "шаблонизатор", еще раз обращается к модулю за информацией?
Если да, то стоит подумать о буфере.
Сколько запросов к БД на страницу ожидается?
Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011
Помог: 0 раз(а)
DeepVarvar пишет:
А если макрос в шаблоне объявлен более одного раза, как поступает "шаблонизатор", еще раз обращается к модулю за информацией?
Если да, то стоит подумать о буфере.
Да, насчет буфера подумаю.
DeepVarvar пишет:
Сколько запросов к БД на страницу ожидается?
Два запроса: один на выборку самой страницы и еще один на выборку всех ее дочерних страниц.
caballero
Отправлено: 19 Ноября, 2011 - 02:54:52
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
так если уже есть массив переменных по которым модули дергаются зачем какой то буфер еще - в него и пиши ключ-значение
Цитата:
Два запроса: один на выборку самой страницы и еще один на выборку всех ее дочерних страниц
это каким таким чудом два запроса. Данные могут быть довольно сложные - иногда и пятью не обойдешся - посмотри на форум например
Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011
Помог: 0 раз(а)
caballero пишет:
так если уже есть массив переменных по которым модули дергаются зачем какой то буфер еще - в него и пиши ключ-значение
Сори, что-то я спать хочу, соображаю не очень...
caballero пишет:
это каким таким чудом два запроса. Данные могут быть довольно сложные - иногда и пятью не обойдешся - посмотри на форум например
Моя CMS будет предназначена (пока что) для сайтов-визиток. А всю информацию о страницах я буду (по крайней мере постараюсь) держать в одной таблице, но даже если она будет в нескольких таблицах, то буду юзать JOIN'ы, чтобы максимально сократить количество запросов.
DeepVarvar
Отправлено: 19 Ноября, 2011 - 10:50:00
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
caballero пишет:
зачем какой то буфер еще
Предположим по дизайну меню дублируется снизу. И т.к. оно строится динамически, не стоит еще раз расточительно дергать кусок кода отдающий это меню.
Это лишние запросы, рекурсия, нагрузка и время.
Гораздо эффективнее пропустить любой результат через буфер.
При повторном обращении к модулю проверить не запрашивали ли этот результат выше.
И если запрашивали, выдать "запомненный" ранее результат.
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
ТС написал что формируется массив переменных (макросов) из шаблона по которому подымаются модули (чтобы не перебирать все подряд). Если так то вполне логично использовать этот же массив как буфер. Ключ - переменная, значение -данные с модуля.
Другое дело что такие редкоменяющиеся данные как меню вообще лучше закешировать или хотя бы в сессию засунуть.
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
caballero пишет:
вполне логично использовать этот же массив как буфер. Ключ - переменная, значение -данные с модуля.
Именно это я и имел виду. Меню привел для примера.
У меня буфер, если говорить семантически, это отдельный "объект" "подключенный" в bypass, с методами:
autostore, store, read, autoread, clean, autoclean.
Т.е. можно явно управлять при вызове поведением.
Раньше я плодил буферы на каждое действие, теперь все локализовано в одном.
Ничего нового, просто обычный синглтон. Я хотел спросить насчет методов getInstance() и get(): хорошо ли возвращать ссылки или лучше без них, как считаете? (Добавление)
Не, уже не надо сам разобрался (поэкспериментировал немного). Вот нормальный код:
И обращаться к нему как к обычному массиву :
$registry = new Registry();
$registry['...'] = '...';
можно и так :
$registry->set('123123', '123213');
morph-x
Отправлено: 20 Ноября, 2011 - 02:53:51
Гость
Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011
Помог: 0 раз(а)
sKaa, Спасибо учту . На самом деле это не оригинал кода, этот код я писал прямо на сайте и не заметил ошибки (в оригинальном Registry у меня еще есть ArrayAccess, но я думаю здесь это не очень важно).
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.