извлечение статьи из mysql с помощью slug - PullRequest
1 голос
/ 10 марта 2010

Я пишу свой собственный раздел новостных статей на своем сайте и храню каждую статью в базе данных MySQL. Каждая статья имеет уникальный идентификатор, название, основную часть и, благодаря плагину jquery, свой собственный слаг-URL.

Однако я не уверен, как, черт возьми, я собираюсь получить статью, ссылаясь на слаг.

Как мне получить:

www.site.com/news/nice-looking-title/

работать как:

www.site.com/news/index.php?id=1

, чтобы я мог использовать SQL для извлечения записи из таблицы MySQL, например:

tbl_news:
news_id
news_title
news_slug
news_body
news_date

.htacccess участвует в этом?

Как всегда, все и любая помощь очень ценится! :)

Пол

Ответы [ 2 ]

0 голосов
/ 10 марта 2010

хорошо, вот что я должен был сделать, чтобы решить эту проблему. Немного взломан, но работает.

Наличие RewriteRule (. *) /News/index.php вызывает бесконечный цикл на сайте, также как и факт наличия страницы php в каталоге новостей. Поэтому мне пришлось отправить ссылки на другое имя каталога и переписать их в фактический каталог.

.htaccess

RewriteCond %{REQUEST_URI} /guild-news
RewriteRule guild-news/(.*)/ news/news-item.php?slug=$1
RewriteRule guild-news/(.*) news/news-item.php?slug=$1

PHP

$slug=$_GET['slug'];
$newsSQL = "SELECT *, DATE_FORMAT(news_date, '%W, %D %M, %Y') news_date_f FROM tbl_news WHERE news_slug = '".$slug."' AND news_visible=1";
$result = mysql_query($newsSQL, $conn) or die(mysql_error());

так что, вероятно, не самый лучший код когда-либо, но он отлично работает для моих нужд:)

0 голосов
/ 10 марта 2010

Вам нужно изменить SQL-запрос, чтобы он выбирался с помощью news_slug вместо news_id. Простое приложение может выглядеть следующим образом:

.htaccess

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/news #only do this for URLs beginning /news
RewriteRule (.*) /news/index.php [L] #redirect control to index.php

PHP

$slug = explode('/', $)SERVER['REQUEST_URI']); // turn the path into an array
$slug = $slug[2]; // get the 2nd part of the array (nice-looking-title)
$query = sprintf ("SELECT * FROM tbl_news WHERE news_slug = '%s'", $slug); // new SQL query

ПРИМЕЧАНИЕ: ЭТО НЕ БЫЛО ПРОВЕРЕНО, ТАКЖЕ МОЖЕТ ОШИБКИ!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...