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


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

> Описание: Нужна помощь и советы
Линуксоид_Егор
Отправлено: 20 Января, 2011 - 14:59:57
Post Id



Новичок


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


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




Здравствуйте!
Решил переделать движок своего сайта. Хочу сделать возможность динамического присоединения/удаления модулей.
Единственные грабли, обойти которые не могу, это админ панель, где, согласно GET-запросу, подгружаются те или иные элементы управления с нужными конфигами.

Сейчас это выглядит примерно так:

PHP:
скопировать код в буфер обмена
  1.  
  2. ############################
  3. if(isset($_GET['do']) AND $_GET['do'] == "1"):
  4. include"./folder_1/file.php";
  5. ############################
  6.  
  7. ############################
  8. elsif(isset($_GET['do']) AND $_GET['do'] == "2"):
  9. include"./folder_2/file.php";
  10. ############################
  11.  
  12. ############################
  13. else:
  14. include"./info.php";
  15. ############################
  16. endif;
  17. ############################
  18.  


Возможно ли как-нибудь добавлять элементы elseif() в этот оператор выбора, например, при помощи include() или ещё чего-нибудь? Если нет, то подскажите, пожалуйста, другие пути решения. (только не через БД, пожалуйста! Улыбка)

Заранее, спасибо!
 
 Top
Мелкий Супермодератор
Отправлено: 20 Января, 2011 - 15:12:05
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Закономерность какая?
folder_N/file.php , где N задаётся через GET?

Тогда без проблем:
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['do']) && is_numeric($_GET['do']) && file_exists("folder_".$_GET['do']."/file.php")) {
  2. include "folder_".$_GET['do']."/file.php";
  3. } else echo 404;
  4.  


-----
PostgreSQL DBA
 
 Top
OrmaJever Модератор
Отправлено: 20 Января, 2011 - 15:14:18
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Возможно добавить через eval() но это будет говнокод!
Лутше записывать названия файлов в отдельный файл потом доставить file() и через цыкл проинклудить.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Линуксоид_Егор
Отправлено: 20 Января, 2011 - 15:24:53
Post Id



Новичок


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


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




Не всё так просто... Тот код был только примером.
Этот файл, в котором находится основа - index.php, который лежит в /admin/, редактировать нельзя (скрипту при добавлении/удалении модулей. Мне то можно Улыбка ).
Вот пример реального кода:

PHP:
скопировать код в буфер обмена
  1. ########################################################################
  2. ## НАСТРОЙКИ САЙТА
  3. ########################################################################
  4. if(isset($_GET['get']) AND $_GET['get']=="site_options"):
  5.         $tyu = "879845641521549684787489485468897484984787894654";
  6.         print "<title>Официальный сайт МОУ СОШ п. Мичуринский. Панель администратора. Настройки сайта</title>";
  7.         include("./site/option.php");
  8.  
  9.  
  10. elseif(isset($_GET['get']) AND $_GET['get']=="site_options_save"):
  11.         $hhh = "54984654847894648";
  12.         print "<title>Официальный сайт МОУ СОШ п. Мичуринский. Панель администратора. Сохранение настроек для сайта</title>";
  13.         include("./site/save.php");
  14. ########################################################################
  15. ## РЕДАКТИРОВАНИЕ КОЛОНОК
  16. ########################################################################       
  17. elseif(isset($_GET['get']) AND $_GET['get']=="page_config_edit"):
  18.         $jsnjksndflasfblabahlfb = "567894313123174897845121";
  19.         print "<title>Официальный сайт МОУ СОШ п. Мичуринский. Панель администратора. Настройки сайта. Конфигурация страниц</title>";
  20.         include("./site/page_config_edit.php");
  21.        
  22. elseif(isset($_GET['get']) AND $_GET['get']=="page_config_save"):
  23.         $jknaszknzmfnwbh = "54964986431313241548";
  24.         print "<title>Официальный сайт МОУ СОШ п. Мичуринский. Панель администратора. Настройки сайта. Конфигурация страниц. Сохранение</title>";
  25.         include("./site/page_config_save.php");
  26.        
  27. ########################################################################
  28. ## НАСТРОЙКИ САЙТА
  29. ########################################################################


