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 :: Вывод результатов работы модулей

 PHP.SU

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


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

> Описание: Помогите с реализацией
Hapson
Отправлено: 15 Августа, 2013 - 21:34:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


Попытаюсь сформулировать простым языком...

Есть у меня на сайте модули. Модуль users, articles и т.д...
Есть модуль content, который должен выводить на страницу результат работы других модулей. Ну может content это даже не модуль, а некий компонент - назовем так его.
Допустим есть роутер, который не важно каким способом, но пинает модули и они распознают в uri свои параметры.
Так вот, например модуль users распознал строку типа site/users/register
Модуль думает, ага - надо выполнить скрипт регистрации. Он его выполняет и говорит компоненту content - меня значит зовут модуль users, покажи ка на сайте форму регистрации - register_form.php
Компонент content должен взять register_form.php и загрузить ее в область контента.
Так вот я не могу реализовать эту передачу - от модуля к компоненту.

То есть смысл таков - модули выполняют свою работу, а результат должны передавать компоненту content. Как это сделать?


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
Саныч Модератор
Отправлено: 15 Августа, 2013 - 21:57:24
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




Так и сделайте. Сделайте в content метод, ну скажем setPage, который будет принимать один параметр - ваш register_form.php. В модуле вызываете этот метод и говорите ему, покажи register_form.php. А уже внутри вашего content нужно организовать, чтобы он нашел этот файл и сделал все что нужно. А также предусмотреть, если не был задан файл, либо задан неверный, то либо исключение бросить, либо какой-то файл по-умолчанию использовать, вобщем что-то сделать.
Вот я себе это как-то так представляю.


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
DelphinPRO
Отправлено: 15 Августа, 2013 - 22:40:32
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




ваш компонент "content" по описанию сильно смахивает на вьюху. Т.е. генерирует страницу и отдает пользователю. Что нужно вьюхе для генерации страницы?
1. Шаблон
2. Данные
Если вьюха сделана классом, можно сделать пару методов для указания шаблона и передачи данных. Если это просто функция - передавайте в параметрах.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Hapson
Отправлено: 16 Августа, 2013 - 15:12:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


Саныч пишет:
Так и сделайте. Сделайте в content метод, ну скажем setPage, который будет принимать один параметр - ваш register_form.php. В модуле вызываете этот метод и говорите ему, покажи register_form.php. А уже внутри вашего content нужно организовать, чтобы он нашел этот файл и сделал все что нужно. А также предусмотреть, если не был задан файл, либо задан неверный, то либо исключение бросить, либо какой-то файл по-умолчанию использовать, вобщем что-то сделать.
Вот я себе это как-то так представляю.

Так-то верно. Я тоже так думаю.
Модуль articles распознал свои параметры в uri, выполнил то, что от него требовалось и передает компоненту content какой-то вывод - форму, последние 5 статей или одну статью...
Но вот как реализовать сам компонент content я не соображу. Чтобы в шаблоне было только например

То есть, чтобы в шаблоне был один единственный вызов какого-то метода компонента content.
(Добавление)
DelphinPRO пишет:
ваш компонент "content" по описанию сильно смахивает на вьюху. Т.е. генерирует страницу и отдает пользователю. Что нужно вьюхе для генерации страницы?
1. Шаблон
2. Данные
Если вьюха сделана классом, можно сделать пару методов для указания шаблона и передачи данных. Если это просто функция - передавайте в параметрах.

Да нет, не совсем так. Вьюхи есть в самих модулях. Там например форма регистрации, форма авторизации, форма добавления статьи, вывод статей и т.д.
А вот компонент content должен быть неким посредником между модулями и областью контента
PHP:
скопировать код в буфер обмена
  1. <div id="content">
  2.     <?PHP Content::output(); ?>
  3. </div>

(Добавление)
PS
у меня получалось сделать такое взаимодействие, но вот выводить именно в нужном div не получается

(Отредактировано автором: 16 Августа, 2013 - 15:16:45)



-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
DelphinPRO
Отправлено: 16 Августа, 2013 - 15:36:27
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




