开发者

Views, Arguments and Blocks

I currently having trouble to get my head around how Drupal's views work with arguments when displaying a view as a block. I have a few simple pages (eg studios/bremen) and a few use开发者_Python百科rs that match those pages (eg username: bremen). Users can post news which need to be teasered on the studios/* page.

Do I have to use an Argument Handler that translates the node_id in arg(1) to the corresponding username, or is there an easier way?

I hope i could explain my problem so you can understand… this whole view argument thing feels kinda weird to me.


arg(1) won't be a username or UID and not work the way you expect. What we can try though is to do a lookup and return to provide the default argument value in a roundabout way.

ACTION TO TAKE IF ARGUMENT IS NOT PRESENT: set to Empty text, or, 404, whatever your preference.

Provide PHP code for the Validator:

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;
   }
}

The part you want to make sure about here is that arg(1) being a username on certain pages will not contain (or allow) characters to pass through causing a SQL injection.

Username patterns can be controlled with Pathauto. This won't stop someone from entering junk into the URL though, and Drupal/Views should be able to sidestep characters in the URL. You can test that by setting ACTION TO TAKE IF ARGUMENT DOES NOT VALIDATE to display a 404 page, or, empty text.

Try this out and use the preview part of Views and see if it returns anything for you. I did this off the top of my head, but I do similar things all the time with different types of content or searches.

You can also try setting the Validator to User, and Allow both numeric UIDs and string usernames. I haven't used that setting, but it most likely will work as well.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