node_type_get_type()和hook_uninstall() -- 7 领域 和 hooks 领域 drupal 相关 的问题

node_type_get_type() and hook_uninstall()


0
vote

问题

中文

我有一个job_post模块,它定义了"Job_Post" 内容类型。

在此模块中,我有 hook_unistall() ,它调用 node_type_delete()删除该内容类型。

卸载后,我从注释模块中获取以下错误:

注意:尝试在commend_node_type_delete()中获取非对象的属性(.... communt.module的第343行)。

我有这个错误,因为 99887662 中的 $info 变量设置为 FALSE

为什么当我的模块安装并在任何页面上打印 var_dump(node_type_get_type('job_post')) 时,我有一个对象,但是当我尝试在我的UNISTALL函数中打印相同的代码时,我得到<代码> FALSE 和此错误?

nob_post.install

  /**  * Implements hook_install().  */ function job_post_install() {   node_types_rebuild();    $types = node_type_get_types();   node_add_body_field($types['job_post']);    $body_instance = field_info_instance('node', 'body', 'job_post');   $body_instance['type'] = 'text_summary_or_trimmed';    field_update_instance($body_instance); }  /**  * Implements hook_uninstall().  */ function job_post_uninstall() {   $instances = field_info_instances('node', 'job_post');   foreach ($instances as $instance_name => $instance) {     field_delete_instance($instance);   }    // Force rebuild of the node type cache   // as Clive suggested didn't help   // _node_types_build(TRUE);    node_type_delete('job_post');    field_purge_batch(1000); }   

Job_Post.module

  /**  * Implements hook_node_info() to provide our job_post type.  */ function job_post_node_info() {   return array(     'job_post' => array(       'name' => t('Job Post'),       'base' => 'job_post',       'description' => t('Use this content type to post a job.'),       'has_title' => TRUE,       'title_label' => t('Job Title'),       'help' => t('Enter the job title and job description')     )   ); }  /**  * Implement hook_form() with the standard default form.  */ function job_post_form($node, $form_state) {   return node_content_form($node, $form_state); }   
英文原文

I have a job_post module, which defines the "job_post" content type.

In this module I have hook_unistall() which calls node_type_delete() to remove that content type.

After uninstalling, I have the following error from the Comment module:

Notice: Trying to get property of non-object in comment_node_type_delete() (line 343 of ....\comment.module).

I have this error because the $info variable in node_type_delete() is set to FALSE.

Why when my module is installed and when I am printing var_dump(node_type_get_type('job_post')) on any page, I have an object, but when I'm trying to print the same code in my unistall function I get FALSE and this error?

job_post.install

/**  * Implements hook_install().  */ function job_post_install() {   node_types_rebuild();    $types = node_type_get_types();   node_add_body_field($types['job_post']);    $body_instance = field_info_instance('node', 'body', 'job_post');   $body_instance['type'] = 'text_summary_or_trimmed';    field_update_instance($body_instance); }  /**  * Implements hook_uninstall().  */ function job_post_uninstall() {   $instances = field_info_instances('node', 'job_post');   foreach ($instances as $instance_name => $instance) {     field_delete_instance($instance);   }    // Force rebuild of the node type cache   // as Clive suggested didn't help   // _node_types_build(TRUE);    node_type_delete('job_post');    field_purge_batch(1000); } 

job_post.module

/**  * Implements hook_node_info() to provide our job_post type.  */ function job_post_node_info() {   return array(     'job_post' => array(       'name' => t('Job Post'),       'base' => 'job_post',       'description' => t('Use this content type to post a job.'),       'has_title' => TRUE,       'title_label' => t('Job Title'),       'help' => t('Enter the job title and job description')     )   ); }  /**  * Implement hook_form() with the standard default form.  */ function job_post_form($node, $form_state) {   return node_content_form($node, $form_state); } 
     

回答列表

1
 
vote
vote
最佳答案
 

如果查看论坛模块在 forum_uninstall(),您会注意到它只是删除它定义的字段,但它不会删除它定义的内容类型。

  function forum_uninstall() {   // Load the dependent Taxonomy module, in case it has been disabled.   drupal_load('module', 'taxonomy');    variable_del('forum_containers');   variable_del('forum_hot_topic');   variable_del('forum_per_page');   variable_del('forum_order');   variable_del('forum_block_num_active');   variable_del('forum_block_num_new');   variable_del('node_options_forum');    field_delete_field('taxonomy_forums');   // Purge field data now to allow taxonomy module to be uninstalled   // if this is the only field remaining.   field_purge_batch(10); }   

您的模块应执行相同的操作,避免删除为内容类型定义的字段(如果它们未从模块中定义),或内容类型本身。

 

If you look at the code that the Forum module executes in forum_uninstall(), you will notice that it just deletes the field it defines, but it doesn't delete the content type it defines.

function forum_uninstall() {   // Load the dependent Taxonomy module, in case it has been disabled.   drupal_load('module', 'taxonomy');    variable_del('forum_containers');   variable_del('forum_hot_topic');   variable_del('forum_per_page');   variable_del('forum_order');   variable_del('forum_block_num_active');   variable_del('forum_block_num_new');   variable_del('node_options_forum');    field_delete_field('taxonomy_forums');   // Purge field data now to allow taxonomy module to be uninstalled   // if this is the only field remaining.   field_purge_batch(10); } 

Your module should do the same, and avoid deleting the fields defined for the content type (if they are not defined from the module), or the content type itself.

 
 
0
 
vote

node_type_get_type 调用 page.tpl.php0

page.tpl.php1 在它里面有这个评论:

  page.tpl.php2  

显然,该功能不旨在从禁用的模块返回节点类型。

 

node_type_get_type calls _node_types_build.

_node_types_build has this comment inside of it:

// Check for node types from disabled modules and mark their types for removal. // Types defined by the node module in the database (rather than by a separate // module using hook_node_info) have a base value of 'node_content'. The isset() // check prevents errors on old (pre-Drupal 7) databases. 

So apparently the function is not intended to return node types from disabled modules.

 
 
 
 

相关问题

2  如何导入UserPoints?  ( How to import userpoints ) 
用户点模块尚未迁移集成。 看着API我可能会使用 userpoints_service_add 为批处理脚本中的每个用户分配"起始点" 值。 是否有一个选项可以在我上线时更新用户的"起始点" 值?或者我必须计算差异,只需添加调整? ...

0  在新迁移的站点上调用未定义的函数字段_attach_load()  ( Call to undefined function field attach load on a newly migrated site ) 
我将一个站点移动到另一个服务器以测试。 我收到以下错误: 在第320行中调用未定义的函数字段_attach_load()在第320行(第320行)中包含/实体。 如果我尝试访问 http://www.example.com/randomstuff ,我得到了这个 错误: 致命错误:调用undefined函数u...

3  停止在Drupal 7中显示生产服务器中的错误  ( Stop displaying errors in production server in drupal 7 ) 
如何停止Drupal显示不必要的错误? 我正在将我的drupal 7站部署到生产服务器,我想停止显示通用错误。 编辑: 我发现了关于显示在这个链接: <?php error_reporting(-1); $conf['error_level'] = 2; ini_set('display_...

1  如何在视图中渲染第一个节点会导致不同的视图模式?  ( How render first node in views result in different view mode ) 
目前,我使用 context 处理它。在调用 views_embed_view之前,我在 context中设置了一个变量和 node.tpl.php 首先结果我取消了这个变量... 有没有更好的方法来处理它?<​​/ p> ...

1  如何检索具有特定角色的用户尚未注释的节点列表  ( How to retrieve a list of nodes not already commented by a user with a specific ) 
我正在尝试制作一个管理视图(仅对角色= superator可见),只需列出我网站中没有任何主持人评论的所有节点。 请注意,我不要求向零评论显示所有节点,但列出了具有主持人角色的用户尚未评论的所有节点。 提前谢谢你帮助我。 ...

2  嵌入两个上下文过滤器(用户ID和分类学期)的视图  ( Embed a view with 2 contextual filters user id and taxonomy term ) 
我正在研究一个过滤的块视图,我想从模板设置一个额外的参数。 现在我有一个页面,其中一个网址如下: http://www.page.com/放置/测试 "test" 是一个节点(nodetype1),我已经使用上下文过滤器来获取用户ID表单"test" 以仅通过节点"测试" 的用户仅过滤节点(类型"nodetype2...

0  “再次”AJAX呼叫多个节点在一页上添加表单  ( One more ajax call for multiple node add forms on one page ) 
我想要一个页面,初始节点添加表格(小尺寸),标题行和身体textarea 3x20尺寸; 和一个按钮"再用" AJAX呼叫,以显示另一个表单加上另一个按钮等。 当然,提交按钮始终在底部。 所以问题是...哪个模块? :)我几乎无法找到搜索条款! 更新:我想添加,这个任务似乎经常使用和模块化,所以我认为它会有一个模...

3  如果登录从登录块失败,则重定向到登录页面?  ( Redirect to login page if login fails from a login block ) 
我有一个登录表单块,当用户无法登录网站时,我想用常用的错误消息将他重定向到用户/登录页面 ...

1  节点标记为多个分类系统,如何保持扩展的特定分类菜单用户已习惯到达节点  ( Node tagged with more than one taxonomy how to keep expanded the specific taxon ) 
我有与多个分类词汇相关关联的节点,因此可以以不同方式列出/达到相同的节点,例如: 品牌&gt;家庭线&gt;型号&gt;节点 角色&gt;类别&gt;节点 e.g。 法拉利&gt;顶级豪华&gt; testarossa&gt;节点&gt;节点-A 汽车&gt; Supercars&gt;节点&gt;节点-A 通...

0  在以编程保存的节点列出时,视图不会使用Pathauto URL别名  ( Views will not use pathauto url alias when listing programatically saved nodes ) 
我正在编程地保存节点,一切正常工作正常。 Pathauto也正好工作,并根据我的URL别名配置生成别名。 但是,当视图创建新节点的列表时,它使用节点/ XX而不是现有的URL别名。任何人都知道为什么可以发生这种情况?所有缓存已被清除,Cron Ran等。这是代码 $node = new stdClass(); ...

0  从URL列表中加载图像的快速方法  ( A quick way to load images from a list of urls ) 
使用媒体文件选择器窗口小部件可以从Web添加图像,而无需先将其下载到桌面。 但如果您有图像URL列表,它会很快得到乏味。 从本地驱动器添加多个图像,有一个很好的Plupload模块。但是如何方便地加载远程文件? ...

10  file_scan_directory()需要大约10秒才能执行  ( File scan directory takes about 10 seconds to execute ) 
使用xhprof我注意到 file_scan_directory() 在前页加载时需要超过10秒才能执行。为什么要花这么长时间? 这是XhProfile的输出: ...

1  如何为视图创建“添加项”上下文链接?  ( How to create an add item contextual link for views ) 
我喜欢 d7 当然,我可以将"添加项目" 按钮添加到视图的页脚中。但我需要仅向有适当许可添加项目的用户来展示它。 是有一种惯用的方式做呢? ...

1  如何按照特定节点类型的节点的数量在视图中排序用户?  ( How to sort users in a view by the number of nodes authored of a specific node t ) 
我很高兴地发现,在views 3我可以通过他们撰写撰写的节点的数量(使用关系"用户:content unitered" 和聚合/'组)来对用户进行排序,请参阅这里)。 如何执行相同的操作,但仅计算某个节点类型的节点? (我实际上在概要文件的视图中使用它(Profile2),但使用关系"配置文件:用户UID" 解决方案...

1  如何允许用户在注册时选择他们的语言?  ( How can i allow the user to choose their language upon registration ) 
有一个解决方案用于在此处在Drupal 6中显示用户/寄存器表单上的站点语言选择字段: https://stackoverflow.com/问题/ 5556895 / how-to-and-language-switcher-in-mess-register-form-in-drupal-6 但是,我个人无法将...

0  在图像样式预设名称中使用数字的风险是多少(D6中的ImageCache)  ( What is the risk of using number in image style preset name imagecache in d6 ) 
在需要写入预设名称下面有一条消息。它不建议我们编写数字: The name is used in URLs for generated images. Use only lowercase alphanumeric characters, underscores (_), and hyphens (-). ...

0  Drupal 7:如何翻译我创建的复选框的内容?  ( Drupal 7 how do i translate the content of a checkbox i created ) 
我有一个多乐曲网站,内容翻译工作。现在我添加了一个内容类型并使用了新字段的复选框/达到按钮字段。如何翻译此类字段的内容。 让我们说我放入性别男性|男性女性|女性现在我有西班牙语,并希望展示西班牙语文本。我该怎么做? 我发现有人建议我不得不使用php字段,但我甚至没有在那里看到一个php字段,虽然模块在其他地方工作,但...

0  在成功Ajax提交后,如何清除已渲染“Drupal消息”? [复制]  ( How to clear already rendered drupal messages after successful ajax submit ) 
这个问题已经在这里有一个答案: 关闭 9年前。 可能的重复: 删除tabledrag状态ajax提交 后,ajax提交和显示状态消息 我有一种自定义表单,将节点的"权重" 保存到自定义表中。表...

0  使用QueryPath和节点  ( Working with querypath and nodes ) 
即时尝试使用我的节点使用QueryPath模块,而不是很有运气。我有这个代码,我尝试将它应用于我的node.tpl文件,但它只崩溃该网站。 我是我使用这个错误的吗? global $base_root; $path_url = $base_root . request_uri(); $qp = qp($path...

2  什么是基于分类物的节点显示不同页面布局的最佳方法?  ( Whats the best method for displaying different page layouts for a node based on ) 
我正在构建一个产品网站,应该为不同类型的产品使用略有不同的页面布局,具体取决于它们的产品类别。 所有产品都是相同的节点类型。它们根据所选分类术语分类。我这样做的原因而不是为每个产品类别创建不同的节点类型是因为某些产品可能存在于多个类别中。 我的理解是面板依赖于用于确定上下文的URL结构。我正在列出所有产品下的所有产品...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.