И это только малая его часть. Подмигивание
Ссори за полосы из ###, так легче искать, что и как... без них запутаться проще паренной репы...

===============================

Насчёт eval(), не понял, как может помочь в добавлении условий?

(Отредактировано автором: 20 Января, 2011 - 15:27:37)

 
 Top
OrmaJever Модератор
Отправлено: 20 Января, 2011 - 15:32:42
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




что это?
PHP:
скопировать код в буфер обмена
  1. $tyu = "879845641521549684787489485468897484984787894654";
  2. ...
  3. $hhh = "54984654847894648";
  4. ...
  5. $jsnjksndflasfblabahlfb = "567894313123174897845121";
  6. ...
  7. $jknaszknzmfnwbh = "54964986431313241548";
  8.  


И как я говорил. Создать отделай файл (filename.txt) и писать туда сылки
CODE (htmlphp):
скопировать код в буфер обмена
  1. ./site/option.php | титлы для этой сылки
  2. ./site/save.php | титлы...

ну а потом из этого файла брать
PHP:
скопировать код в буфер обмена
  1. $f = file('filename.txt');
  2. foreach($f as $val)
  3. {
  4.    list($link, $title) = explode('|', $val);
  5.    include_once($link);
  6.    echo "<title>$title</title>";
  7. }


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Линуксоид_Егор
Отправлено: 20 Января, 2011 - 15:47:05
Post Id



Новичок


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


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




Переменные, типа "непонятно чего" - защита. Вы сможете обратиться к скрипту, который инклудится только через index.php, так как не сможете задать значение этой переменной. Улыбка

В начале каждого скрипта стоит:

PHP:
скопировать код в буфер обмена
  1.  
  2. if(isset(ИМЯ_ПЕРЕМЕННОЙ_ДЛЯ_ПРОВЕРКИ) AND ИМЯ_ПЕРЕМЕННОЙ_ДЛЯ_ПРОВЕРКИ == КОД_ПРОВЕРКИ) { // main test
  3. /*
  4. тут весь остальной код, который выполняется только в случае, если проверка пройдена...
  5. */
  6. } // maintest
  7.  


Их значения уникальны. GET отключён. Предугадать их невозможно, так как вписываю их хаотично, куда попаду по клавиатуре... Радость
Такой метод искореняет возможность несанкционированного запуска скриптов в этой области.

Что касается файла и листинга к нему, идея интересна, но, собственно, тоже самое можно реализовать и через БД. Но если же нет возможности добавлять значение так, то, видимо, придётся капать именно в этом направлении... Хм Растерялся

Собственно, всем спасибо!
OrmaJever, и отдельное спасибо за list() до этого о ней не знал. Улыбка

(Отредактировано автором: 20 Января, 2011 - 15:49:09)

 
 Top
OrmaJever Модератор
Отправлено: 20 Января, 2011 - 15:53:37
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Линуксоид_Егор пишет:
Переменные, типа "непонятно чего" - защита

Обычно используют константы.
Вначале индекса пишите

и во всех файлах которые инклудятся так жу вначале

(Отредактировано автором: 20 Января, 2011 - 15:53:54)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Линуксоид_Егор
Отправлено: 20 Января, 2011 - 15:59:55
Post Id



Новичок


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


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




Да, собственно, большой разницы нет. Имена данных переменных ни где не используются - это >100%. Так что шанс, что переменная что-нибудь заденет = 0%.
А операция наличия переменной и операция простого сравнивания чисел большой нагрузки не несёт.
 
 Top
movEAX
Отправлено: 20 Января, 2011 - 16:26:59
Post Id



Частый посетитель


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


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




А может посмотреть в сторону MVC паттерна?


-----
армия.. самое убогое место
 
 Top
