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]   

> Без описания
Perun
Отправлено: 28 Февраля, 2017 - 08:50:01
Post Id


Гость


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


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




Перехожу на ЧПУ, столкнулся с проблемой, не могу отловить причину. может кто подскажет:
Схема у меня такая: Если после index.php? был один параметр(page=...) - это страница представления без скрипта, просто статичная html страница(в качестве модуля подключался дефолтный), если два параметра(module=...&page=...), первый соответственно название модуля, второй - имя скрипта. Т.е. МОДУЛЬ+ФАЙЛ в любом случае, а файл или php или html в зависимости от того, был указан модуль в параметрах или нет.
В ядре у меня вот такие подключения:
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['module'], $_GET['page'])) { include '/modules/'.$module.'/'.$page.'.php'; }
  2. include '/skins/'.SKIN.'/static/index.html';


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

Это htaccess:
CODE (htmlphp):
скопировать код в буфер обмена
  1. AddDefaultCharset UTF-8
  2. php_flag dysplay_errors ON
  3. php_value mbstring.internal_encoding UTF-8
  4. php_flag magic_quotes_gpc off
  5. php_flag register_globals off
  6.  
  7. RewriteEngine on
  8.  
  9. RewriteCond %{REQUEST_FILENAME} !-f
  10. RewriteCond %{REQUEST_FILENAME} !-d
  11.  
  12. RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

(Добавление)
Причину нашел, но чисто интуитивно. Я не понял, почему так происходит, может кто посветит...
Файлы представления просто не видели стили, находящиеся в общей папке для всего сайта. У меня предусмотрено наличие разных скинов для сайта. Так, стили для конкретного скина(в моем случае - дефолтного) заработали после копирования стилей и изображений в папку конкретного скина(в моем случае - дефолтного)
 
 Top
Perun
Отправлено: 02 Марта, 2017 - 00:22:40
Post Id


Гость


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


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




Опять таки очередная проблема.. :
У меня практически везде структура: МОДУЛЬ+ФАЙЛ+КЛЮЧИ-ПАРАМЕТРЫ и название файла представления совпадает с названием модуля.
Есть один модуль(app), в котором в зависимости от определенных условиы выводится три разные формы = три разных независимых файла с формами. Названия у них разные, поэтому в общий маршрутизатор они не особо вписываются. Нужно в самом маршрутизаторе прописывать относительно много условий. После многочасового мозгового штурма я сделал так: сделал один app.html файл , а в этом файле прописал минимаршрутизатор для этих трех файлов представления:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if ($_GET['key1'] == 'start') {
  3.         include 'start.html';
  4. }
  5. elseif ($_GET['key1'] == 'go') {
  6.         include 'go.html';     
  7. }
  8. elseif ($_GET['key1'] == 'over') {
  9.         include 'over.html';
  10. }
  11. ?>

Это часть основного маршрутизатора. отвечающего за вывод представления:
PHP:
скопировать код в буфер обмена
  1. include '/skins/'.MAIN.'/'.$module.'/'.$page.'.html';

С одной стороны - работает, и основной маршрутизатор теперь выглядит просто и понятно, с другой стороны - имею html файл чисто с php кодом.. Радость
Выглядит бредово, но другое мне в голову не приходит. Может подкините идей решения вопроса?

(Отредактировано автором: 02 Марта, 2017 - 00:28:29)

 
 Top
Строитель Модератор
Отправлено: 02 Марта, 2017 - 18:27:02
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




Вместо множества блоков if () else {} можно собрать список страниц (модулей), и организовать поиск в этом списке с последующим подключением запрошенного в GET-параметре модуля. Пример:
Спойлер (Отобразить)
 
 Top
Perun
Отправлено: 02 Марта, 2017 - 22:06:12
Post Id


Гость


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


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




Не с первого раза разобрался. А теперь появились вопросы:

Если я правильно понял. данный вариант предлагается взамен моего варианта, но все внутри того же html файла?
Меня этот меммент волновал в первую очередь - полностью код php в html файле. Насколько это корректно? Но роутер в точке входа не очень хочется обременять дополнительными исключениями, тем более ради одного модуля.

Другой момент - Может это только мне и по неопытности - обработка сложная/замысловатая(хотя может это мне так кажется, я функциями поиска в массиве и файлов не пользовался) на первый взгляд и объем кода не меньше, чем в первом варианте, в чем преимущества?

И попутно к этому же вопрос: Я несмотря на то, что почитал в разных источниках про file_exists, не понял, где конкретно будет вестись поиск? Весь сервер лопатить или только в пределах сайта и сколько времени будет занимать сам поиск?

П.С.: В 10 и 11 строках наверное расширения html должны быть указаны?
 
 Top
Строитель Модератор
Отправлено: 03 Марта, 2017 - 19:31:38
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




Perun пишет:
Если я правильно понял. данный вариант предлагается взамен моего варианта, но все внутри того же html файла?
Внутри пхп-файла.
Perun пишет:
Меня этот меммент волновал в первую очередь - полностью код php в html файле. Насколько это корректно?
Если я не ошибаюсь, расширение файла с пхп кодом внутри не имеет значения только в том случае, если этот файл (в вашем случае *.html) подключается в пхп файл, и если в этом (*.html) файле пхп код снабжён соответствующими открывающими/закрывающими пхп тегами.
Perun пишет:
объем кода не меньше, чем в первом варианте, в чем преимущества?
Если вам нужно сократить количество строк, то ваш массив можно записать в одну строку:
PHP:
скопировать код в буфер обмена
  1. $modules = ['start', 'go', 'over'];
Но это противоречит стандартам. Преимущества будут очевидны, если у вас в коде будет много блоков if () else - вместо них у вас будет один массив со значениями, и функция поиска по массиву. А повторяющегося кода (быдлокод) надо избегать.
Perun пишет:
И попутно к этому же вопрос: Я несмотря на то, что почитал в разных источниках про file_exists, не понял, где конкретно будет вестись поиск? Весь сервер лопатить или только в пределах сайта и сколько времени будет занимать сам поиск?
Поиск осуществляется в той директории, которую вы укажете в вашем коде. Если передать в file_exists() только имя файла (без директории), то поиск будет произведён в той же папке, в которой находится ваш файл с кодом.
 
 Top
Perun
Отправлено: 03 Марта, 2017 - 21:37:45
Post Id


Гость


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


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




Строитель пишет:
Внутри пхп-файла.

Тогда не получится. Это же представление. И в маршрутизаторе идет вызов именно html файлов. И все эти три файла из одного модуля - это именно представления. Просто три разные - в зависимости от состояния приложения. Поэтому я их и объединил в один html файл.
Строитель пишет:
Если я не ошибаюсь, расширение файла с пхп кодом внутри не имеет значения только в том случае, если этот файл (в вашем случае *.html) подключается в пхп файл, и если в этом (*.html) файле пхп код снабжён соответствующими открывающими/закрывающими пхп тегами.

Я не про синтаксис. Вопрос как раз в неписаных правилах..
 
 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