$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来使用上面的代码。
答案 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/3
,node/3
,taxonomy/term/3
或任何自定义网址。
str_replace
我们的想法是,您将使用上面的网址添加一些模板建议,如下所示:
和
在这个列表中,drupal将使用最后一个,所以如果page-user-3.tpl.php存在,那将用作user/3
的页面模板,如果不是page-user.tpl.php将被使用等等。
如果要为用户页面或节点页面创建自定义页面模板,同时能够为特定用户创建自定义页面模板,则可能需要这样做。
然而,这不是我想要采用的策略。如果你这样做,你将会结束许多不同版本的页面模板,最终会产生CMS系统应该消除的维护噩梦。如果您确实需要这么多不同的页面模板,那么您应该查看上下文或面板,并将一些逻辑放入其中。