以下是url的一些示例
0 | 1 | 2
-----------------------------
.com / en / page=x / product
.com / en / category / product
.com / en / category / page=x
.com / en / category / subcategory
基于特定/
之后的单词(-s),我决定从mysql中获取什么。例如,如果我看到product
我连接到products
表并获取一个product. If I see
子类别, I connect to
产品table and fetch all products where in
子类别column is name of
子类别`。
我需要决定,例如,在第三个尾部斜杠之后(product,page = x或子类别)。
现在我首先删除上一个/
$url_slashes = rtrim( (ltrim($_SERVER['QUERY_STRING'],'/')) ,'/');
然后创建数组
$array_url_slashes = explode( "/", $url_slashes );
然后像这样
if ( strpos( $array_url_slashes[2] ,'page=') !== false ) {
然后它是page
,依此类推。
如果我限制子类别(或数组元素)的最大数量,则此方法有效。
但是无限子类别的解决方案是什么。我不需要那么多代码,但需要知道这一切是如何工作的。
这只是例如.com/en/c=category/s1=subcategory/s2=next-subcategory
搜索后谷歌找到了这个http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ 看来,有一个好主意。
例如url:
.com/en/electronics/portable-electronics/mp3-players/flash
我需要为url的每个元素获取Title,Description,url(例如,创建面包屑)
所有类别和子类别都位于一个mysql表中
1)从网址$url_slashes = rtrim( (ltrim($_SERVER['QUERY_STRING'],'/')) ,'/');
2)创建数组$array_url_slashes = explode( "/", $url_slashes );
3)检测最后一个元素的数量(最后/
)$num_arr_trail_slash = count($array_url_slashes);
4)像这样的mysql查询
SELECT
t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4,
t1.url AS url1, t2.url as url2, t3.url as url3, t4.url as url4
FROM CategoryForTest AS t1
LEFT JOIN CategoryForTest AS t2 ON t2.parent = t1.category_id
LEFT JOIN CategoryForTest AS t3 ON t3.parent = t2.category_id
LEFT JOIN CategoryForTest AS t4 ON t4.parent = t3.category_id
WHERE t4.name = ?;
? is 'FLASH'
或$array_url_slashes[$num_arr_trail_slash-1]
获得这样的php数组
Array
(
[0] => Array
(
[lev1] => ELECTRONICS
[lev2] => PORTABLE ELECTRONICS
[lev3] => MP3 PLAYERS
[lev4] => FLASH
[url1] => url-electronics
[url2] => url-portable-electronics
[url3] => url-mp3-players
[url4] => url-flash
)
)
答案 0 :(得分:1)
如果您有一个htaccess,可以像这样重写您的网址:
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&lang=$2&action=$3 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&lang=$2 [L]
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L]
通过重写您的网址,这意味着您始终可以像定义它们一样调用参数。在这个例子中,我总是查看index.php,下一个参数是$ page,下一个是$ lang然后我定义了我的$ action。
所以网址示例:www.yoururl.com/products/en/product。
那么使用这个htaccess可以做什么,你可以调用url变量,如:
$_REQUEST['page'] == 'products'
$_REQUEST['lang'] == 'en'
$_REQUEST['action'] == 'product'
因此,根据页面名称,您知道必须向用户显示内容或提交内容,并根据操作,您知道要显示/调用的内容..
你可以这样做:
if(isset($_REQUEST['action']){
switch($_REQUEST['action']{
case 'product':
//DO STUFF
break;
}
}
这是基本的想法..这就是你想要的吗?