Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Подскажите пожалуйста, как организовать подключение модулей в шаблон.
Ну к примеру есть div в самом верху сайта - на всю ширину. Сегодня написал модуль авторизации, который выводит либо поля авторизации, либо приветствие. В шаблоне проинклюдил файл модуля авторизации, а этот файл уже определяет какой файлик с куском html вывести - форму или приветствие.
А вот если я захочу к примеру вставить в этот div форму поиска, то нужно будет руками проинклюдить файл модуля поиска в шаблон.
Как сделать так, чтобы в шаблоне были некие метки, на места которых будут загружаться определенные модули (меню, баннеры, поиск, авторизация, статьи, комментарии....)?
Можно конечно все проинклюдить руками, но как бы это реализовать в админке, чтобы не было никаких include_once в самом html шаблоне? (Добавление) ЗЫ
Наверное нужно смотреть в сторону DOMDocument? Или нет?
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
DeepVarvar
Отправлено: 28 Июля, 2013 - 20:36:44
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Нужно смотреть в сторону str_replace() этих самых меток.
Ну а как в админке эти метки будут выглядет - не важно.
Как вариант в админку - показывать "карту" лайоута в которой на возможных местах появления модулей будут висеть выпадающие списки всех доступных модулей, с возможностью множественного выбора.
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
DeepVarvar пишет:
Нужно смотреть в сторону str_replace() этих самых меток.
Ну а как в админке эти метки будут выглядет - не важно.
Как вариант в админку - показывать "карту" лайоута в которой на возможных местах появления модулей будут висеть выпадающие списки всех доступных модулей, с возможностью множественного выбора.
Вот на место <include name="top_line"> вставлять один или несколько модулей. Я понимаю что делает str_replace(), но что-то не соображу. (Добавление)
caballero пишет:
делать это в админке означает повторять функционал джумлы что глцпо.
а зачем это вообще в админке? ты что каждый день на сайте будешь модули менять?
Каждый день не буду. Я собственно не облезу, если руками в шаблоне пропишу. Просто хочется как-то облагородить это дело. (Добавление) ЗЫ
К тому же сегодня столкнулся с проблемой. Сначала подключил модуль авторизации прямо в шаблон. А при авторизации ставятся куки. Ну так получилось, что ставились они до вывода. А вот если подключить какой-то вывод перед модулем авторизации (к примеру форму поиска), то уже косяк.
Пришлось подключить модуль авторизации до подключения шаблона, а в шаблоне инклюдить нужные куски html с подстановкой значения в путь через переменную, которая определяется в файле авторизации.
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
caballero
Отправлено: 28 Июля, 2013 - 21:12:24
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
инфраструктура для этого "облагораживания" будет содержать больше кода чем бизнес-логика
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Я вот тут почитал, подумал... я так понял, то что я захотел - это шаблонизатор. То есть, некая функция принимает html шаблон с некими метками и выдает этот шаблон с вставленным кодом php. Но что-то я так думаю, это идиотизм. Заменить код php в шаблоне на непонятные метки, чтобы потом php заменил эти метки опять на код php.
Но вот как бы сделать, чтобы вставки php в шаблоне вызывали то что нужно. К примеру до вывода отрабатывает код модуля авторизации и определяет - авторизован пользователь или нет. В зависимости от итога работы, модуль должен каким-то образом вставить на страницу форму авторизации или приветствие пользователя со ссылкой на профиль. Модуль должен работать до вывода, так как ставится кука.
Я сделал пока так:
в index.php подключается конфиг (константы с параметрами подключения к БД, константа корня сайта и т.п...), далее подключается файл с функцией __autoload, далее модуль авторизации и последним файл шаблона.
Модуль авторизации в конце работы присваивает переменной значение:
//А уже в шаблоне, в том месте, где выводится форма, я написал
include_once(ROOT .'/mod/auth/'.$panel);
Если теперь нужно будет отключить авторизацию, то нужно будет убрать инклюд в index.php и в шаблоне. Можно конечно в шаблоне подключать форму в ифе, но и это как мне видится - не комильфо.
Все равно, нужен какой-то контроллер, который будет включать/выключать модули и определять, где они должны отображаться. Желательно, конечно же, чтобы управление было в админке, в удобном виде. Ну типа там поставил флажок, выбрал позицию из списка - заработала авторизация. (Добавление) ЗЫ
И это только первый модуль - авторизация. А дальше что? Каждый модуль инклюдить руками? В админке навигацию я делаю на $_GET, switch и if. Но вот с модулями на фронте так не выйдет. (Добавление) PPS
Не знаю, может кто-то скажет, что это лишний геморой, но у меня как бы мания к автоматизации всего, что можно автоматизировать. Захотел я, чтобы комп включался/выключался сам - настроил, работает. Надоело мне прогревать прогревать машину - поставил автозапуск - она сама прогревается зимой и охлаждается летом. Так и здесь, надо как-то автоматизировать подключение нужных модулей, только как...
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
DelphinPRO
Отправлено: 29 Июля, 2013 - 12:10:29
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Hapson, почему бы не взять готовый шаблонизатор? например Twig - оч гибкий
ну а если на php, то просто вставлять функцию в шаблон типа printModule(); В параметре передавать идентификатор или имя модуля, в зависимости от того, как модули хранятся в системе. Шаблон размечать руками, а не париться с созданием конструктора страницы в админке. Таким образом вы быстро напишете работающий прототип системы. В дальнейшем (раз уж у вас мания ) вы сможете дописать функционал конструктора.
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Но вот как бы сделать, чтобы вставки php в шаблоне вызывали то что нужно.
написать там код который делает то что нужно
Цитата:
Желательно, конечно же, чтобы управление было в админке, в удобном виде. Ну типа там поставил флажок, выбрал позицию из списка - заработала авторизация.
смотри реализацию ав Джумле. но повторять такое нет смысла.
Не понимаю этого помешательства на админках у новичков. Никакой юзер с этими админками работиать не будет. А програмисту проще подкоректировать код на месте.
Цитата:
Все равно, нужен какой-то контроллер, который будет включать/выключать модули
ну так сделай эту опцию в самом модуле. если он выключен то ввернет пустую строку и которую шаблонизатор выведет и в результате ничего не пояявится. и не надо менять шаблон.
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
DelphinPRO
Вы гений!
У меня с практической реализацией вроде более-менее, а вот с логическим воплощением все плохо.
Действительно, нужно просто расставить функцию. Даже наверное написать класс с пока что одним статическим методом загрузки мобулей (раз уж в index.php подключен файл с __autoload).
Ну как-то так
В админке конфигурируешь какие модули выводить в позиции left
в методе ::modules циклом их выводишь
Да, спасибо за мысль.
Я уже тоже подумал о необходимости вывода нескольких экземпляров модуля.
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
Hapson
Отправлено: 31 Июля, 2013 - 19:26:01
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Ну помогите еще пожалуйста.
Сделал как выше написано. В диве на странице написал ModController('mod_auth'). В классе подключается файлик модуля авторизации. Код модуля авторизации в конце принимает решение, что подключить - форму авторизации или приветствие.
А как бы сделать, чтобы при некорректных данных, выводилась форма, но только не в изначальный див, а в див контента?
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
DelphinPRO
Отправлено: 31 Июля, 2013 - 19:48:15
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Есл нужно выводить именно форму - то делаете отдельную страницу авторизации и при случае редиректите туда. Если нужно просто вывести сообщение об ошибке - то напишите модуль SystemMessage() который будет аккумулировать системные сообщения от разных частей системы и выводить их в указанном месте.
----- Чем больше узнаю, тем больше я не знаю.
Hapson
Отправлено: 31 Июля, 2013 - 20:00:14
Посетитель
Покинул форум
Сообщений всего: 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-ое кол-во попыток входа. Здесь уже можно вывести сообщение с помощью предложенного вами модуля.
А вот все формочки я думал сделать в модуле авторизации. Как например сейчас у меня в одном файле лежит форма, а в другом приветствие.
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.