Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;上下文“;在drupal页面上_Drupal_Drupal 6_Drupal Ctools - Fatal编程技术网

&引用;上下文“;在drupal页面上

&引用;上下文“;在drupal页面上,drupal,drupal-6,drupal-ctools,Drupal,Drupal 6,Drupal Ctools,这个问题是一般性的,我已经发布了一个版本。不过,我希望,通过在这个论坛上提问,我将有更好的机会得到回应,并对更多人有用 当内容全部加载到drupal页面时,将内容关联在一起是一件棘手的事情。在Drupal中,每一个页面,不管该站点,基本上都是相同的:在中间有一个主要内容(视图、节点或多个节点),其中围绕该中心内容的块。为了让这些模块在某种程度上知道中间是什么,(更不用说知道对方),你必须在自己的自定义模块中做一些非常花哨的步法,或者你必须在URL中使用“参数”。 我一直在研究developmen

这个问题是一般性的,我已经发布了一个版本。不过,我希望,通过在这个论坛上提问,我将有更好的机会得到回应,并对更多人有用

当内容全部加载到drupal页面时,将内容关联在一起是一件棘手的事情。在Drupal中,每一个页面,不管该站点,基本上都是相同的:在中间有一个主要内容(视图、节点或多个节点),其中围绕该中心内容的块。为了让这些模块在某种程度上知道中间是什么,(更不用说知道对方),你必须在自己的自定义模块中做一些非常花哨的步法,或者你必须在URL中使用“参数”。 我一直在研究developmentseed提供的///模块套件,还研究了Earl Miles(编写视图的人)制作的/模块。虽然两者都提供了使我的工作更容易的工具,但我对它们的理解是,如果我希望块的内容由“上下文”定义,我仍然需要在URL中放置“参数”(我使用的是一般意义上的参数,而不是上下文模块或Ctools中上下文的概念所指的特定意义上的参数)

是我遗漏了什么,还是我们在Drupal那里


最后,在结束发言时,我应该说,我知道其他模块在有限的、逐案的基础上帮助解决这类问题。例如,模块和模块都尝试为一个非常特定的用例解决这个问题。它们都是很好的模块,还有其他类似的模块,但我真的很想找到解决这个问题的方法。

我想我不太明白您的目的,但我还是会尝试:

对于每一个非静态的网站,无论是基于Drupal还是其他任何东西,都有两个基本的东西为决定为给定的请求提供什么内容提供了“上下文”

第一件也是最重要的事情显然是请求本身。这是始终保证存在的唯一信息。在大多数情况下,这将只是一个GET请求,而对于这些请求,URL隐式地成为可用“上下文”的主要来源。POST请求可以在URL之外提供更多的“上下文”,但对于您的问题,您可能会认为它们只是GET请求的一个更复杂的变体,在URL之外提供更多的“参数”(在大多数情况下,您可以将POST请求转换为具有更详细URL的GET请求)

第二个“上下文提供”是会话。无论会话处理基于什么机制(现在主要是cookie),目标都是一样的,即在固有无状态请求的边界上携带一些“状态”信息。它通过将给定的请求与以前的请求(存储在服务器端)中的信息绑定来实现这一点。这允许“丰富”可用于决定为请求提供什么内容的信息。基本上,可以将其视为向请求添加更多“参数”的一种方式

就这样。组装响应所需的任何其他信息都需要以某种方式从请求中提供的信息中派生出来(可以说,会话处理已经是这样做的主要过程,通过添加基于cookie或请求附带的其他标识符的“上下文”)

Drupal很好地反映了这一过程,IMHO,因为它首先根据URL为响应组装“主要”内容,并在会话中添加附加信息(例如关于用户的信息)。只有在通过调用index.php中的
$return=menu\u execute\u active\u handler()
组装主要内容之后,才能通过调用
主题('page',$return),添加响应的其他元素(例如块、菜单等)

因此,无论您希望“传递”给其他元素的是什么“上下文”,您要么必须从已经用于组装主内容(URL、会话)的信息中“重新提取”它,要么必须在生成主上下文的过程中临时存储它。您可以通过多种方式实现这一点,例如,通过将其添加到会话中已存储的信息中,通过在某些函数中使用静态缓存,通过设置全局变量(不;),通过将内容传递到数据库,等等


所以再一次,我似乎不明白你的目的是什么。您在这里遗漏了什么?

Henrik给出了很好的回答,但我想补充一点,除了使用cookies维护状态之外,请求中还有很多信息。想想重要的HTTP头,比如accept或language,甚至是X-REQUESTED-WITH。大多数Web框架将这些信息封装到一个方便的数据结构中。不幸的是,从给出的答案中,我不得不得出结论,drupal没有。

如果你想要讨论/对话而不是问题的真实答案,你应该把你的问题放到社区维基中。@googletorp我刚刚把它做成了一个维基-谢谢你的建议@Henrik感谢您抽出时间提供深思熟虑的回复。你完全明白我的目的。我提出这个问题是因为我正在使用Drupal构建一个网站,但这个问题实际上与Drupal无关。相反,我在web开发中遇到了一个由来已久的问题:如何在无状态环境中维护状态。因此,你回答了我的问题,因为你帮助我理解了我所有的选择。基本上,我可以使用请求本身(即URL)或会话。此外,临时存储是可能的,但要小心。。。