这就是我根据你如何描述它来解决这个问题的方法。视图模块正在处理大部分功能。
我假设你有以下设置:
- 一个名为“#34;公司"公司名称为
术语
- 一种名为" News"的内容类型,其中包含有关的新闻信息
公司。最重要的是,它需要一个分类领域
可以选择与之相关的公司(让我们称之为#34; company_reference")
- 内容类型名为" Tables"(?)。我不确定你的信息
想要在你的"表"中,但它最重要的是有一个
分类学领域参考公司。 (可以是相同的字段" company_reference")
您正在寻找的大多数功能都可以使用视图模块构建。
我会创建一个视图(让我们称之为"公司数据")。视图将有三个不同的显示,每个显示类型为" block"。
显示1:输入块
- 将显示名称设置为有意义的内容,例如" user_input_block"
- 对于此块,请保留 FORMAT 设置。
- 对于 FIELDS 设置,只需要"内容:标题" (才不是
真的很重要。)
- 对于 FILTER CRITERIA 设置,添加过滤器并选择您的
" company_reference"字段,将其设置为自动完成,公开过滤器
对访问者和(在"更多"部分下)更改其过滤器标识
到"公司"。
- 对于 PAGER 设置,将其设置为显示特定数量的项目并将其设置为' 1'。 (这将限制此块检索的数据)
- 在高级部分下,更改"计算机名称"所以有意义,说" user_input_block"
- 仍然在高级部分,点击"主题:信息"。这将显示您可以为此视图添加的不同自定义模板文件的列表。对于"显示输出"记下列表中的最后一个模板建议,它将类似于" views-view - company-data-user-input-block.tpl.php" (" views-view - {your view name} - {your display name} .tpl.php")。点击"显示输出"并复制它列出的PHP。 (这是视图的默认PHP视图)。
- 在文本编辑器/ IDE(无论您使用什么)中粘贴复制的PHP代码,并使用您记下的模板名称将其保存在自定义主题中。编辑PHP并注释掉或删除标有"
<?php if ($rows): ?>...<?php endif; ?>
&#34;的部分。 (这将从显示中删除返回的内容)
因此,要查看刚刚创建的视图显示(使用自定义模板),只显示一个字段,当用户输入公司名称时,该字段将自动完成。然后它会提交表单并将其作为GET变量传递给当前网址(www.yoursite.com/yourpage?company=users company&#34;)。
显示2:**主要区块**
- 将显示名称设置为有意义的内容,例如&#34; company_news&#34;。
- 将 FORMAT 设置设置为您喜欢的(或保持原样)
- 对于 FILTER CRITERIA ,添加&#34;内容:类型&#34;过滤并选择您的&#34;新闻&#34;和&#34;表&#34;内容类型。
- 在高级部分,点击&#34;添加&#34;旁边的&#34;上下文过滤器&#34;。 )在URL中传递上下文过滤器,我们将获取从Input块传递的值。)选择&#34;内容:field_company_reference&#34;作为字段并单击&#34;应用&#34;
- 表示&#34;当过滤器值不可用时#34;部分选择&#34;提供默认值&#34;
- for&#34; Type&#34;选择&#34; PHP代码&#34;并且PHP代码将是这样的&#34;
return isset($_GET['company']) ? $_GET['company']:false;
&#34;
- 对于&#34;当过滤器可用时提供默认值&#34;,选中&#34;指定验证标准&#34;,设置&#34;验证器&#34;到&#34;分类学术语&#34;,检查&#34;公司&#34;词汇和&#34;过滤值类型选择&#34;术语名称转换为术语ID&#34;
- for&#34;如果过滤器值未验证,则执行操作&#34;选择&#34;显示所有结果&#34;
要查看,此视图显示将显示一个列出&#34; news&#34;和&#34;表&#34;内容。如果GET变量&#34;公司&#34;传递(从输入块),然后将过滤此块的内容以仅显示与该块关联的内容。
显示3:**图块**
我不完全确定要在此块中显示哪些数据(或者更确切地说它来自哪里),但是如果您将其设置为我描述的设置主块它将按公司过滤(使用相同的上下文过滤器和具有公司分类标准参考字段的内容)。
这种方法的一个不同之处在于,当用户将公司输入到输入块时,它需要重新加载页面。如果您想避免这种情况,那么您可以进行以下更改;
- 对于主程序段和图表块而不是使用上下文过滤器,请使用常规过滤器作为公司参考字段(与输入块中设置的设置相同) 。对于高级部分下的这两个块,请设置&#34;使用AJAX&#34;到&#34;是&#34;,并使用自定义CSS从视图中隐藏公开的过滤器。
- 使用自定义模块(或使用您的自定义主题)向页面添加额外的JS。由输入块中的字段触发JS,当用户在其中输入值时,JS将该值复制到其他块的公开(但隐藏)字段中,从而触发Drupal重新加载它们通过AJAX传递过滤器。
我还没有测试过任何这个,根据我对Drupal的了解它只是理论上的,但它应该让你走上正确的道路。