Линуксоид_Егор
Отправлено: 20 Января, 2011 - 18:42:14
Post Id



Новичок


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


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




movEAX пишет:
А может посмотреть в сторону MVC паттерна?


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

(Отредактировано автором: 20 Января, 2011 - 19:29:51)

 
 Top
OrmaJever Модератор
Отправлено: 20 Января, 2011 - 20:28:55
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Линуксоид_Егор пишет:
Поэтому всё установленные шаблоны, по которым принято писать те или иные решения, меня не интересуют...

Щас в интерентете есть шаблоны на большинство скриптов и когда вы думаете что придумали сами оно уже есть в интеренете))
http://habrahabr[dot]ru/blogs/php/31270/
Я сам читал и ничего интересного там не нашёл.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Invert
Отправлено: 20 Января, 2011 - 21:15:15
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


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




Линуксоид_Егор пишет:
Решил переделать движок своего сайта. Хочу сделать возможность динамического присоединения/удаления модулей.

Не хочу вникать в вашу систему, но я бы сделал подключение модулей по такому принципу:

Модуль (он же юнит) имеет:
- Структуру с каталогами и файлами.
- Файл настроек (config.php\.xml)
- Главный исполняемый файл, который будет подключаться (unit.php, к примеру)

В движке должен работать библиотекарь юнитов (модуль), который занимается подключением\отключением юнитов. Запуск библиотекаря производится в админке.

В движке должен работать загрузчик юнитов (тоже модуль), который занимается загрузкой юнитов необходимых в процессе работы движка.


Добавление и подключение нового юнита:
- Загружаете каталог с юнитом в специальную директорию движка.
- Входите в админку.
- Запускаете библиотекарь.
- Библиотекарь проверяет все юниты в нужном каталоге, проверяет список включенных юнитов изъяв его с БД, выводит вам страницу юнитов.
- Вы активируете новый юнит и нажимаете сохранить.
- Библиотекарь сохраняет новый список включенных юнитов в БД.

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

В этой схеме не нужно изменять код движка для включения\отключения юнитов.
(Добавление)
Еще хочу добавить, что этот способ требует ООП и MVC, а также понимания, что именно вам требуется сделать, так как движек становится приближенным к CMF.
 
 Top
Линуксоид_Егор
Отправлено: 20 Января, 2011 - 21:51:09
Post Id



Новичок


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


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




Собственно, так и собирался сделать, с некоторыми отличиями, например, один и тот же модуль можно использовать в нескольких местах, в то время как система просто-напросто переместит всё содержимое исходников, подправляя на основе данных, введённых пользователем, добавляя таблицу в БД, и добавляя ссылку в основное меню сайта. Ну и конечно же, новую ветку в админку. Как я теперь решил, через туже БД...

Что касается готовых решений - пусть с ними возятся те, кто их пишет. Радость Я, по крайней мере, буду знать, что, где и как работает, а не сидеть часами и разбираться, что там понаписали... ;)
 
 Top
Invert
Отправлено: 21 Января, 2011 - 03:21:43
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


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




Линуксоид_Егор пишет:
один и тот же модуль можно использовать в нескольких местах

Это понятно. Подключив юнит, его можно использовать столько раз, сколько нужно.
Линуксоид_Егор пишет:
система просто-напросто переместит всё содержимое исходников

Вы что-то путаете. Никаких изменений в структуре движка\юнитов делать не нужно (кроме настроек в БД или конфиге).

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

(Отредактировано автором: 21 Января, 2011 - 03:25:52)

 
 Top
JustUserR
Отправлено: 21 Января, 2011 - 14:22:28
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




Линуксоид_Егор В общем случае осуществление решения предполагаемой задачи может быть основано на составлении реалных вариативных условий без использования оператора eval и других средств явной модификации уровня трактования элементов и рассчитываемых выражений - в частности возможна огранизация общего цикла и осуществление проверки заданных аргументов и целевого ассоциированого модуля


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB