我遇到了从使用短划线分隔slug的页面获取内容的问题。例如,如果我转到www.example.com/home
它可以正常工作,但如果我去www.example.com/about-us
它会得到一个错误Trying to get property of non-object
,因为错误说的是关于这一行;
<h1><?php echo $page->Title; ?></h1>
<?php echo $page->Content; ?>
我有一个函数可以从数据库中看到这样的slug;
function getSlug($name = null) {
global $db;
if ($name) {
$query = $db->prepare('SELECT * FROM pages WHERE `Title` = ? LIMIT 1');
$query->execute(array($name));
return $query->fetchObject();
}
}
我还有一个创建看起来像这样的slug的函数;
function createSlug($string){
$string = preg_replace( '/[«»""!?,.!@£$%^&*{};:()]+/', '', $string );
$string = strtolower($string);
$slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string);
return $slug;
}
在我的htaccess中我有规则RewriteRule ^([a-zA-Z0-9-/]+)$ index.php?name=$1 [L]
。
获取我使用以下代码的内容;
<?php
include 'header.php';
$slug = create_slug($_GET['name']);
$page = getSlug($slug);
?>
<div class="container">
<h1><?php echo $page->Title; ?></h1>
<?php echo $page->Content; ?>
<?php include 'footer.php'; ?>
我真的不知道问题是什么。任何帮助将不胜感激。
提前致谢。亲切的问候
答案 0 :(得分:0)
检查ModRewrite模块是否已启用,并且在.htaccess中检查以下行是否添加到顶部。
RewriteEngine On
答案 1 :(得分:0)
我通过在我的数据库中添加一行名为Slug来解决这个问题,我想如果我想让slug与标题不同,这也会更好。
感谢@ sk8terboi87的努力