如何使用自定义块 php 获取视图页面的字段
Posted
技术标签:
【中文标题】如何使用自定义块 php 获取视图页面的字段【英文标题】:How to get fields of a views page with custom block php 【发布时间】:2013-12-01 01:32:29 【问题描述】:我有一个包含多个字段的 Drupal 7 视图“页面”。其中之一是分类术语。我还有一个视图“块”,它的上下文过滤器设置为相同的术语。
(我正在尝试按页面视图中的术语过滤块结果)
我创建了一个新块(在“块”下)并添加了自定义 php 以返回和显示视图。
如果我用 echo views_embed_view('events','block','1');
对术语 id 进行硬编码,它可以正常工作。
我的问题是;如何使用 php.ini 获取页面视图中字段的值。我已经看到很多关于如何从普通节点而不是从另一个视图中获取它的示例。
提前致谢
【问题讨论】:
【参考方案1】:在 Drupal 中,块在内部处理上下文过滤器。如果您使用以下代码打印您的块,则不必担心传递术语参数,前提是您在术语页面上,或者您明确设置了如何在视图上下文过滤器参数中检索术语 id。
如上一个答案所示 How to insert a block into a node or template in Drupal 7? 唯一的例外是从 PHP 5.4 开始,您只能将变量传递给 drupal_render()
$block = block_load('views', 'block_name'); $output = _block_get_renderable_array(_block_render_blocks(array($block))); 打印 drupal_render($output);如果您不在分类术语页面上,或者如果您无法获得检索术语 id 的视图,那么您应该从不同的角度看待您的问题,即找到一种方法来自己检索术语 tid,然后传递给:
views_embed_view()Devel 模块与一些预处理函数结合使用是一个很好的工具。
【讨论】:
我本身不在条款页面上。只是由使用视图上下文过滤器作为输入的视图创建的页面。该块位于同一页面上并使用相同的过滤器。我能够通过将参数附加到页面 url 来解决它,然后在我的块 php 代码中手动将它们传递给 [code]views_embed_view()[/code] 如果页面是由 Views 生成的,block 可能无法访问相同的变量。如上所述,您可以使用 hook_preprocess() 轻松检查这一点,如果您愿意,可以使用 hook_preprocess_page() 和 hook_preprocess_block() 检查变量...虽然您的方法可以工作,但出于多种原因,我倾向于使用 Drupal 方式解决方案:)【参考方案2】:print $block = module_invoke('views', 'block_view', '你的块名');
打印渲染($block['content']['#content']);
你也可以使用 print_r() / var_dump() 来显示你想要的字段
【讨论】:
以上是关于如何使用自定义块 php 获取视图页面的字段的主要内容,如果未能解决你的问题,请参考以下文章