Drupal:使用参数的动态视图

Posted

技术标签:

【中文标题】Drupal:使用参数的动态视图【英文标题】:Drupal: Dynamic View using Arguments 【发布时间】:2010-10-04 14:30:00 【问题描述】:

对于当前项目,我需要设置一个特定视图来显示画廊详细信息页面。它应该像这样工作:

1. User clicked a node (costum-post-type: gallery)
2. User received an overview page with linked images
3. User clicked an image
4. User received the gallery page (gallerific view)

步骤 1-3 已完成。但是如何让 Drupal 使用概览页面的数据构建详细页面?

例如:http://example.com/gallery-1/detailhttp://example.com/gallery-2/detail

/gallery-n 是带有链接图像的概览页面,detail/gallery-n 的详细页面。

希望你能明白我的意思?!

编辑

在概述页面上,我有一堆缩略图,每个都链接到详细信息库(jquery galleriffic)页面。

【问题讨论】:

我可能会回答这个问题,但如果您能更详细地了解您希望此详细视图执行的操作,将会很有帮助。我们是在传递他们点击的画廊节点 ID,还是他们点击的图片,还是哪个? 约翰菲亚拉谢谢!请在上面的原始帖子中查看我的更新。如果您还有任何问题,我很高兴听到。 好的 - 您是在设置图像节点以使一张图像映射到一个节点,还是在给定节点上有多个图像? 我有一个包含 2 个图像字段的 CCK 多组。一个用于缩略图(我将图像缓存用于派生),一个字段用于原始(更大的图像)。每个节点可以有我需要的任意数量的组(无限制)。所以我可以回答你的问题:我在给定节点上有多个图像。希望有帮助吗? 【参考方案1】:

如果我正确理解您的问题,您应该这样做。

 1. Create view1 for page with linked images. It should be page display with http://example.com/images/%nid
   where %nid is nid argument of gallery. 
 2. Create view2 for gallery detailed page. it should be page display with http://example.com/%nid/detail 
 3. Theme that views as you want.
 4. For view1 for image field use override output in field settings to make it links to %nid/detail

附:在需要的地方使用关系。如果描述不清楚,请填写。

【讨论】:

你确定这有效吗?因为 url 的第一个参数 (http://example.com/%nid/detail) 不能是动态的恕我直言。 当然。为什么不能?转到查看编辑页面,选择要编辑的图像字段,选中将此字段输出为链接,您将看到用于该链接的文本字段,在该字段下您可以找到参数的占位符和其他字段。使用它们。 这对我不起作用。 Drupal 对我说:“%”不能用于路径的第一段。 是的,你是对的。 % 不能是第一段。我的描述有误。我很抱歉。但无论如何,这行得通。您只需要使用这样的路径 example.com/image/%nid/detail 或者如果与 view1 有冲突,请使用 example.com/images_detail/%nid/detail 并检查此模块以获取视图别名 drupal.org/project/view_alias 它可能对您有用。【参考方案2】:

您可以在您制作(或可能已经拥有)的自定义模块中尝试这样的事情: 在菜单中设置所需页面的路径并将其设置为调用函数的回调,然后您可以呈现任何你想要的,或者调用任何你想要的。

function MODULENAME_menu() 
  $items = array();
  $items['gallery/%/detail'] = array(
    'title' => 'Gallery Detail',
    'page callback' => 'MODULENAME_gallery_detail_page',
    'page arguments' => array(1),
    'access callback' => TRUE,
    'type' => MENU_CALLBACK
  );
  return $items;


function MODULENAME_gallery_detail_page($gallery_id) 
  // Here you can render the view as a page, using the gallery
  // id which you passed as a parameter to this function.
  // So Change MYCUSTOMVIEW to the view you want to render
  $view = views_get_view('MYCUSTOMVIEW');
  print views_build_view('page', $view, array(), false, false);

只需将 MODULENAME 更改为您的模块名称即可。在调用views_build_view时你可能需要做一些工作,但这应该是一个开始,如果你愿意,你可以再问一些问题,我会帮忙的。

【讨论】:

我忘了提到我将路径从 /gallery-N/detail 更改为 gallery/N/detail 以便我可以提取数字,希望这不是太大的问题,否则可以绕着走 感谢您的建议。我试试看:) 我不确定我是否理解正确。我必须构建自己的模块?

以上是关于Drupal:使用参数的动态视图的主要内容,如果未能解决你的问题,请参考以下文章

使用ajax将参数发送到drupal视图

drupal 视图动态过滤器

drupal 视图块参数

使用 nid 参数在 Drupal 视图中为每个节点加载 Ajax

Drupal 视图过滤使用一个分类术语并使用参数添加另一个过滤器

drupal-6视图参数中的日期范围?