drupal ---主题代码

时间:2010-11-26 14:41:25

标签: php drupal module

     $i = 0;
   $suggestion = 'page';
   $suggestions = array();
  while ($arg = arg($i++)) {
  $arg = str_replace(array("/", "\\", "\0"), '', $arg);
   $suggestions[] = $suggestion . '-' . $arg;
   if (!is_numeric($arg)) {
    $suggestion .= '-' . $arg;
   }
 }

我是drupal的新手,我不能很好地遵循上面的代码,希望有人可以向我解释。我知道第一行是将0分配给$ i,然后将'page'分配给数组。我知道arg是drupal中的一个数组。 例如,现在url是example.com/node/1。如何使用此URL来使用上面的代码。

2 个答案:

答案 0 :(得分:0)

看起来它的目的是根据路径生成ID字符串(可能是CSS类),并从生成的ID中排除路径的数字组件。 例如,'my/123/article'会生成ID "page-my-article"

它似乎来自一个函数(因为循环使用arg()读取参数)并且它期望Drupal路径,例如"node/123/edit"

因此该函数将被称为:

mystery_function("my/123/article", "even/better/article");

变量:

$i是存储循环索引的变量

$suggestion是一个存储生成的ID的String。它被初始化为“page”,因为ID的语法是“page-SOMETHING”。

$arg来自while循环:它逐个读取传递给mystery函数的参数

$suggestions是一个包含生成的ID的数组,每个参数传递给一个神秘函数。


在循环中:

$arg = str_replace...”行会删除不需要的字符,例如“\”(但该行肯定可以改进)。

$suggestions[] = ...”行将ID添加到结果数组中。

if (!is_numeric($arg)...”行从生成的ID中排除数字(例如“my / 123 / article”可能会生成“my-article”)

$suggestion .= ...”行将“$ arg”的值附加到“$ suggestion”的值并将其存储在“$ suggestion”中


但老实说,我不建议使用该代码:我怀疑它是否按预期工作,因为$suggestion未在每个循环中重新初始化,因此第一个路径的值将附加到第二个路径,并且到第三个,依此类推,我怀疑这是故意的。

答案 1 :(得分:0)

此代码很可能位于preprocess_page挂钩中的主题template.php中。如果是这种情况,它会用于根据提供的参数(如节点ID)创建模板建议,以便为每个节点创建页面模板。

这段代码的作用是,它循环遍历drupal url中的所有参数,可以是user/3node/3taxonomy/term/3或任何自定义网址。

  1. 首先在参数中进行一些清理,以确保不添加任何奇怪的符号。对于大多数网址来说,这不是必需的,但可能存在安全性,以避免在某些情况下需要创建奇怪的模板名称。这是通过str_replace
  2. 完成的
  3. 接下来,它根据arg。
  4. 将建议添加到列表中
  5. 如果arg不是数字,则会将其添加到建议中,以便在下一个循环中使用它。
  6. 我们的想法是,您将使用上面的网址添加一些模板建议,如下所示:

    • 页用户
    • 页用户-3

    • 页分类
    • 页面分类法术语
    • 页面分类法术语-3

    在这个列表中,drupal将使用最后一个,所以如果page-user-3.tpl.php存在,那将用作user/3的页面模板,如果不是page-user.tpl.php将被使用等等。

    如果要为用户页面或节点页面创建自定义页面模板,同时能够为特定用户创建自定义页面模板,则可能需要这样做。

    然而,这不是我想要采用的策略。如果你这样做,你将会结束许多不同版本的页面模板,最终会产生CMS系统应该消除的维护噩梦。如果您确实需要这么多不同的页面模板,那么您应该查看上下文或面板,并将一些逻辑放入其中。