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 :: Вывод результатов работы модулей
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Попытаюсь сформулировать простым языком...
Есть у меня на сайте модули. Модуль users, articles и т.д...
Есть модуль content, который должен выводить на страницу результат работы других модулей. Ну может content это даже не модуль, а некий компонент - назовем так его.
Допустим есть роутер, который не важно каким способом, но пинает модули и они распознают в uri свои параметры.
Так вот, например модуль users распознал строку типа site/users/register
Модуль думает, ага - надо выполнить скрипт регистрации. Он его выполняет и говорит компоненту content - меня значит зовут модуль users, покажи ка на сайте форму регистрации - register_form.php
Компонент content должен взять register_form.php и загрузить ее в область контента.
Так вот я не могу реализовать эту передачу - от модуля к компоненту.
То есть смысл таков - модули выполняют свою работу, а результат должны передавать компоненту content. Как это сделать?
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
Саныч
Отправлено: 15 Августа, 2013 - 21:57:24
Участник
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
Так и сделайте. Сделайте в content метод, ну скажем setPage, который будет принимать один параметр - ваш register_form.php. В модуле вызываете этот метод и говорите ему, покажи register_form.php. А уже внутри вашего content нужно организовать, чтобы он нашел этот файл и сделал все что нужно. А также предусмотреть, если не был задан файл, либо задан неверный, то либо исключение бросить, либо какой-то файл по-умолчанию использовать, вобщем что-то сделать.
Вот я себе это как-то так представляю.
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
DelphinPRO
Отправлено: 15 Августа, 2013 - 22:40:32
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
ваш компонент "content" по описанию сильно смахивает на вьюху. Т.е. генерирует страницу и отдает пользователю. Что нужно вьюхе для генерации страницы?
1. Шаблон
2. Данные
Если вьюха сделана классом, можно сделать пару методов для указания шаблона и передачи данных. Если это просто функция - передавайте в параметрах.
----- Чем больше узнаю, тем больше я не знаю.
Hapson
Отправлено: 16 Августа, 2013 - 15:12:51
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Саныч пишет:
Так и сделайте. Сделайте в content метод, ну скажем setPage, который будет принимать один параметр - ваш register_form.php. В модуле вызываете этот метод и говорите ему, покажи register_form.php. А уже внутри вашего content нужно организовать, чтобы он нашел этот файл и сделал все что нужно. А также предусмотреть, если не был задан файл, либо задан неверный, то либо исключение бросить, либо какой-то файл по-умолчанию использовать, вобщем что-то сделать.
Вот я себе это как-то так представляю.
Так-то верно. Я тоже так думаю.
Модуль articles распознал свои параметры в uri, выполнил то, что от него требовалось и передает компоненту content какой-то вывод - форму, последние 5 статей или одну статью...
Но вот как реализовать сам компонент content я не соображу. Чтобы в шаблоне было только например
То есть, чтобы в шаблоне был один единственный вызов какого-то метода компонента content. (Добавление)
DelphinPRO пишет:
ваш компонент "content" по описанию сильно смахивает на вьюху. Т.е. генерирует страницу и отдает пользователю. Что нужно вьюхе для генерации страницы?
1. Шаблон
2. Данные
Если вьюха сделана классом, можно сделать пару методов для указания шаблона и передачи данных. Если это просто функция - передавайте в параметрах.
Да нет, не совсем так. Вьюхи есть в самих модулях. Там например форма регистрации, форма авторизации, форма добавления статьи, вывод статей и т.д.
А вот компонент content должен быть неким посредником между модулями и областью контента
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
DelphinPRO
Отправлено: 16 Августа, 2013 - 15:36:27
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Hapson пишет:
А вот компонент content должен быть неким посредником между модулями и областью контента
Да неважно как оно называется в вашей терминологии суть от этого не меняется. Я например делал "многоуровневые" вьюхи. Главная загружает основной скелет страницы, в этом скелете есть вызовы модулей и контента. Они вызываю соответственно вьюхи модулей и контента. При чем все вьюхи наследуются от общего класса View, имеют одинаковый интерфейс. Контроллеры модулей\компонентов\как_хочешь_назови запихивают данные в основную вьюху, а та при вложенном вызове передает их в вызываемую, таким образом данные доступны в любом шаблоне из любой вьюхи.
----- Чем больше узнаю, тем больше я не знаю.
Hapson
Отправлено: 16 Августа, 2013 - 16:06:10
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
DelphinPRO пишет:
Hapson пишет:
А вот компонент content должен быть неким посредником между модулями и областью контента
Да неважно как оно называется в вашей терминологии суть от этого не меняется. Я например делал "многоуровневые" вьюхи. Главная загружает основной скелет страницы, в этом скелете есть вызовы модулей и контента. Они вызываю соответственно вьюхи модулей и контента. При чем все вьюхи наследуются от общего класса View, имеют одинаковый интерфейс. Контроллеры модулей\компонентов\как_хочешь_назови запихивают данные в основную вьюху, а та при вложенном вызове передает их в вызываемую, таким образом данные доступны в любом шаблоне из любой вьюхи.
Как все сложно)))
Буду мыслить дальше. У меня вот есть html шаблон, вот он:
При загрузке шаблона вызывается метод load, который смотрит в БД таблицу модулей. В таблице модулей такие поля:
id_mod | position | activated
Если position = search_panel и activated = 1, то значит этот модуль нужно подключить.
Например модуль users, позиция search_panel, activated 1
А вот дальше например пользователь вводит email и password, модуль работает и видит что password не корректен. Сам модуль висит в позиции search_panel, а вот форму авторизации теперь он должен вывести в контенте, причем с сообщением об ошибке. То есть модуль users должен пнуть компонент контент и сказать ему что вывести вместо например статей
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
caballero
Отправлено: 16 Августа, 2013 - 16:16:19
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
При загрузке шаблона вызывается метод load, который смотрит в БД таблицу модулей.
шаблон должен подгружатся после обработки модулей.
тогда и какой шаблон выводить будете знать по результату работы модуля
Цитата:
То есть модуль users должен пнуть компонент контент и сказать ему что вывести вместо например статей
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
caballero
caballero пишет:
шаблон должен подгружатся после обработки модулей.
Золотые слова! А у меня получалось, что страница загрузилась, а потом уже модуль пытался что-то вывести.
caballero пишет:
забудьте жумлу с ее компонентами
Да я про нее не вспоминаю даже. Я даже не пытался разобраться в ее коде. Ну может похоже получается.
Ну а как еще?
users - модуль который авторизует и регистрирует пользователей. А также выводит профиль, ну вообщем работает с пользователями.
articles - модуль отвечающий за контент
content - тоже изначально был модулем. Но он сам по себе ничего не должен делать, а должен лишь служить мостом между модулями и областью контента. Поэтому я его обозвал компонентом.
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
caballero
Отправлено: 16 Августа, 2013 - 16:26:26
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
ну какой то главный контроллер должен быть
он и направляет запросы к модулям
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
caballero пишет:
ну какой то главный контроллер должен быть
он и направляет запросы к модулям
а модуль уже выводит нужный шаблон
С этим все хорошо.
Я не могу сделать вывод этих вот шаблонов именно в нужный div шаблона сайта.
Например модуль висит где-то в top_position, а вывести например форму он должен в позицию content, где по дефолту выводятся статьи
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
caballero
Отправлено: 16 Августа, 2013 - 16:34:28
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
caballero пишет:
а чего они вообще висят в шаблоне?
Ну вот такой казус пока только с модулем users.
Смысл таков:
При загрузке он должен подключиться и проверить, авторизован ли пользователь. Если авторизован, то он подключает файлик с приветствием и отображает его в своей позиции, то есть вверху. Если неавторизован, то он подключает файлик горизонтальной формой входа - ее он выводит тоже вверху.
Если пользователь например просто клацает по кнопке войти, не введя ничего в полях, то по задумке, горизонтальная форма либо пропадает, либо становится просто неактивной, а в область контента грузится уже вертикальная форма авторизации с сообщением об ошибке пользователя
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
caballero
Отправлено: 16 Августа, 2013 - 16:52:16
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
При загрузке он должен подключиться и проверить, авторизован ли пользователь.
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
caballero пишет:
Цитата:
При загрузке он должен подключиться и проверить, авторизован ли пользователь.
так это должно быть до шаблона
Да да да,именно так и есть - так и происходит у меня.
Вообщем что-то начало получаться у меня. Тут в одном месте немного ошибся в синтаксисе - в конструкторе класса присваивал значение статическому свойству через $this.
Кажется я все понял. caballero - спасибо, я понял где у меня были косяки
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
DelphinPRO
Отправлено: 16 Августа, 2013 - 17:27:21
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Hapson пишет:
При загрузке он должен подключиться и проверить, авторизован ли пользователь. Если авторизован, то он подключает файлик с приветствием и отображает его в своей позиции, то есть вверху. Если неавторизован, то он подключает файлик горизонтальной формой входа - ее он выводит тоже вверху.
вот тут я хочу высказать свое мнение.
Модуль (в понимании "небольшой блок, выводимый где-то на странице") не должен проверять авторизацию. Этим должна заниматься отдельная подсистема ядра приложения. При чем делать это перед началом обработки данных. А модулю потом достаточно лишь спросить статус пользователя у этой подсистемы и вывести либо один шаблон, либо другой.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.