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 7 - Fatal编程技术网

Drupal节点\类型\获取\类型()和钩子\卸载()

Drupal节点\类型\获取\类型()和钩子\卸载(),drupal,drupal-7,Drupal,Drupal 7,我有一个模块job\u post,它安装job\u post内容类型 在这个模块中,我有hook\u unistall(),它调用删除我的内容类型的函数 unistalling过程之后,Drupal的核心模块comment出现错误,它在模块调用\u all('node\u type\u delete',$info)之后触发 错误如下,并重复8次(由于注释\u节点\u类型\u删除()中的循环): 我出现此错误是因为函数中的变量$info为false 我的问题是,为什么当我的模块被安装,并且当我在任

我有一个模块
job\u post
,它安装
job\u post
内容类型

在这个模块中,我有
hook\u unistall()
,它调用删除我的内容类型的函数

unistalling过程之后,Drupal的核心模块
comment
出现错误,它在
模块调用\u all('node\u type\u delete',$info)
之后触发

错误如下,并重复8次(由于
注释\u节点\u类型\u删除()
中的循环):

我出现此错误是因为函数中的变量
$info
false

我的问题是,为什么当我的模块被安装,并且当我在任何页面上打印
var\u dump(node\u type\u get\u type('job\u post'))
时,我都有一个对象,但是当我试图在unistall函数中打印相同的代码时,我得到了false和这个错误

作业\u发布安装

/**
*实现hook_install()。
*/
功能作业\u安装后(){
节点类型重建();
$types=节点类型获取类型();
节点添加正文字段($types['job\u post']);
$body_instance=字段_info_instance('node'、'body'、'job_post');
$body_instance['type']='text_summary_或_trimmed';
字段\更新\实例($body\实例);
}
/**
*实现hook_uninstall()。
*/
函数作业\u发布\u卸载(){
$instances=field_info_instances('node','job_post');
foreach($instances作为$instance\u name=>$instance){
字段\删除\实例($instance);
}
//强制重新生成节点类型缓存
//正如克莱夫所说,这没用
//_节点_类型_构建(TRUE);
节点\类型\删除('job \ post');
现场清洗批次(1000);
}
工作岗位模块

/**
*实现hook\u node\u info()以提供我们的job\u post类型。
*/
功能作业\发布\节点\信息(){
返回数组(
'job_post'=>数组(
'name'=>t('Job Post'),
“基本”=>“工作岗位”,
'description'=>t('使用此内容类型发布作业'),
“has_title”=>TRUE,
'title_label'=>t('Job title'),
'help'=>t('输入职务和职务说明')
)
);
}
/**
*使用标准默认表单实现hook_form()。
*/
函数作业\发布\表单($node,$form\u state){
返回节点内容表单($node,$form\u state);
}

注意:此模块示例摘自书籍(第141页),略有改动,即使原始版本也有错误。

由于某些原因,节点类型缓存似乎尚未完全构建,请尝试在调用
节点类型\删除()
之前强制重建,所有节点类型都应可用:

// Force rebuild of the node type cache
_node_types_build(TRUE);

// Delete our content type
node_type_delete('job_post');

您好,请参阅Drupal 7的核心模块文档。存在使用问题

钩子节点信息自动定义内容类型。以这种方式创建的内容类型将自动禁用

核心博客模块定义钩子节点信息,但不在钩子卸载时操作任何节点类型的删除

当你调用
节点时,键入删除('job\u post')在钩子卸载时,节点类型信息已经消失。由于该注释,模块将引发错误

通常,您应该只删除与内容类型相关的任何数据。剩下的就让核心来完成

此外,如果确实要创建/删除内容类型,则不能使用hook\u node\u info。您可以在安装/卸载挂钩上手动创建/删除内容类型

此处卸载示例:

这没用。请查看我的更新问题和完整模块的代码。您仍然没有在
hook\u uninstall()
函数中调用
\u node\u types\u build(TRUE)
,您尝试过吗?当然!但不管怎样,这也没用。试着在你的网站上复制它,你会看到的。应该启用注释模块。您看到了吗?嗯。。。好像是Drupal的bug。我们将等待修补。类似于这个问题的ThxLooks已经用来自的补丁关闭/修复了,尽管我不确定这是否已经被应用到核心版本7.12中。不是,因为我有7.12版本。所以你是说我们不必在
hook\u uninstall()
中使用
节点类型删除()
?是的,至少正确的方法是,在核心模块中实现。但是您也可以从这里复制功能,而无需调用其他模块。
// Force rebuild of the node type cache
_node_types_build(TRUE);

// Delete our content type
node_type_delete('job_post');