Помогите сделать Альтернативную ссылку

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем Zloboff, 8 окт 2008.

Статус темы:
Закрыта.
  1. Zloboff

    Zloboff Прохожие

    Вот захотелось мне сделать ЧПУ, но не совсем обычное, тоесть хочу реализовать такую тему создание альтернативной ссылки.

    Тоесть в админке хочу создать форму в которую можно вбить дерикторию к примеру /preved/ и что бы в строке браузера отображалось как http://cms.ru/content/preved/ вместо http://cms.ru/content/?id=1

    В базе данных создал поле 'seolink' уже туда добавляются через мою админку ссылки типа 'index'

    P.S. подобная функция есть в CMF ModX

    P.S.S буду очень благодарен за помощь!
     
  2. zerdek

    zerdek

    Регистр.:
    29 ноя 2007
    Сообщения:
    346
    Симпатии:
    50
    ну и к форме сделай пару строк кода, чтобы брало из твоей формы "прэвэд" и запихивало в .htaccess или в самом index.php сделай обработку.
     
  3. Zloboff

    Zloboff Прохожие

    А можешь примерчик скинуть? как через индексный файл его запихнуть? Я только учу PHP, знаю уже как запросы делать и т.д. Но вот такое хз как делать, до меня пока не доходит, помогите пожалуйста!
     
  4. judgefog

    judgefog

    Регистр.:
    12 авг 2006
    Сообщения:
    487
    Симпатии:
    335
    $path=$_SERVER['REQUEST_URI']; // теперь у нас $path = /content/preved/

    доставай из строки нужную часть и делай запрос к базе с условием where seolink='tvoy_preved_zdes'
     
  5. Zloboff

    Zloboff Прохожие

    У меня не получилось реализовать! :( Что нужно вписать в index.php? Вот листинг файла...

    Код:
    <?php
    
    if(isset($_GET['id']))
    {
    	if(is_numeric($_GET['id']))
    	{
    		$id = $_GET['id'];
    		$sql = $db -> db_query("SELECT * FROM " . DB_PREFIX . "content WHERE id = '$id'");
    		$rows = $db -> db_rows();
    		$sql =  $db -> db_result();
    		$sql = $sql['0'];
    
    		if($rows > 0)
    		{
    			$contitle = stripslashes($sql['title']);
    			$context = stripslashes($sql['content']);
    			
    			$content = "
    			<h2>$contitle</h2>
    			$context<br />
    			";
    			
    			if(!empty($sql['keywords'])){ $keywords = $sql['keywords'];}
    			if(!empty($sql['description'])){ $description = $sql['description'];}
    			
    			$pagetitle = $pagetitle . ' | ' . stripslashes($sql['title']);
    			
    			$rss = 'rss.php';
    		}
    		else
    		{
    			$content = '<h2>' . CONTENT_013 . '</h2>' . CONTENT_014;
    		}
    	}
    	else
    	{
    		$content = '<h2>' . CONTENT_013 . '</h2>' . CONTENT_014;
    	}
    
    }
    else
    {
    	$sql = $db -> db_query("SELECT id FROM " . DB_PREFIX . "content 
    	WHERE front = 'yes' LIMIT 1");
    	$rows = $db -> db_rows();
    	$sql = $db -> db_result();
    	
    	if($rows > 0)
    	{
    		header('Location: /content/?id=' . $sql['0']['id']);
    	}
    	else
    	{
    		$content = '<h2>' . CONTENT_013 . '</h2>' . CONTENT_014;
    	}
    }
    
    ?>
    
     
  6. judgefog

    judgefog

    Регистр.:
    12 авг 2006
    Сообщения:
    487
    Симпатии:
    335
    .htaccess
    в index.php соотв. разбираем полученную строку чтобы в запрос к базе подставить вместо id твой seolink

    домашнее задание - освоить по мануалу функции explode и is_numeric,
    понять почему is_numeric надо будет убрать
     
  7. Zloboff

    Zloboff Прохожие

    Значит создал правило в файле .htaccess:

    Код:
    RewriteRule ^content/([a-z0-9_-]+)/ modules/content/index.php?id=$1 [L]
    
    Но вот с не могу правельно составить алгоритм. Может кто напишет работающий код?
     
  8. judgefog

    judgefog

    Регистр.:
    12 авг 2006
    Сообщения:
    487
    Симпатии:
    335
    проверяй
    Код:
    <?php
    
    if(isset($_GET['id']))
    {
    
            $id = $_GET['id'];
            $sql = $db -> db_query("SELECT * FROM " . DB_PREFIX . "content WHERE seolink = '".$id."'");
            $rows = $db -> db_rows();
            $sql =  $db -> db_result();
            $sql = $sql['0'];
    
            if($rows > 0)
            {
                $contitle = stripslashes($sql['title']);
                $context = stripslashes($sql['content']);
    
                $content = "
                <h2>$contitle</h2>
                $context<br />
                ";
    
                if(!empty($sql['keywords'])){ $keywords = $sql['keywords'];}
                if(!empty($sql['description'])){ $description = $sql['description'];}
    
                $pagetitle = $pagetitle . ' | ' . stripslashes($sql['title']);
    
                $rss = 'rss.php';
            }
            else
            {
                $content = '<h2>' . CONTENT_013 . '</h2>' . CONTENT_014;
            }
    
    
    }
    else
    {
        $sql = $db -> db_query("SELECT id FROM " . DB_PREFIX . "content
        WHERE front = 'yes' LIMIT 1");
        $rows = $db -> db_rows();
        $sql = $db -> db_result();
    
        if($rows > 0)
        {
            header('Location: /content/?id=' . $sql['0']['id']);
        }
        else
        {
            $content = '<h2>' . CONTENT_013 . '</h2>' . CONTENT_014;
        }
    }
    
    ?>
     
  9. Zloboff

    Zloboff Прохожие

    Спасибо, так то работает))) Но вот теперь ссылки ввиде ?id=1 и т.д. не отображаются :( Можно как-нибудь совместить?
     
  10. judgefog

    judgefog

    Регистр.:
    12 авг 2006
    Сообщения:
    487
    Симпатии:
    335
    сравнить было/стало ))
    я просто стер 2 строчки

    условие, передается ли в переменной цифра,
    как раз и было
     
Статус темы:
Закрыта.