Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.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
Php Drupal 7,访问html中的复选框字段值_Php_Drupal_Drupal 7 - Fatal编程技术网

Php Drupal 7,访问html中的复选框字段值

Php Drupal 7,访问html中的复选框字段值,php,drupal,drupal-7,Php,Drupal,Drupal 7,我正在尝试使用_preprocess_html访问自定义节点字段,但我在StackOverflow上看到的许多方法似乎无法正常工作,我也不太明白为什么 我有一个名为“public”的复选框字段,它在节点上作为“field\u public”可用。我想知道它是在预处理html模板函数中选中还是未选中 如果我未登录该站点,请执行以下操作: 函数MYTHEME\u preprocess\u html(){ $node=menu_get_object(); } 然后我的字段值是$node->field

我正在尝试使用_preprocess_html访问自定义节点字段,但我在StackOverflow上看到的许多方法似乎无法正常工作,我也不太明白为什么

我有一个名为“public”的复选框字段,它在节点上作为“field\u public”可用。我想知道它是在预处理html模板函数中选中还是未选中

如果我未登录该站点,请执行以下操作:

函数MYTHEME\u preprocess\u html(){
$node=menu_get_object();
}
然后我的字段值是
$node->field\u public[LANGUAGE\u NONE][0][value']
,正如我所期望的那样。但是,如果我登录,它将更改为
$node->field\u public[0]['value']

现在我可以做了

$public=($node->field_public[LANGUAGE_NONE][0]['value'].\124;$node->field_public[0]['value']))
但我想正确地理解它,我尝试过的所有选项似乎都没有在这两种情况下给我一个价值。我试过:

//节点\u构建\u内容方法
$node=node\u load($node->nid);
节点\构建\内容($node);
$public=$node->content['field_public'];
//实体api方法
$wrapper=entity\u metadata\u wrapper('node',$node);
$public=$wrapper->field_public->value();
//字段\获取\项方法
$public=field_get_项('node',$node,'field_public');

在所有这些情况下,当langauage属性存在(未登录)时会获取该值,而当我以管理员身份登录时(当节点对象没有语言属性时)不会获取该值,因此我不得不采用两种方法进行检查。我做错了什么?

获取字段值的最佳方法始终是:

$node->field_public[LANGUAGE_NONE][0]['value']
Language_None等于'und',当您不使用多语言字段时,它将始终是获得值的好方法。 [0]是一个索引,当字段只有一个值时,它将始终位于该索引处

不需要这样检查:

$public = ($node->field_public[LANGUAGE_NONE][0]['value'] || $node->field_public[0]['value'])
$public = $node->field_public[LANGUAGE_NONE][0]['value'];
字段总是先有语言键

所以像这样使用它:

$public = ($node->field_public[LANGUAGE_NONE][0]['value'] || $node->field_public[0]['value'])
$public = $node->field_public[LANGUAGE_NONE][0]['value'];
或者,为了安全起见,如果不总是使用字段,并且呈现不同类型的内容:

$public = isset($node->field_public[LANGUAGE_NONE][0]['value']) ? $node->field_public[LANGUAGE_NONE][0]['value'] : null;
得到简单的值是完全正确的。您可以尝试渲染字段或使用其他函数,如果您希望获得其他结果,如主题字段

您的代码:

$node = node_load($node->nid);

在这里,您只需进行两次查询,不知道为什么,节点已经在$node变量中获取。所以只需使用value,保持简单

,除非,正如我所说,在preprocess_html()中,当以管理员身份登录时,没有语言代码。节点输出只有
$Node->field_public[0]['value']]
,没有语言代码。这就是我感到困惑的原因,因为我看到的所有文档都与您的观点一致,并且显示了一个代码。