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]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (8): « 1 2 [3] 4 5 6 7 8 »   

> Без описания
caballero
Отправлено: 19 Ноября, 2011 - 00:06:11
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




morph-x
Если у тебя клас Page возвращает страницу то какие переменные тогда собирает темплейт?
А если это части страниц то как ты привязываешь возвращенное модулями к перменным


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Ноября, 2011 - 00:34:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




morph-x
morph-x пишет:
$view = new Page($_GET["id"]);
return $view->html();

Зачем вьюшке GET? Она делает запросы? Чистит входные данные?
Это главная "прямая кишка" системы?
 
 Top
morph-x
Отправлено: 19 Ноября, 2011 - 01:23:50
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




DeepVarvar, Здесь вьюшка не такая как у MVC. Здесь файл view.php просто возвращает результат работы модуля (т.е. обработанный результат, html-код, а не сырой результат), и вьюшка здесь как бы действительно делает запросы. Наверное мне лучше ее переименовать Улыбка .
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Ноября, 2011 - 02:05:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




morph-x пишет:
обработанный результат, html-код, а не сырой результат
С этим ясно.
morph-x пишет:
вьюшка здесь как бы действительно делает запросы
Плохо. Хотя вы и говорите что с MVC не пересекаетесь, но это не так.
morph-x пишет:
пробегается по всех каталогах
Во всех ли или только в необходимых в данный момент?
Если во всех - минус в количестве обращений к ФС.
Если в необходимых в данный момент - тогда это явно не вьюшка.
Являются ли вьюшками те подключаемые файлы?
Судя по логике это "модельки", или же в них хтмл с логикой?
 
 Top
morph-x
Отправлено: 19 Ноября, 2011 - 02:26:03
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




DeepVarvar пишет:
Являются ли вьюшками те подключаемые файлы?

Да это как раз они. В каждой папке с модулем присутствует файл view.php. Последняя строчка в нем возвращает обработанный результат, который нужно вставить в нужное место в шаблоне. А то что пробегается по всех папках, это не вьюшка это у меня как бы шаблонизатор, кстати он пробегается не по всех папках. Он ищет переменные в шаблоне (например переменная меню выглядит так: {menu}), и записывает в массив. И получается как бы список модулей которые нужно использовать.
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Ноября, 2011 - 02:31:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




morph-x пишет:
{menu}
А если макрос в шаблоне объявлен более одного раза, как поступает "шаблонизатор", еще раз обращается к модулю за информацией?
Если да, то стоит подумать о буфере.
Сколько запросов к БД на страницу ожидается?
 
 Top
morph-x
Отправлено: 19 Ноября, 2011 - 02:40:43
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




DeepVarvar пишет:
А если макрос в шаблоне объявлен более одного раза, как поступает "шаблонизатор", еще раз обращается к модулю за информацией?
Если да, то стоит подумать о буфере.

Да, насчет буфера подумаю.

DeepVarvar пишет:
Сколько запросов к БД на страницу ожидается?

Два запроса: один на выборку самой страницы и еще один на выборку всех ее дочерних страниц.
 
 Top
caballero
Отправлено: 19 Ноября, 2011 - 02:54:52
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




так если уже есть массив переменных по которым модули дергаются зачем какой то буфер еще - в него и пиши ключ-значение


Цитата:
Два запроса: один на выборку самой страницы и еще один на выборку всех ее дочерних страниц


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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
morph-x
Отправлено: 19 Ноября, 2011 - 03:02:22
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




caballero пишет:
так если уже есть массив переменных по которым модули дергаются зачем какой то буфер еще - в него и пиши ключ-значение

Сори, что-то я спать хочу, соображаю не очень...

caballero пишет:
это каким таким чудом два запроса. Данные могут быть довольно сложные - иногда и пятью не обойдешся - посмотри на форум например

Моя CMS будет предназначена (пока что) для сайтов-визиток. А всю информацию о страницах я буду (по крайней мере постараюсь) держать в одной таблице, но даже если она будет в нескольких таблицах, то буду юзать JOIN'ы, чтобы максимально сократить количество запросов.
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Ноября, 2011 - 10:50:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




caballero пишет:
зачем какой то буфер еще
Предположим по дизайну меню дублируется снизу. И т.к. оно строится динамически, не стоит еще раз расточительно дергать кусок кода отдающий это меню.
Это лишние запросы, рекурсия, нагрузка и время.
Гораздо эффективнее пропустить любой результат через буфер.
При повторном обращении к модулю проверить не запрашивали ли этот результат выше.
И если запрашивали, выдать "запомненный" ранее результат.
 
 Top
caballero
Отправлено: 19 Ноября, 2011 - 12:23:41
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




