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 :: Про ЧПУ и не только.. [7]
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Незачем записывать "текущий УРЛ" в сессию, он и так текущий.
В чем смысл этих действий?
Или ты имел виду что точка добавления комментариев у тебя находится, напимер, на "/comments/add", а сам комментируетмый материал на "/a/b/c/d", и тебе типа надо пройти после добавления комментария на этот "/a/b/c/d" ?
Покинул форум
Сообщений всего: 105
Дата рег-ции: Март 2012
Помог: 0 раз(а)
DeepVarvar пишет:
Незачем записывать "текущий УРЛ" в сессию, он и так текущий.
В чем смысл этих действий?
Или ты имел виду что точка добавления комментариев у тебя находится, напимер, на "/comments/add", а сам комментируетмый материал на "/a/b/c/d", и тебе типа надо пройти после добавления комментария на этот "/a/b/c/d" ?
Предположим, имеется страница c ЧПУ $params[0]=page_1, на этой странице находится статья со списком комментариев и формой добавления нового комментария,
при чем комментарии записываются в таблицу бд, содержащую следующие столбцы:
1. id //номер коммента AI
2. link //Это как раз-таки page_1, т.е. ЧПУ страницы, которую комментируют, по которому комментарий и определяет свою страницу при выборке из бд
3. date // дата добавления
4. id_author // id пользователя(автора коммента)
5. text // собственно сам коммент (текст коммента)
А чтобы передать обработчику эту ссылку, и используется механизм сессий,
Я конечно подумал, может отказаться от такой затеи,
и просто передать в поле input hidden эту ссылку, но опять же возможен и такой вариант: какие-нибудь "гавнюки" набьют базу данных нехорошей информацией, прочитав и изменив это поле через браузер
А сессию прочитать не каждый школьник сможет, но это я грубо выразился.
Кстати, я нашел причину, из-за которой в сессию не добавлялся $_SERVER['QUERY_STRING'] и $params[0]
Оказывается это класс шаблонизации, которым я пользуюсь, и который стащил отсюда, спасибо огромное автору за этот класс, работает отлично: http://www.php.su/articles/?cat=...les&page=006
Но вот как он воздействует на добавление в сессию $_SERVER['QUERY_STRING'] я никак не могу понять, причем $_SERVER['SERVER_NAME'] в сессию добавляется без проблем (Добавление)
Я вот подумал, и нашел альтернативу методу, описанному выше, использовать в обработчике добавления коммента $_SERVER['HTTP_REFERER'], останется только из ссылки убрать http://mysite[dot]com/ и оставить только page_1 и записать её в базу, а после добавления коммента пользователя редиректом отправить на страницу, где он оставил коммент:
Покинул форум
Сообщений всего: 105
Дата рег-ции: Март 2012
Помог: 0 раз(а)
caballero пишет:
а как класс шаблонизации вообще связан с добавлением чего то в сессию? работа шаблонизатора - уже в конце когда данные собраны разложены и обработаны
Попробовал выключить шаблонизацию, в сессию $_SERVER['QUERY_STRING'] записался, опять включил класс - в сессии пустая переменная, я и сам удивлен (Добавление)
Уже второй день голову ломаю по этому поводу
caballero
Отправлено: 06 Мая, 2013 - 21:15:49
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
а может наоборот - шаблонизатор вытирает это из сессии? впрочем смысла все равно не вижу зачем писать это в сессию. с текущей страницы либо идет переход на эту же страницу либо на другую - в обоих случаях запоминать текущий URL в сесси непонятно зачем (Добавление)
и зачем ты пишешь URL в бд если его можно формировать на лету
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Действительно странный шаблонизатор.
И да, я не согласен с тем что урлу надо писать в сессию.
Сделай хидден-поле с айдишником документа (или урлой, дело твое) - пусть пишут куда хотят, какя тебе разница?
Всеравно модерировать будешь.
Покинул форум
Сообщений всего: 105
Дата рег-ции: Март 2012
Помог: 0 раз(а)
caballero пишет:
а может наоборот - шаблонизатор вытирает это из сессии? впрочем смысла все равно не вижу зачем писать это в сессию. с текущей страницы либо идет переход на эту же страницу либо на другую - в обоих случаях запоминать текущий URL в сесси непонятно зачем (Добавление)
и зачем ты пишешь URL в бд если его можно формировать на лету
У меня в проекте не урл формируется на лету, а страница формируется на лету, согласно урл.
В базе хранятся урл, и содержимое контента, прикрученное к каждому урл
У каждого человека разный ход мыслей, кому-то удобно так, кому-то по другому, программирование - это вольный ход мыслей, я начал изучать его не по шаблону, а практически изучая это. Вот, поставил цель (сделать сайт) и двигаюсь к ней, уже больше половины сделал.
Что-то брал уже готовое, вот например http://www.php.su/articles/?cat=...les&page=006 и то, про что рассказывается в этой статье, комбинируя это + свои наработки, получается интересная структура, которая работает четко, слаженно, только везде есть свои нюансы, с которыми приходится сталкиваться (Добавление) DeepVarvar, в принципе, вы правы. Но я уже сделал так:
Очень рад, всё работает)) Огромное всем спасибо, скоро отправлю ссылочку на проект))
caballero
Отправлено: 06 Мая, 2013 - 21:49:20
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
В базе хранятся урл, и содержимое контента, прикрученное к каждому урл
а зачем прикручивать его в БД если можно прикрутить после появления запроса от пользователя. Ведь алгоритм тот же - сопоставление данных урлу.
а если к урлу какой параметр надо приписать (например язык или таймстамп или еще какую служебную инфу)- тогда все урлы с БД станут нерабочими - хотя на самом деле нужно не использовать этот параметр при формировании страницы.
Покинул форум
Сообщений всего: 105
Дата рег-ции: Март 2012
Помог: 0 раз(а)
Это был последний штрих в разработке комментов (Добавление)
caballero пишет:
Цитата:
В базе хранятся урл, и содержимое контента, прикрученное к каждому урл
а зачем прикручивать его в БД если можно прикрутить после появления запроса от пользователя. Ведь алгоритм тот же - сопоставление данных урлу.
а если к урлу какой параметр надо приписать (например язык или таймстамп или еще какую служебную инфу)- тогда все урлы с БД станут нерабочими - хотя на самом деле нужно не использовать этот параметр при формировании страницы.
Я имею ввиду то, что урл и контент находятся в одной строке таблицы базы данных, если пользователь зашел на чпу урл, например about_me, contacts, site-map и т.д., то на страницу выводится вся инфа, связанная с этим урлом (Добавление)
caballero пишет:
Цитата:
В базе хранятся урл, и содержимое контента, прикрученное к каждому урл
а зачем прикручивать его в БД если можно прикрутить после появления запроса от пользователя. Ведь алгоритм тот же - сопоставление данных урлу.
а если к урлу какой параметр надо приписать (например язык или таймстамп или еще какую служебную инфу)- тогда все урлы с БД станут нерабочими - хотя на самом деле нужно не использовать этот параметр при формировании страницы.
Урлу никакие параметры прикручивать не надо, это ведь ЧПУ, т.е. текст, какие вы параметры прикрутите к тексту? (Добавление)
Кстати, я не использую вложенные чпу типа mysite.com/countries/russia/ufa и не вижу необходимости в этом, лучше это отдельно разбить на простые чпу,
типа
mysite.com/countries
mysite.com/russia
mysite.com/ufa
Для простого пользователя это лучше запомнится и волокиты для программиста меньше.
Кстати, вот код из этой статьи, и как я им пользуюсь
Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009
Помог: 0 раз(а)
DeepVarvar пишет:
Раз уж решил отписаться - отпишусь.
Как и обещал - простыми словами.
В связи с тем что на форуме участились вопросы по теме ЧПУ, раскрою немного эту тему.
Начнем с того, что же это такое, но с небольшим отступлением.
1. IPv4
Были времена, когда не было доменных имен.
И все сетевые ресурсы были доступны только по прямому обращению по уникальному IP-адресу.
Но ресурсов становилось все больше и больше.
Такое кол-во IP-адресов было трудно запомнить, неудобно хранить..
И люди придумали доменные имена.
Появились DNS-сервера, хранящие данные к какому IP-адресу относится доменное имя.
DNS-сервис можно сравнить с записной книжкой телефона.
Имя - номер..
Имя - номер..
Имя - номер..
Имя - номер..
Не зачем запоминать IP-адрес. Достаточно запомнить доменное имя.
Это ведь ЧЕЛОВЕЧНО
2. ЧПУ
Ссылки динамических сайтов изначально выглядели примерно так:
Но это был только первый шаг. Ведь вроде бы для пользователя все красиво и понятно.
А как же программист? Сидеть и раскапывать сотни строчек в файле .htaccess?
Ну уж нет! Увольте! Программисту тоже нужна свобода и удобстно!
3. Единая точка входа
Вот тут и начинается рассказ об удобстве для программиста.
Итак, мы хотим прозрачно и понятно для себя самих получать данные из строки запроса и легко их обрабатывать.
Так поехали. Расскажу только один принцип для примера. Самый простой и понятный.
Мы просто ВООБЩЕ ВСЕ что к нам приходит перенаправим в один единственный файл:
4. Заключение
Когда у вас есть массив параматров,
вы можете использовать его как параметры функций или методов классов.
Например для последнего запроса можно поступить так: http://site[dot]ru/registration/2/
Берем первый параметр $params[0] (там "registration")
И подключаем файл содержащий код для регистрации.
А сам файл может содержать все что вам надо исключительно для работы с регистрацией пользователей.
Кстати самый смысл в том, что он ведь может обработать и $params[1], скорее даже должен.
Ведь именно для него мы передаем второй параметр.
P.S.
Ну вот на самом деле даже наверное все..
Сильно не бейте - я вообще впервые взял в руки "виртуальное перо".
А вдруг получится написать нормально?
а почему тогда не происходит перенаправление если ввожу в адресной строке путь к существующему файлу, так и должно быть?
ввожу www[dot]example[dot]org/module/article/index.php и этот скрипт выполняется
а за статью, спасибо, очень ценно!
DeepVarvar
Отправлено: 11 Мая, 2013 - 15:58:15
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
sc2r2bey пишет:
а почему тогда не происходит перенаправление если ввожу в адресной строке путь к существующему файлу, так и должно быть?
Потому, что именно так и написано в .htaccess:
Цитата:
Если файла или папки нет, передать строку запроса в index.php лежащий в корне сайта, пусть сам разбирает эту строку.
Соответственно при наличии "живого" файла, он пойдет до файла.
К тому же - НИКАКОГО ПЕРЕНАПРАВЛЕНИЯ НЕТ, есть только то, что .htaccess (конечно же не сам файл, а сервер apache его выполняющий) не найдя файла по указанному пути, передаст строку, которую запрашивали у него, внутрь файла index.php
Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009
Помог: 0 раз(а)
спасибо! т.е. если мне нужно, чтоб эти файлы не обрабатывались, мне надо в них запретить прямой доступ или например 404 ошибку выводить
Runet4ik
Отправлено: 16 Июня, 2013 - 15:02:47
Гость
Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011 Откуда: Россия
Помог: 0 раз(а)
Может не углядел интересуещее в этом топе про чпу, но хотелось бы узнать как подружить .htaccess с кириллицей?
Имееются такой url:
site.ru/company/Компания и компания/
Правило в .htaccess такое:
RewriteRule ^company/([a-zA-Zа-яА-ЯёЁ0-9\-\s]*)/?$ index.php?company=$1 [L]
но только вот для кириллицы оно не работает, для латиницы же всё отлично..
LIME
Отправлено: 16 Июня, 2013 - 15:10:42
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Runet4ik кирилицы в url быть не может
только ASCII
то что ты видишь в адресной строке это браузер тебе переводит
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.