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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Hapson
Отправлено: 28 Июля, 2013 - 19:56:43
Post Id



Посетитель


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


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

[+]


Подскажите пожалуйста, как организовать подключение модулей в шаблон.
Ну к примеру есть div в самом верху сайта - на всю ширину. Сегодня написал модуль авторизации, который выводит либо поля авторизации, либо приветствие. В шаблоне проинклюдил файл модуля авторизации, а этот файл уже определяет какой файлик с куском html вывести - форму или приветствие.
А вот если я захочу к примеру вставить в этот div форму поиска, то нужно будет руками проинклюдить файл модуля поиска в шаблон.
Как сделать так, чтобы в шаблоне были некие метки, на места которых будут загружаться определенные модули (меню, баннеры, поиск, авторизация, статьи, комментарии....)?
Можно конечно все проинклюдить руками, но как бы это реализовать в админке, чтобы не было никаких include_once в самом html шаблоне?
(Добавление)
ЗЫ
Наверное нужно смотреть в сторону DOMDocument? Или нет?


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
DeepVarvar Супермодератор
Отправлено: 28 Июля, 2013 - 20:36:44
Post Id



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


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


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




Нужно смотреть в сторону str_replace() этих самых меток.
Ну а как в админке эти метки будут выглядет - не важно.
Как вариант в админку - показывать "карту" лайоута в которой на возможных местах появления модулей будут висеть выпадающие списки всех доступных модулей, с возможностью множественного выбора.
 
 Top
caballero
Отправлено: 28 Июля, 2013 - 20:45:13
Post Id


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


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


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




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

(Отредактировано автором: 28 Июля, 2013 - 20:46:38)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 28 Июля, 2013 - 20:45:50
Post Id



Посетитель


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


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

[+]


DeepVarvar пишет:
Нужно смотреть в сторону str_replace() этих самых меток.
Ну а как в админке эти метки будут выглядет - не важно.
Как вариант в админку - показывать "карту" лайоута в которой на возможных местах появления модулей будут висеть выпадающие списки всех доступных модулей, с возможностью множественного выбора.

Что-то я не соображу...
Вот например
CODE (html):
скопировать код в буфер обмена
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title></title>
  5. <meta http-equiv="Content-Language" content="ru" />
  6. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  7. <body>
  8.     <div id="header">
  9.         <div id="top_line">
  10.              <include name="top_line">
  11.         </div>
  12.     </div>
  13. </body>
  14. </html>


Вот на место <include name="top_line"> вставлять один или несколько модулей. Я понимаю что делает str_replace(), но что-то не соображу.
(Добавление)
caballero пишет:
делать это в админке означает повторять функционал джумлы что глцпо.
а зачем это вообще в админке? ты что каждый день на сайте будешь модули менять?

Каждый день не буду. Я собственно не облезу, если руками в шаблоне пропишу. Просто хочется как-то облагородить это дело.
(Добавление)
ЗЫ
К тому же сегодня столкнулся с проблемой. Сначала подключил модуль авторизации прямо в шаблон. А при авторизации ставятся куки. Ну так получилось, что ставились они до вывода. А вот если подключить какой-то вывод перед модулем авторизации (к примеру форму поиска), то уже косяк.
Пришлось подключить модуль авторизации до подключения шаблона, а в шаблоне инклюдить нужные куски html с подстановкой значения в путь через переменную, которая определяется в файле авторизации.


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


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


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


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




инфраструктура для этого "облагораживания" будет содержать больше кода чем бизнес-логика


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 29 Июля, 2013 - 10:51:12
Post Id



Посетитель


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


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

[+]


Я вот тут почитал, подумал... я так понял, то что я захотел - это шаблонизатор. То есть, некая функция принимает html шаблон с некими метками и выдает этот шаблон с вставленным кодом php. Но что-то я так думаю, это идиотизм. Заменить код php в шаблоне на непонятные метки, чтобы потом php заменил эти метки опять на код php.

Но вот как бы сделать, чтобы вставки php в шаблоне вызывали то что нужно. К примеру до вывода отрабатывает код модуля авторизации и определяет - авторизован пользователь или нет. В зависимости от итога работы, модуль должен каким-то образом вставить на страницу форму авторизации или приветствие пользователя со ссылкой на профиль. Модуль должен работать до вывода, так как ставится кука.

Я сделал пока так:
в index.php подключается конфиг (константы с параметрами подключения к БД, константа корня сайта и т.п...), далее подключается файл с функцией __autoload, далее модуль авторизации и последним файл шаблона.
Модуль авторизации в конце работы присваивает переменной значение:
PHP:
скопировать код в буфер обмена
  1.  
  2. $panel = 'auth_form.php';
  3. //или
  4. $panel = 'auth_complet.php';
  5.  
  6. //А уже в шаблоне, в том месте, где выводится форма, я написал
  7. include_once(ROOT .'/mod/auth/'. $panel);


Если теперь нужно будет отключить авторизацию, то нужно будет убрать инклюд в index.php и в шаблоне. Можно конечно в шаблоне подключать форму в ифе, но и это как мне видится - не комильфо.