Hapson пишет:
А вот компонент content должен быть неким посредником между модулями и областью контента
Да неважно как оно называется в вашей терминологии Улыбка суть от этого не меняется. Я например делал "многоуровневые" вьюхи. Главная загружает основной скелет страницы, в этом скелете есть вызовы модулей и контента. Они вызываю соответственно вьюхи модулей и контента. При чем все вьюхи наследуются от общего класса View, имеют одинаковый интерфейс. Контроллеры модулей\компонентов\как_хочешь_назови запихивают данные в основную вьюху, а та при вложенном вызове передает их в вызываемую, таким образом данные доступны в любом шаблоне из любой вьюхи.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Hapson
Отправлено: 16 Августа, 2013 - 16:06:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


DelphinPRO пишет:
Hapson пишет:
А вот компонент content должен быть неким посредником между модулями и областью контента
Да неважно как оно называется в вашей терминологии Улыбка суть от этого не меняется. Я например делал "многоуровневые" вьюхи. Главная загружает основной скелет страницы, в этом скелете есть вызовы модулей и контента. Они вызываю соответственно вьюхи модулей и контента. При чем все вьюхи наследуются от общего класса View, имеют одинаковый интерфейс. Контроллеры модулей\компонентов\как_хочешь_назови запихивают данные в основную вьюху, а та при вложенном вызове передает их в вызываемую, таким образом данные доступны в любом шаблоне из любой вьюхи.

Как все сложно)))
Буду мыслить дальше. У меня вот есть html шаблон, вот он:

PHP:
скопировать код в буфер обмена
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>Hapson's blog</title>
  5. <meta name="keywords" content="">
  6. <meta name="description" content="">
  7. <link rel="shortcut icon" href="/favicon.png">
  8. <meta http-equiv="Content-Language" content="ru">
  9. <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  10. <link rel="stylesheet" type="text/css" href="/template/<?PHP echo TEMPLATE;?>/style/style.css">
  11. </head>
  12. <body>
  13.         <div id="all">
  14.                 <div id="search_panel">
  15.                         <?PHP Apps::load('search_panel'); ?>
  16.                 </div>
  17.                 <div id="header">
  18.                         <div id="logo">
  19.                                 <img src="<?PHP echo '/template/'. TEMPLATE .'/image/logo.png'?>" width="307" height="122" usemap="#m_logo" alt="" />
  20.                                 <map name="m_logo">
  21.                                 <area shape="poly" coords="17,105,3,84,0,61,1,39,16,18,29,7,43,1,81,1,91,6,102,8,108,8,116,8,116,8,121,8,128,8,137,8,146,8,149,9,154,11,160,12,270,11,273,11,275,9,276,7,280,7,283,10,283,13,290,11,306,11,306,59,234,60,123,60,122,70,119,80,116,87,113,93,108,101,98,109,91,114,82,118,78,119,71,121,57,121,47,121,36,118,28,114,17,105" href="<?PHP echo SITE_URL ?>" title="Hapson's Blog" alt="Hapson's Blog">
  22.                                 </map>
  23.                         </div>
  24.                         <div id="top_navi">
  25.                                 <ul class="menu">
  26.                                         <li><a href="#">Блог</a></li>
  27.                                         <li><a href="#">Портфолио</a></li>
  28.                                         <li><a href="#">Контакты</a></li>
  29.                                         <li><a href="#">О сайте</a></li>
  30.                                 </ul>
  31.                         </div>
  32.                 </div>
  33.                 <div id="container">
  34.                         <div id="guide">
  35.                                
  36.                         </div>
  37.                         <div id="left_content">
  38.                                 <p>Левая колонка</p>
  39.                         </div>
  40.                         <div id="right_content">
  41.                                 <p>Правая колонка</p>
  42.                         </div>
  43.                         <div id="content">
  44.                                 <?PHP
  45.                                 Content::Out();
  46.                                 ?>
  47.                         </div>
  48.                 </div>
  49.                 <div id="footer">
  50.                         <div id="copy">
  51.                                 <?PHP
  52.                                 echo '&copy; '. SITE_NAME ."<br>";
  53.                                 echo 'Страница сгенерирована за : '. (microtime(1)-$start) .' сек.';
  54.                                 ?>
  55.                         </div>
  56.                 </div>
  57.         </div>
  58. </body>
  59. </html>


Вот этим вызываются все модули, которые включены в позиции search_panel

PHP:
скопировать код в буфер обмена
  1.  
  2. <div id="search_panel">
  3.         <?PHP Apps::load('search_panel'); ?>
  4. </div>


При загрузке шаблона вызывается метод load, который смотрит в БД таблицу модулей. В таблице модулей такие поля:

id_mod | position | activated

Если position = search_panel и activated = 1, то значит этот модуль нужно подключить.
Например модуль users, позиция search_panel, activated 1
А вот дальше например пользователь вводит email и password, модуль работает и видит что password не корректен. Сам модуль висит в позиции search_panel, а вот форму авторизации теперь он должен вывести в контенте, причем с сообщением об ошибке. То есть модуль users должен пнуть компонент контент и сказать ему что вывести вместо например статей


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
caballero
Отправлено: 16 Августа, 2013 - 16:16:19
Post Id


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


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


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




Цитата:
При загрузке шаблона вызывается метод load, который смотрит в БД таблицу модулей.

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



Цитата:
То есть модуль users должен пнуть компонент контент и сказать ему что вывести вместо например статей

забудьте жумлу с ее компонентами


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 16 Августа, 2013 - 16:22:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


caballero
caballero пишет:
шаблон должен подгружатся после обработки модулей.

Золотые слова! А у меня получалось, что страница загрузилась, а потом уже модуль пытался что-то вывести.

caballero пишет:
забудьте жумлу с ее компонентами


Да я про нее не вспоминаю даже. Я даже не пытался разобраться в ее коде. Ну может похоже получается.
Ну а как еще?
users - модуль который авторизует и регистрирует пользователей. А также выводит профиль, ну вообщем работает с пользователями.
articles - модуль отвечающий за контент
content - тоже изначально был модулем. Но он сам по себе ничего не должен делать, а должен лишь служить мостом между модулями и областью контента. Поэтому я его обозвал компонентом.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
caballero
Отправлено: 16 Августа, 2013 - 16:26:26
Post Id


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


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


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




ну какой то главный контроллер должен быть
он и направляет запросы к модулям

а модуль уже выводит нужный шаблон


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 16 Августа, 2013 - 16:31:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


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

а модуль уже выводит нужный шаблон

С этим все хорошо.
Я не могу сделать вывод этих вот шаблонов именно в нужный div шаблона сайта.
Например модуль висит где-то в top_position, а вывести например форму он должен в позицию content, где по дефолту выводятся статьи


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
caballero
Отправлено: 16 Августа, 2013 - 16:34:28
Post Id


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


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


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




а чего они вообще висят в шаблоне?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 16 Августа, 2013 - 16:49:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


caballero пишет:
а чего они вообще висят в шаблоне?

Ну вот такой казус пока только с модулем users.
Смысл таков:
При загрузке он должен подключиться и проверить, авторизован ли пользователь. Если авторизован, то он подключает файлик с приветствием и отображает его в своей позиции, то есть вверху. Если неавторизован, то он подключает файлик горизонтальной формой входа - ее он выводит тоже вверху.
Если пользователь например просто клацает по кнопке войти, не введя ничего в полях, то по задумке, горизонтальная форма либо пропадает, либо становится просто неактивной, а в область контента грузится уже вертикальная форма авторизации с сообщением об ошибке пользователя


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
caballero
Отправлено: 16 Августа, 2013 - 16:52:16
Post Id


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


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


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




Цитата:
При загрузке он должен подключиться и проверить, авторизован ли пользователь.

так это должно быть до шаблона


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 16 Августа, 2013 - 16:58:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


caballero пишет:
Цитата:
При загрузке он должен подключиться и проверить, авторизован ли пользователь.

так это должно быть до шаблона

Да да да,именно так и есть - так и происходит у меня.
Вообщем что-то начало получаться у меня. Тут в одном месте немного ошибся в синтаксисе - в конструкторе класса присваивал значение статическому свойству через $this.
Кажется я все понял.
caballero - спасибо, я понял где у меня были косяки


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
DelphinPRO
Отправлено: 16 Августа, 2013 - 17:27:21
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




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

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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB