За последние 24 часа нас посетили 52026 программистов и 1717 роботов. Сейчас ищут 832 программиста ...

Как обновить ссылку чпу после смены id новости в адресной строке ?

Тема в разделе "PHP для новичков", создана пользователем Khaybulla, 14 дек 2016.

Метки:
  1. Khaybulla

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

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    Например:
    Ссылка новости - http://php.ru/news/php-dlja-novichkov/16/
    Теперь меняю id в адресной строке - http://php.ru/news/php-dlja-novichkov/12/ обновляется страница выходит нужная новость но в адресной строке выводимый заголовок не меняется.

    Нужно когда меняю id что бы обновлялся и заголовок в адресной строке.
    Например:
    Ссылка новости - http://php.ru/news/php-dlja-novichkov/16/
    Когда поменял id должно быть так - http://php.ru/news/php-dlja-profi/12/


    Код (Text):
    1. RewriteCond %{ENV:REDIRECT_STATUS} ^$
    2. RewriteRule ^news/([^/\.]+)/([^/\.]+)?/$ read-news.php/?news&name=$1&post=$2 [L]
    3. RewriteCond %{QUERY_STRING} name=([^/\.]+)&post=([^/\.]+)$
    4. RewriteRule ^read-news\.php$ news/%1/%2/? [R=301,L]
    PHP:
    1. function translit($text) {
    2.        $translit = array(
    3.            "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g",
    4.            "Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i",
    5.            "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
    6.            "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
    7.            "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
    8.            "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
    9.            "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
    10.            "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
    11.            "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
    12.            "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
    13.            "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
    14.            "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
    15.            "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
    16.            "A"=>"a","B"=>"b","C"=>"c","D"=>"d","E"=>"e",
    17.            "F"=>"f","G"=>"g","H"=>"h","I"=>"i","J"=>"j",
    18.            "K"=>"k","L"=>"l","M"=>"m","N"=>"n","O"=>"o",
    19.            "P"=>"p","Q"=>"q","R"=>"r","S"=>"s","T"=>"t",
    20.            "U"=>"u","V"=>"v","W"=>"w","X"=>"x","Y"=>"y",
    21.            "Z"=>"z"," "=>"-","«"=>"-","»"=>"-","`"=>"-",
    22.            "!"=>"-","@"=>"-","#"=>"-","№"=>"-","$"=>"-",
    23.            "%"=>"-","^"=>"-","&"=>"-","*"=>"-","("=>"-",
    24.            ")"=>"-","_"=>"-","="=>"-","+"=>"-",","=>"-",
    25.            "."=>"-",","=>"-",","=>"-","|"=>"-",":"=>"-",
    26.            ";"=>"-"
    27.        );
    28.        return strtr($text,$translit);
    29.     }
    HTML:
    1. <a href="/news/<?=translit($news['title']) ?>/<?=$news['id'] ?>/"></a>
     
  2. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    А что это за заголовок в адресной строке? Метатег title что ли ?
     
  3. Khaybulla

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

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    Это заголовок новости...

    Вот как тут заголовок
    Screenshot_2.png

    И в url заголовок и в конце id

    Screenshot_3.png
    --- Добавлено ---
    Может вообще я не тем путем пошел объясните как вообще подобное можно реализовать ?
     
  4. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    если все меняется, а заголовок нет, логично предположить, что вы его жестко прописали в коде, например, $h1 = 'Моя новость'; покажите строку, которая выводит заголовок
     
  5. Khaybulla

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

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    А на самой то странице меняется заголовок после обновления страницы а в адресной строке нет...

    Вот код выводящий заголовок:

    PHP:
    1. $check = mysql_query("SELECT * FROM news WHERE id='$id_news'");
    2.  
    3. $news = mysql_fetch_assoc($check);
    HTML:
    1. <h2><?php echo $news["title"] ?></h2>
     
  6. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    Где, то что то в коде упускаете, проверяйте, так же все правильно выводится:
    test.php
    <?
    $check = mysql_query("SELECT * FROM news WHERE id='.intval($_GET['post']);
    $news = mysql_fetch_array($check);
    $body = $news['title'];
    $body .= '<br>' . $news['description']; //описание
    echo $body;
     
  7. Khaybulla

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

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2
    Вы видимо не совсем меня поняли и сейчас все нормально выводится только в адресной строке чпу не меняется после смены id а страница обновляется и выводит содержимое данного id отправлял же пример...

    Вот смотрите фото
    Screenshot_4.png Screenshot_2.png Screenshot_3.png Screenshot_5.png
     
  8. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    В адресной строке отображается только url, заголовок там не отображается. Если я вас правильно понял, вам нужен контроль за чпу, сверяйте $_GET['name'] c translit($news['title']), если не совпадает, то редирект на правильный url, типа if( $_GET['name'] != translit($news['title'])) header("location: правильный урл");

    Имхо: чпу - бесполезно, хотите красивые снипеты в выдаче пс - используйте хлебные крошки
     
    Khaybulla нравится это.
  9. Khaybulla

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

    С нами с:
    4 мар 2016
    Сообщения:
    89
    Симпатии:
    2

    Спасибо! вроде ща работает как надо.

    PHP:
    1. if($_GET['name'] !== translit($news['title'])) {
    2.         header('Location: http://test.ru/news/'.translit($news[title]).'/'.$id_news.'/');
    3.     }