ТС написал что формируется массив переменных (макросов) из шаблона по которому подымаются модули (чтобы не перебирать все подряд). Если так то вполне логично использовать этот же массив как буфер. Ключ - переменная, значение -данные с модуля.
Другое дело что такие редкоменяющиеся данные как меню вообще лучше закешировать или хотя бы в сессию засунуть.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Ноября, 2011 - 13:59:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




caballero пишет:
вполне логично использовать этот же массив как буфер. Ключ - переменная, значение -данные с модуля.
Именно это я и имел виду. Меню привел для примера.
У меня буфер, если говорить семантически, это отдельный "объект" "подключенный" в bypass, с методами:
autostore, store, read, autoread, clean, autoclean.
Т.е. можно явно управлять при вызове поведением.
Раньше я плодил буферы на каждое действие, теперь все локализовано в одном.
 
 Top
morph-x
Отправлено: 20 Ноября, 2011 - 01:57:52
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Хотел еще посоветоваться. У меня есть класс Registry (реестр), вот его код:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.     final class Registry {
  4.         private static $instance;
  5.         private static $registry;
  6.        
  7.         private function __construct() {}
  8.         private function __clone() {}
  9.         private function __wkaeup() {}
  10.        
  11.         public function &getInstance() {
  12.             if(is_null(self::$instance)) {
  13.                 self::$instance = new self;
  14.             }
  15.             return self::$instance;
  16.         }
  17.        
  18.         public function set($key, $value) {
  19.             self::$registry[$key] = $value;
  20.         }
  21.  
  22.         public function &get($key) {
  23.             return self::$registry[$key];
  24.         }
  25.     }
  26.  
  27. ?>

Ничего нового, просто обычный синглтон. Я хотел спросить насчет методов getInstance() и get(): хорошо ли возвращать ссылки или лучше без них, как считаете?
(Добавление)
Не, уже не надо сам разобрался (поэкспериментировал немного). Вот нормальный код:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.     final class Registry {
  4.         private static $instance;
  5.         private static $registry;
  6.        
  7.         private function __construct() {}
  8.         private function __clone() {}
  9.         private function __wkaeup() {}
  10.        
  11.         public static function getInstance() {
  12.             if(is_null(self::$instance)) {
  13.                 self::$instance = new self;
  14.             }
  15.             return self::$instance;
  16.         }
  17.        
  18.         public static function set($key, $value) {
  19.             self::$registry[$key] = $value;
  20.         }
  21.  
  22.         public static function get($key) {
  23.             return self::$registry[$key];
  24.         }
  25.     }
  26.  
  27. ?>
 
 Top
sKaa
Отправлено: 20 Ноября, 2011 - 02:49:30
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


morph-x пишет:
PHP:
скопировать код в буфер обмена
  1. private function __construct() {}
  2.         private function __clone() {}
  3.         private function __wkaeup() {}

Если ты так пытаешься защитить свой синглтон wkaeup поменяй на wakeup ))
(Добавление)
А вообще классу Rigistry можно дать интерфейс массивов

PHP:
скопировать код в буфер обмена
  1. class Registry implements ArrayAccess {
  2.         private $vars = array();
  3.        
  4.         public function set($name, $value){
  5.                 $this->vars[$name] = $value;
  6.                 }
  7.        
  8.  
  9.         public function __set($name, $value){
  10.                 $this->vars[$name] = $value;
  11.                 }
  12.        
  13.         public function __get($name){
  14.                 if($this->__isset($name)){
  15.                         return $this->vars[$name];
  16.                         }
  17.                 return false;
  18.                 }
  19.  
  20.         public function __isset($name){
  21.                 return isset($this->vars[$name]);
  22.                 }
  23.        
  24.         public function __unset($name){
  25.                 if($this->__isset($name)){
  26.                         unset($this->vars[$name]);
  27.                         return true;
  28.                         }
  29.                 return false;
  30.                 }      
  31.        
  32.  
  33.         function offsetExists($offset) {
  34.         return $this->__isset($this->vars[$offset]);
  35.                 }
  36.         function offsetGet($offset) {
  37.         return $this->__get($offset);
  38.                 }
  39.         function offsetSet($offset, $value) {
  40.         $this->__set($offset, $value);
  41.                 }
  42.         function offsetUnset($offset) {
  43.         $this->__unset($offset);
  44.                 }
  45.         }


И обращаться к нему как к обычному массиву :
$registry = new Registry();
$registry['...'] = '...';
можно и так :
$registry->set('123123', '123213');
 
 Top
morph-x
Отправлено: 20 Ноября, 2011 - 02:53:51
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




sKaa, Спасибо учту Улыбка . На самом деле это не оригинал кода, этот код я писал прямо на сайте и не заметил ошибки (в оригинальном Registry у меня еще есть ArrayAccess, но я думаю здесь это не очень важно).

(Отредактировано автором: 20 Ноября, 2011 - 03:04:37)

 
 Top
Страниц (8): « 1 2 [3] 4 5 6 7 8 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB