Drupal Answers Asked by user48552 on December 19, 2021
I am using References module to make a node reference in my course content type that reference to school content type (a course belong to one school and a school have many courses).
Now what I want is if I’m going to delete a school, the delete operation will not be completed if the school referenced by any courses.
I’ve read hook_node_delete()
and hook_delete()
, written them in my custom module, tried to dpm($node)
but no use!
function mymodule_delete($node) {
dpm($node);
}
function mymodule_node_delete($node) {
dpm($node);
}
The school node still be deleted!
According to hook_node_info() , I create:
function mymodule_node_info() {
return array(
'school' => array(
'name' => t('School'),
'base' => 'school',
'description' => t('A short description'),
)
);
}
base: (required) The base name for implementations of
node-type-specific hooks that respond to this node type. Base is
usually the name of the module or ‘node_content’, but not always
And then in my mymodule.module:
function school_delete($node) {
dpm($node);
}
The code still not working!
If you are familiar with Rules (if you are not check here) you can use this selection :
add an integer field to school content type (this field is going to count courses which are referenced to a school)
on node creation event , check if it is a course type , if it is before saving that read the school reference value , then go and increase the school course count .
on node deletion , check if it is a course , then before deletion read the field school and decrease its course count value ,
and finally we are going to use some code :
//Implement hook_delete
function ModuleName_delete($node) {
if($node->type == "school") //if your type machine readable name is school
{
if($node->course_count[LANGUAGE_NONE][0]['value'] < 0) //check field name ...
{
node_delete($node->nid);
}
}
}
Answered by Alireza Tabatabaeian on December 19, 2021
I believe you are invoking the hook incorrectly - according to the API page for hook_delete():
This is a node-type-specific hook, which is invoked only for the node type being affected
Further disccussed on the Node API Hooks Page:
Node-type-specific hooks: When defining a node type, hook_node_info() returns a 'base' component. Node-type-specific hooks are named base_hookname() instead of mymodule_hookname() (in a module called 'mymodule' for example). Only the node type's corresponding implementation is invoked. For example, poll_node_info() in poll.module defines the base for the 'poll' node type as 'poll'. So when a poll node is created, hook_insert() is invoked on poll_insert() only. Hooks that are node-type-specific are noted below.
Answered by Geoff on December 19, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP