За последние 24 часа нас посетили 15430 программистов и 1639 роботов. Сейчас ищут 882 программиста ...

Как встроить в меню дополнительный вывод строки?

Тема в разделе "PHP для новичков", создана пользователем melihovgv, 23 июл 2012.

  1. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    - вот такие как раз и не хочу делать....
    Покажите на примере как из этого меню вынимать нормальный урл из БД. все чпу записываются в "chpu"
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    А вы не записывайте их такими, не понятными.
    А сразу записывайте ЧеловекоПонятные.


    Способов можно придумать много.

    Но писать вам придется их в ручную (хотя все равно если развернуть можно сделать и автоматически, но это если все связать иначе никак).

    То есть с ?id=1&chpu=contacts в реврайте она допустим вида /contacts.html.

    Соответственно и в базу и в сылку нужно писать /contacts.html.

    Но ссылки будут доступны обе.

    ?id=1&chpu=contacts,
    /contacts.html.

    Если хотите сделать, чтобы ?id=1&chpu=contacts не была как бы доступна, придется писать обработчик, который будет за этим следить, когда наберут в адресе эту ссылку она станет вида /contacts.html.

    Уже была такая тема где об этом говорил, ищите.
     
  3. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Там говорится только о чпу или еще обсуждается меню?
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Да, что вы вцепились в это меню?

    Если хотите автоматизировать это.
    Делайте как говорят.
    Перечитайте все еще разочек и все поймете.
     
  5. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Опять на корню запутался...Сейчас буду перечитывать.
     
  6. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Вы видимо думаете, что подменив в реврайте ?id=1&chpu=contacts на /contacts.html у вас после перехода ?id=1&chpu=contacts само что-ли должно меняться? Нет не поменяется оно само.

    Обе ссылки будут доступны...

    Иначе пишите свой обработчик.
     
  7. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Так нужно делать, чтобы php формировал ЧПУ ???
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
     
  9. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    В htaccess

    Options +FollowSymlinks
    RewriteEngine On
    RewriteRule ^(\d+)$ /index.php?id=$1 [F]

    Ссылка доступна по site.ru/1 и site.ru/index.php?id=1
    Как второй вариант можно закрыть ??Или лучше поставить редирект 301 ??

    Добавлено спустя 8 минут 6 секунд:
    Название страницы берется из строки chpu mysql - туда она попадает при создании страницы.
     
  10. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Теперь выводится ссылка такого вида index.php?id=1chpu=cena
    foreach($arr as $row){
    if($row['parent']==$parent){
    $sel=($row['id']==$id or $row['chpu']==$chpu)?' ':'';
    $level++;
    $out.=sprintf('%s<li%s><a href="index.php?id=%d&chpu=%s"%s><span class="l"></span><span class="r"></span><span class="t">%s</span></a>',
    str_repeat("\t",$level),$sel,$row['id'],$row['chpu'],$sel,$row['namemenu']);
    $inner='';
    $level++;
    menu($arr,$inner,$row['id'],$level);

    ------------------------------------------------------------
    В htaccess вот такое выражение

    Options +FollowSymlinks
    RewriteEngine On
    RewriteRule ^/([a-zA-Z0-9])$?.html /index.php?id=$1&chpu=$2

    Выдается ошибка 500

    Где ошибка???
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    500ая ошибка значит что веб сервер не дождался ответа от пхп. Почему - хз.
     
  12. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    а где тут $2?
     
  13. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Чтобы была ссылка вида site.ru/cena.html

    Добавлено спустя 31 секунду:
    Мне наоборот $2 нужна
     
  14. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    так там и нет второго параметра, ему неоткуда взятся, вот сервер и ругается
     
  15. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Как оставить $2 параметр - а как убрать $1 параметр или пропустить...
    Я так понимаю нужно указать начало ^ - вопрос от чего указывать???
     
  16. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Если набрать в браузере http://mysite.ru/1/index.html , то все работает.
    Но это в ручную набираю
     
  17. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Регуляркой вытягиваю теперь chpu
    RewriteRule ([a-zA-Z0-9]*)\.html$ index.php?id=$1&chpu=$2

    Вопрос, как формировать меню исходя из чпу??7

    Добавлено спустя 7 минут 30 секунд:
    У меня формируется ссылка index.php?id=$1chpu=$2 - а нужно $2.
    Готова регулярка
    preg_match_all("/u=([^>])*/", $out, $matches);
    for ($i=0; $i< count($matches[0]); $i++) {
    echo $matches[0][$i];}

    Но не пойму как влезть с ней в переменную $out menu($structArr,$out,0);
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    У вас такая каша в голове, что всем лень по десятому разу объяснять. Обещайте, что на выходных отдохнёте, и не будете об этом думать.
     
  19. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Что - то прям изврат какой - то...