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 :: Динамическая подгрузка дополнительных условий в операторы выбора
Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
Здравствуйте!
Решил переделать движок своего сайта. Хочу сделать возможность динамического присоединения/удаления модулей.
Единственные грабли, обойти которые не могу, это админ панель, где, согласно GET-запросу, подгружаются те или иные элементы управления с нужными конфигами.
Возможно ли как-нибудь добавлять элементы elseif() в этот оператор выбора, например, при помощи include() или ещё чего-нибудь? Если нет, то подскажите, пожалуйста, другие пути решения. (только не через БД, пожалуйста! )
Заранее, спасибо!
Мелкий
Отправлено: 20 Января, 2011 - 15:12:05
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Закономерность какая?
folder_N/file.php , где N задаётся через GET?
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Возможно добавить через eval() но это будет говнокод!
Лутше записывать названия файлов в отдельный файл потом доставить file() и через цыкл проинклудить.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Линуксоид_Егор
Отправлено: 20 Января, 2011 - 15:24:53
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
Не всё так просто... Тот код был только примером.
Этот файл, в котором находится основа - index.php, который лежит в /admin/, редактировать нельзя (скрипту при добавлении/удалении модулей. Мне то можно ).
Вот пример реального кода:
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Линуксоид_Егор
Отправлено: 20 Января, 2011 - 15:47:05
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
Переменные, типа "непонятно чего" - защита. Вы сможете обратиться к скрипту, который инклудится только через index.php, так как не сможете задать значение этой переменной.
if(isset(ИМЯ_ПЕРЕМЕННОЙ_ДЛЯ_ПРОВЕРКИ) AND ИМЯ_ПЕРЕМЕННОЙ_ДЛЯ_ПРОВЕРКИ == КОД_ПРОВЕРКИ){// main test
/*
тут весь остальной код, который выполняется только в случае, если проверка пройдена...
*/
}// maintest
Их значения уникальны. GET отключён. Предугадать их невозможно, так как вписываю их хаотично, куда попаду по клавиатуре...
Такой метод искореняет возможность несанкционированного запуска скриптов в этой области.
Что касается файла и листинга к нему, идея интересна, но, собственно, тоже самое можно реализовать и через БД. Но если же нет возможности добавлять значение так, то, видимо, придётся капать именно в этом направлении...
Собственно, всем спасибо! OrmaJever, и отдельное спасибо за list() до этого о ней не знал.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Линуксоид_Егор
Отправлено: 20 Января, 2011 - 15:59:55
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
Да, собственно, большой разницы нет. Имена данных переменных ни где не используются - это >100%. Так что шанс, что переменная что-нибудь заденет = 0%.
А операция наличия переменной и операция простого сравнивания чисел большой нагрузки не несёт.
movEAX
Отправлено: 20 Января, 2011 - 16:26:59
Частый посетитель
Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009
Помог: 16 раз(а)
А может посмотреть в сторону MVC паттерна?
----- армия.. самое убогое место
Линуксоид_Егор
Отправлено: 20 Января, 2011 - 18:42:14
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
movEAX пишет:
А может посмотреть в сторону MVC паттерна?
Собственно. учился по обычному справочнику и до всего всегда дохожу сам.
(Может по-этому и пытаюсь найти учебник c/c++ без "воды"... )
Поэтому всё установленные шаблоны, по которым принято писать те или иные решения, меня не интересуют... Собственно, если правильно думать, то получится и так то, что нужно...
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Линуксоид_Егор пишет:
Поэтому всё установленные шаблоны, по которым принято писать те или иные решения, меня не интересуют...
Щас в интерентете есть шаблоны на большинство скриптов и когда вы думаете что придумали сами оно уже есть в интеренете)) http://habrahabr[dot]ru/blogs/php/31270/
Я сам читал и ничего интересного там не нашёл.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Invert
Отправлено: 20 Января, 2011 - 21:15:15
Частый гость
Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010
Помог: 5 раз(а)
Линуксоид_Егор пишет:
Решил переделать движок своего сайта. Хочу сделать возможность динамического присоединения/удаления модулей.
Не хочу вникать в вашу систему, но я бы сделал подключение модулей по такому принципу:
Модуль (он же юнит) имеет:
- Структуру с каталогами и файлами.
- Файл настроек (config.php\.xml)
- Главный исполняемый файл, который будет подключаться (unit.php, к примеру)
В движке должен работать библиотекарь юнитов (модуль), который занимается подключением\отключением юнитов. Запуск библиотекаря производится в админке.
В движке должен работать загрузчик юнитов (тоже модуль), который занимается загрузкой юнитов необходимых в процессе работы движка.
Добавление и подключение нового юнита:
- Загружаете каталог с юнитом в специальную директорию движка.
- Входите в админку.
- Запускаете библиотекарь.
- Библиотекарь проверяет все юниты в нужном каталоге, проверяет список включенных юнитов изъяв его с БД, выводит вам страницу юнитов.
- Вы активируете новый юнит и нажимаете сохранить.
- Библиотекарь сохраняет новый список включенных юнитов в БД.
Вам дальше останется только придумать систему, по которой ядро движка будет использовать активированные юниты, на основе списка созданного библиотекарем.
В этой схеме не нужно изменять код движка для включения\отключения юнитов. (Добавление)
Еще хочу добавить, что этот способ требует ООП и MVC, а также понимания, что именно вам требуется сделать, так как движек становится приближенным к CMF.
Линуксоид_Егор
Отправлено: 20 Января, 2011 - 21:51:09
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
Собственно, так и собирался сделать, с некоторыми отличиями, например, один и тот же модуль можно использовать в нескольких местах, в то время как система просто-напросто переместит всё содержимое исходников, подправляя на основе данных, введённых пользователем, добавляя таблицу в БД, и добавляя ссылку в основное меню сайта. Ну и конечно же, новую ветку в админку. Как я теперь решил, через туже БД...
Что касается готовых решений - пусть с ними возятся те, кто их пишет. Я, по крайней мере, буду знать, что, где и как работает, а не сидеть часами и разбираться, что там понаписали... ;)
Invert
Отправлено: 21 Января, 2011 - 03:21:43
Частый гость
Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010
Помог: 5 раз(а)
Линуксоид_Егор пишет:
один и тот же модуль можно использовать в нескольких местах
Это понятно. Подключив юнит, его можно использовать столько раз, сколько нужно.
Линуксоид_Егор пишет:
система просто-напросто переместит всё содержимое исходников
Вы что-то путаете. Никаких изменений в структуре движка\юнитов делать не нужно (кроме настроек в БД или конфиге).
Тот пример, который указан в вашем первом сообщении, есть ни что иное, как деревянный самокат с квадратными колесами. Ездить он может только по специальной дороге и только в одну сторону.
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Линуксоид_Егор В общем случае осуществление решения предполагаемой задачи может быть основано на составлении реалных вариативных условий без использования оператора eval и других средств явной модификации уровня трактования элементов и рассчитываемых выражений - в частности возможна огранизация общего цикла и осуществление проверки заданных аргументов и целевого ассоциированого модуля
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.