我一直在组建一个数据库来处理为网站制作的内容,但是,考虑到长期,我不确定我是否拥有最好的系统。
目前我正在使用路由方法通过index.php
传递所有内容.htaccess
路由如下index.php?route=example/url
(用户看到http://www.domain.com/example/url
)
目前,数据库的设置如下:
uid | title | content | category
--------------------------------------------------
/ | Home | aaa | 1
/example | Example | bbb | 2
/example/url | Example: URL | ccc | 2
虽然我不确定这是否是最佳方法,特别是如果我想将example
重命名为something
- 我必须重命名每个网址...
所以我也考虑过嵌套集方法(例如http://www.phpclasses.org/package/2547-PHP-Manipulate-database-records-in-hierarchical-trees.html),虽然这只会在数据库中显示许多不同的数字,我可以通过它的节点访问所有内容。以下示例;
node | left | right | name
--------------------------
1 | 1 | 6 | Home
2 | 2 | 5 | Example
3 | 3 | 4 | URL
然后我可以将节点用作uid?但我不确定如何将http://www.domain.com/example/url
翻译成uid
等于3 ...
我目前在数据库中已经有了一个类别列,对内容进行分类,但我可能会对此进行更改。
我基本上都在寻找有关如何继续进行的建议,因为随着网站内容越来越多,更改设置将更加困难 - 所以我希望从第一天起就能做到这一点。
我可以以某种方式将两者结合起来,以便原始数据库将uid存储为节点号,然后进行某种连接以使uid成为url(如1) - 然后]
^我想我更喜欢这个(第三个),但不确定如何在MySQL中完全做到,还有其他一些好处:
如果有人能提供一些帮助/建议 - 我将不胜感激!
答案 0 :(得分:1)
好吧,如果您使用index.php?route=example/url
,您可以随时执行以下操作:
$args = explode( '/', $_GET['route'] );
$args = filter_var_array( $_GET['route'], FILTER_SANITIZE_STRING );
那么$ args的值将是:
0 -> example
1 -> url
等。然后,您可以使用这些值来确定要加载的模板,从数据库中获取的内容,或者您已经在做的其他内容。
HTH。
答案 1 :(得分:0)
嵌套集模型在这里可能是一个不错的选择。这导致像(id,left,right
这样的表布局是嵌套集模型所需的字段,其他包含相应的内容):
| id | left | right | uid | title | content | category |
可以找到有关如何执行特定查询的更多详细信息here。
但是我不会在数据库上执行查找,而是执行简单的数组缓存:
new array('/' => array('content' => 'aaa', 'category' => 'bbbb'),
'/example/' => array(),
.....
);
这个缓存可以非常容易地构建(虽然价格昂贵)并且很容易查询。
旁注:我怀疑你在这里试图模拟页面内容。也许你应该重构数据库结构,因为这个表有两个职责(url->内容映射和内容)。