Все равно, нужен какой-то контроллер, который будет включать/выключать модули и определять, где они должны отображаться. Желательно, конечно же, чтобы управление было в админке, в удобном виде. Ну типа там поставил флажок, выбрал позицию из списка - заработала авторизация.
(Добавление)
ЗЫ
И это только первый модуль - авторизация. А дальше что? Каждый модуль инклюдить руками? В админке навигацию я делаю на $_GET, switch и if. Но вот с модулями на фронте так не выйдет.
(Добавление)
PPS
Не знаю, может кто-то скажет, что это лишний геморой, но у меня как бы мания к автоматизации всего, что можно автоматизировать. Захотел я, чтобы комп включался/выключался сам - настроил, работает. Надоело мне прогревать прогревать машину - поставил автозапуск - она сама прогревается зимой и охлаждается летом. Так и здесь, надо как-то автоматизировать подключение нужных модулей, только как...


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
DelphinPRO
Отправлено: 29 Июля, 2013 - 12:10:29
Post Id



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


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


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




Hapson, почему бы не взять готовый шаблонизатор? например Twig - оч гибкий

ну а если на php, то просто вставлять функцию в шаблон типа printModule(); В параметре передавать идентификатор или имя модуля, в зависимости от того, как модули хранятся в системе. Шаблон размечать руками, а не париться с созданием конструктора страницы в админке. Таким образом вы быстро напишете работающий прототип системы. В дальнейшем (раз уж у вас мания Улыбка ) вы сможете дописать функционал конструктора.

(Отредактировано автором: 29 Июля, 2013 - 12:13:13)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
caballero
Отправлено: 29 Июля, 2013 - 12:23:14
Post Id


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


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


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




Цитата:
Но вот как бы сделать, чтобы вставки php в шаблоне вызывали то что нужно.

написать там код который делает то что нужно


Цитата:
Желательно, конечно же, чтобы управление было в админке, в удобном виде. Ну типа там поставил флажок, выбрал позицию из списка - заработала авторизация.

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

Цитата:
Все равно, нужен какой-то контроллер, который будет включать/выключать модули

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


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



Посетитель


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


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

[+]


DelphinPRO
Вы гений!
У меня с практической реализацией вроде более-менее, а вот с логическим воплощением все плохо.
Действительно, нужно просто расставить функцию. Даже наверное написать класс с пока что одним статическим методом загрузки мобулей (раз уж в index.php подключен файл с __autoload).
Ну как-то так
PHP:
скопировать код в буфер обмена
  1.  <?PHP
  2. class ModController{
  3.         static function load($name_mod){
  4.                 $file = ROOT ."/mod/". $name_mod ."/load.php"
  5.                 if(file_exists($file)){
  6.                         return include_once $file;
  7.                 }else{
  8.                         return false;
  9.                 }
  10.         }
  11. }
  12. //а это расставить в шаблоне
  13. ModController::load("auth");
  14. ModController::load("menu");
  15. //и т.д...
  16. ?>


А уж потом можно сделать интерфейс в админке.

caballero
Да, я и сам могу в шаблоне все прописать.
А может я cms сделаю )))
Это не необходимость, а скорее самоудовлетворение, самоутверждение...


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
DelphinPRO
Отправлено: 29 Июля, 2013 - 14:47:42
Post Id



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


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


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




или вариант для вывода нескольких модулей
PHP:
скопировать код в буфер обмена
  1. ModController::modules("left"); // joomla forever :)

В админке конфигурируешь какие модули выводить в позиции left
в методе ::modules циклом их выводишь


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Hapson
Отправлено: 29 Июля, 2013 - 14:52:39
Post Id



Посетитель


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


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

[+]


DelphinPRO пишет:
или вариант для вывода нескольких модулей
PHP:
скопировать код в буфер обмена
  1. ModController::modules("left"); // joomla forever :)

В админке конфигурируешь какие модули выводить в позиции left
в методе ::modules циклом их выводишь

Да, спасибо за мысль.
Я уже тоже подумал о необходимости вывода нескольких экземпляров модуля.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
Hapson
Отправлено: 31 Июля, 2013 - 19:26:01
Post Id



Посетитель


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


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

[+]


Ну помогите еще пожалуйста.
Сделал как выше написано. В диве на странице написал ModController('mod_auth'). В классе подключается файлик модуля авторизации. Код модуля авторизации в конце принимает решение, что подключить - форму авторизации или приветствие.
А как бы сделать, чтобы при некорректных данных, выводилась форма, но только не в изначальный див, а в див контента?


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
DelphinPRO
Отправлено: 31 Июля, 2013 - 19:48:15
Post Id



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


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


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




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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Hapson
Отправлено: 31 Июля, 2013 - 20:00:14
Post Id



Посетитель


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


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

[+]


DelphinPRO пишет:
Есл нужно выводить именно форму - то делаете отдельную страницу авторизации и при случае редиректите туда. Если нужно просто вывести сообщение об ошибке - то напишите модуль SystemMessage() который будет аккумулировать системные сообщения от разных частей системы и выводить их в указанном месте.

Да, такой модуль нужен обязательно. А здесь нужно именно форму. То есть, если пользователь ввел что-то не то, то передается гет:
index.php?mod=auth&error=incorrect - некорректные данные, выводим форму
index.php?mod=auth&error=empty_field - заполнены не все поля, вывод формы
index.php?mod=auth&option=register - клик по ссылке регистрации, вывод другой формы
index.php?mod=auth&option=recovery - клик по ссылке восстановления пароля, вывод еще одной формы
index.php?mod=auth&error=block - N-ое кол-во попыток входа. Здесь уже можно вывести сообщение с помощью предложенного вами модуля.

А вот все формочки я думал сделать в модуле авторизации. Как например сейчас у меня в одном файле лежит форма, а в другом приветствие.


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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB