переписать? id = __ в заголовок страницы, хранящийся в строке базы данных - PullRequest
1 голос
/ 17 октября 2011

Заранее благодарен за любую помощь.

Я пытаюсь выяснить, как переписать динамические URL-адреса, созданные с помощью простого программирования на CMS, которое я создаю.Код выводит URL с идентификатором (www.mysite.com/index.php?id=1).Я хотел бы изменить код так, чтобы он выводил заголовок строки в БД с идентификатором 1, например, www.mysite.com/home или www.mysite.com/about, где about это заголовок, сохраненный в строкеБД с идентификатором 1.

Вот пример того, как код выводит:

$result = mysql_query("SELECT id, title FROM pages");

while ($row = mysql_fetch_array($result)) {
    // Do not list the home page twice
    if ($row['id'] != $homeID) {
        $pageID = $row['id'];
        $pageTitle = $row['title'];

        echo "<li><a href='" . BASE_URL . "/index.php?id=$pageID'>$pageTitle</a></li>";
    }

Я ухожу из учебника CMS из: http://fwebde.com/web-design/creating-a-php-cms-part-1/

Любая помощь будет принята с благодарностью.Я попытался много раз переписать .htaccess, и ни один из них не сработал.Пожалуйста, дайте мне знать, если это так просто, как переключение кода MySQL.

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Вам нужно будет изменить строку, которая генерирует ссылки, затем:

echo "<li><a href='" . BASE_URL . "/index.php?id=$pageID'>$pageTitle</a></li>";

Вы можете добавить заголовок как отдельный и неиспользуемый параметр &title=, что является хорошим взломом, чтобы избежать необходимости изменятьчто-нибудь еще:

echo "<li><a href='" . BASE_URL . "/index.php?id=$pageID&title=$pageTitle'>$pageTitle</a></li>";

Или сгенерировать 123+title ссылки:

echo "<li><a href='" . BASE_URL . "/index.php?id=$pageID+$pageTitle'>$pageTitle</a></li>";

Для этого потребуется адаптировать фактический код диспетчера "cms", потому что он должен разбить идентификатор изаголовок из параметра $ _GET.

Или даже заменить весь index.php?id= только заголовком:

echo "<li><a href='" . BASE_URL . "/$pageTitle'>$pageTitle</a></li>";

, что, в свою очередь, потребует развертывания правила .htaccess (что-токак htaccess URL-маршрутизация для PHP MVC? ).И вам придется снова изменить скрипт index.php, чтобы найти id из title.Это опять-таки будет работать только в том случае, если все заголовки в вашей базе данных будут уникальными.

PS: На самом деле вы также должны использовать urlencode($pageTitle)htmlspecialchars() на $pageTitle, который становится текстом ссылки.

0 голосов
/ 17 октября 2011

Это будет не так просто, как хотелось бы. Самый простой способ - включить номер страницы в ваш окончательный URL. http://www.mysite.com/1/articles но я не знаю, будет ли это именно то, что вы ищете.

Правило перезаписи будет следующим:

RewriteRule ^([0-9]*)/.*$ index.php?id=$1

В моих собственных системах CMS я добавил еще одно поле к таблице страниц под названием urlname. Это будет URL-адрес для доступа к этой странице. Вам нужно изменить все ссылки на $ _GET ['id'].

Добавьте это к functions.php.

function thisPageId(){
    $sql="SELECT id FROM pages WHERE urlname = '" . $_GET['urlname'] ."'";
    $result=mysql_query($sql);
    $row=mysql_fetch_assoc($result);
    return $row['id'];
}

Правило перезаписи htaccess

Это перенаправит любой несуществующий запрос на index.php? Urlname = ...

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule (.*) index.php?urlname=$1

Замените все ссылки на $ _GET ['id'] значением из этогоPageId. Для вашей функции listPages и в любом другом месте, где отображается URL, вы будете делать что-то вроде этого.

echo "<li><a href='" . BASE_URL . "/" . $row['urlname'] . "'>$pageTitle</a></li>";
* 1024.
...