我目前无法理解当将视图显示为块时Drupal的视图如何处理参数。我有几个简单的页面(例如工作室/不稳定)和一些匹配这些页面的用户(例如用户名:bremen)。用户可以发布需要在工作室/ *页面上播放的新闻。
我是否必须使用Argument Handler将arg(1)
中的node_id转换为相应的用户名,或者是否有更简单的方法?
我希望我能解释一下我的问题,这样你才能理解......对于我来说,整个观点的争论对我来说有点奇怪。
答案 0 :(得分:1)
arg(1)不会是用户名或UID,也不会按预期方式工作。我们可以尝试的是进行查找并返回以环形方式提供默认参数值。
如果论坛不存在则采取行动:设置为空文本,或者404,无论您的偏好如何。
为Validator提供PHP代码:
if ($argument) {
$user = db_fetch_object(db_query('SELECT name FROM {users} WHERE name = "%s"', $argument));
if ($user) {
$handler->argument = $user->name;
return $user->name;
}
}
您想要确定的部分是,作为某些页面上的用户名的arg(1)将不包含(或允许)通过的字符,从而导致SQL注入。
可以使用Pathauto控制用户名模式。这不会阻止某人将垃圾输入到URL中,Drupal / Views应该能够回避URL中的字符。您可以通过设置采取行动,如果论坛没有确认来显示404页面或空文本来测试。
尝试这一点并使用视图的预览部分,看看它是否为您返回任何内容。我做到了这一点,但我总是使用不同类型的内容或搜索来做类似的事情。
您还可以尝试将Validator设置为User,并允许同时使用数字UID和字符串用户名。我没有使用过这种设置,但它很可能也会起作用。