За последние 24 часа нас посетили 18865 программистов и 1706 роботов. Сейчас ищут 893 программиста ...

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

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

  1. melihovgv

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

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Здравствуйте, уважаемые форумчане. Один из членов форума помог сделать следующее меню. Данное меню выдает ссылку следующего вида: site.ru/index.php?id=1 и т.д. Сделал транслит для чпу при добавлении страницы в БД. Чтобы вытягивать из строки site.ru/index.php?id=1 не хватает параметра вида: site.ru/index.php?id=1&chpu=index
    И после вытягивать через .htaccess и приведения к виду site.ru/index.html

    <?
    $id=(isset($_GET['id'])) ?(int)$_GET['id']:1;
    $out='';//тут будет меню
    function menu(&$arr,&$out,$parent=0,&$level=0){
    global $id;

    foreach($arr as $row){
    if($row['parent']==$parent){
    $sel=($row['id']==$id)?' ':'';
    $level++;
    $out.=sprintf('%s<li%s><a href="index.php?id=%d"%s><span class="l"></span><span class="r"></span><span class="t">%s</span></a>',
    str_repeat("\t",$level),$sel,$row['id'],$sel,$row['namemenu']);
    $inner='';
    $level++;
    menu($arr,$inner,$row['id'],$level);
    $level--;
    if(strlen($inner)>0){
    $out.=sprintf('%s%s<ul>%s%s%s</ul>%s%s',
    "\n",str_repeat("\t",$level+1),"\n",$inner,str_repeat("\t",$level+1),"\n",str_repeat("\t",$level));
    }
    $out.="</li>\n";
    $level--;
    }
    }
    }

    $mysqli=new mysqli('localhost','root','','mysite');//хост,логин,пароль,бд
    $result=$mysqli->query("SELECT id,parent,namemenu FROM content");
    $structArr=array();
    while($res=$result->fetch_assoc()){$structArr[]=$res;}
    $result->close();
    menu($structArr,$out,0);//генерируем меню в переменную $out
    unset($structArr);//массив больше не нужен
    ?>
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не понятно как работает и при чем тут ЧПУ, если ссылки такие сложные для Ч =)
     
  3. melihovgv

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

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Меню работает с БД)А чпу хочу формировать уже из БД,
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нипанятна. формируйте. в чем беда?
     
  5. melihovgv

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

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Как вставить параметр &chpu и другой в представленный выше код?
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    проще переписать, чем в этом ковыряться =)
    я тут вобще не вижу где ссылка делается.
    кроме как вот эта хренька
     
  7. melihovgv

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

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Вот тут делается ссылка...А как переписать?
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если переписать со спринтф на эхо, то наверное будет проще жить
    Код (Text):
    1. $out.=sprintf('%s<li%s><a href="index.php?id=%d"%s><span class="l"></span><span class="r"></span><span class="t">%s</span></a>',
    2.  str_repeat("\t",$level),$sel,$row['id'],$sel,$row['namemenu']);
     
  9. melihovgv

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

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Данное меню тоже будет рекурсивным?
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вернее даже без эхо, это же присваивание. зачем было так делать - не оч понятно.
    это одна строка. перепишите её подставив вместо %s переменные по-очереди.
    т.е.
    Код (PHP):
    1. $out .= str_repeat("\t",$level) . "<li{$sel}><a href='index.php?id={$row['id']}'{$sel}><span class='l'></span><span class="r"></span><span class="t">{$row['namemenu']}</span></a>"; 
     
  11. melihovgv

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

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Сейчас попробую)
     
  12. melihovgv

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

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Можете подсказать литературу, в которой хорошо описывается создание меню и подменю на php mysql ???
     
  13. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    Именно меню ищи в google статьи. =)
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    должно было ничего не измениться. если так - значит ок и можно начинать коверкать это дело и совать свои переменные внутре.
    каков результат?
     
  15. melihovgv

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

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Пока не добился нужных результатов)
     
  16. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а каких добился?
     
  17. melihovgv

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

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Пока ищу литературу...Для того чтобы вывести ссылку ../index.php?id=1&chpu=contacts
    Чтобы хтакцесс выташить ../contacts.html
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если ты её юзеру выведешь как /index.php?id=1&chpu=contacts, то она ТАК и покажется ему =)
     
  19. melihovgv

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

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Но через mod_rewrite - я могу ему выдать как contacts.html ???
     
  20. Your

    Your Старожил

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

    А вам, что надо?
     
  21. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
  22. melihovgv

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

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    И как еще быть??
     
  23. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вы перепутали причину и следствие. Человекам скармиливаются ЧеловекоЧитаемыеУрлы. А потом они переделываются (за каким-то хером) в уродливые с параметрами.

    Вы если не старый проект переделываете, то вы просто обратите внимание на $_SERVER['REQUEST_URI'] и функцию parse_url()
     
  24. melihovgv

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

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Мне не нужно переделывать в непонятный урл...А нужны человеко понятные урл.
     
  25. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    зачем же вы хотите сделать урл вида /index.php?id=1&chpu=contacts хер прочтёшь?

    =) делайте нормальный. откуда у вас название страницы берется?