网站的每个部分似乎都需要是动态的。动态的、数据库驱动的页面、动态的 JavaScript、动态的 CSS 等。所有这些动态性都使得难以轻松地设计页面样式或编写脚本。我学会了克服使用 CMS 的僵化的一种方法是为 BODY 元素提供一个基于 URL 的唯一 ID。这样做可以让我向任何页面添加特殊样式。
PHP
function generate_id($uri) { /* regular expressions */ $regex1 = '/[^a-zA-Z0-9]/'; //remove anything but letters and numbers $regex2 = '/[\-]+/'; //remove multiple "-"'s in a row $regex3 = '/^[-]+/'; //remove starting "-" $regex4 = '/[-]+$/'; //remove ending "-" /* return... */ return preg_replace( array($regex1,$regex2,$regex3,$regex4), array('-','-','',''), $_SERVER['REQUEST_URI'] ); } /* do it! */ $body_id = generate_id($_SERVER['REQUEST_URI']);
上面的代码使用 preg_replace 来查找“坏”或重复的字符,并将它们替换为破折号或什么都不替换。我并不自称是正则表达式天才,因此可能有更好的方法来构造 preg_replace 正则表达式参数。让我们看一些示例用法:
//assuming the page URI is: /some-directory/deeper/my-page $body_id = generate_id($_SERVER['REQUEST_URI']); //returns: some-directory-deeper-my-page echo '<body id="',$body_id,'">';
上面使用页面 URI 构建主体 ID,将“页面名称”与其目录连接起来。
//assuming the page URI is: /some-directory/deeper/my-page?category=mootools $body_id = generate_id($_SERVER['REQUEST_URI']); //returns: some-directory-deeper-my-page-category-mootools echo '<body id="',$body_id,'">';
上面使用了页面URI,包括GET参数。
//assuming the page URI is: /some-directory/deeper/my-page.php?category=mootools $body_id = generate_id($_SERVER['REQUEST_URI']); //returns: some-directory-deeper-my-page-php-category-mootools echo '<body id="',$body_id,'">';
上面显示了一个非搜索引擎友好的 URL 是如何被解析的。如果您愿意,可以从 URI 中删除“.php”文件扩展名。
使用 CSS
body#my-dir-my-page { /* custom formatting for this page */ }
以上内容向您展示了如何在给定页面的特殊 CSS 方面利用新 ID。
几点思考
- 我选择使用 ID 属性——您可以轻松地将其改为 CSS 类。由于这个生成的字符串应该是唯一的(至少理论上如此),我更喜欢 ID。
- 如果您不使用 SEF 链接,我建议删除文件扩展名——如果不仅仅是为了清洁。
- 如果查询字符串参数与该页面相关/唯一,则保留它们。您可能希望将页面设为 ID 并添加一类查询字符串参数:
//assuming the page URI is: /some-directory/deeper/my-page?category=mootools list($id,$class) = explode('?',$_SERVER['REQUEST_URI']); echo '<body id="',$id,'" class="',$class,'">'; //returns: <body id="some-directory-deeper-my-page" class="category-mootools">
li>
你有什么想法?你会做这样的事吗?