gpt4 book ai didi

javascript - 在特定内容类型的节点创建上执行 JavaScript

转载 作者:行者123 更新时间:2023-11-30 13:19:18 26 4
gpt4 key购买 nike

我只想对一种特定内容类型的节点创建和节点编辑执行 JavaScript 函数。这只是一个小的函数调用。

我们将 Drupal 7 内容类型称为“tear”,并将 JavaScript 函数称为“doitnow();

有什么办法吗?

非常感谢。

尼尔斯

最佳答案

您必须创建自己的模块并实现 hook_node_insert() , hook_node_update()hook_node_view()并采取适当的步骤。您还必须使用 Drupal behavior 创建一些 JavaScript 代码,你准备好了。您必须在节点创建/更新后使用临时 session 变量,因为这样您可以在 hook_node_view 中检查该变量是否存在,并添加“告诉”已添加新“撕裂”内容的 JS 设置。

You can download the whole module here.

您必须将此模块放入 sites/all/modules/testModule 目录。

好的,这是模块的代码:

testModule.info:

name = Test Customization Module
description = Customizing stuffs on the site...
core = 7.x
package = My modules

scripts[] = js/testModule.behaviors.js

testModule.module:

/**
* Implements hook_node_insert()
*
* @see http://api.drupal.org/api/drupal/modules!node!node.api.php/function/hook_node_insert/7
* @param object $node
*/
function testModule_node_insert($node) {
switch ($node->type) {
case 'tear':
$_SESSION['tear_just_inserted'] = microtime();
break;
}
}

/**
* Implements hook_node_update()
*
* @see http://api.drupal.org/api/drupal/modules!node!node.api.php/function/hook_node_update/7
* @param object $node
*/
function testModule_node_update($node) {
switch ($node->type) {
case 'tear':
$_SESSION['tear_just_inserted'] = microtime();
break;
}
}

/**
* Implements hook_node_view().
*/
function testModule_node_view($node, $view_mode, $langcode) {
switch ($node->type) {
case 'tear':
// we call doitnow() if it's needed (if "tear" content was added before)
if (isset($_SESSION['tear_just_inserted'])) {
drupal_add_js(array('testModule' => array('tear_just_added' => TRUE)), 'setting');
unset($_SESSION['tear_just_inserted']);
}

break;
}
}

/**
* Implements hook_overlay_child_initialize()
* @see http://api.drupal.org/api/drupal/modules!overlay!overlay.api.php/function/hook_overlay_child_initialize/7
*/
function testModule_overlay_child_initialize() {
// Add our custom JavaScript: we don't want the node/add/tear to appear on the overlay, because this way the JS setting doesn't get added properly
drupal_add_js(drupal_get_path('module', 'testModule') . '/js/testModule.overlay.behaviors.js');
}

js/testModule.behaviors.js:

(function ($) {   
Drupal.behaviors.testModule = {
doitnow: function(){
alert("A new \"tear\" content has just been added!");
},

attach: function (context, settings) {
try{
if(settings.testModule.tear_just_added){
this.doitnow();
}
} catch(ex){}
}
};
})(jQuery);

js/testModule.overlay.behaviors.js:

(function ($) {
// Disable overlay for creating the "tear" node.
Drupal.behaviors.testModule = {
attach: function (context, settings) {
var $tear_link = $('a[href*="node/add/tear"]'),
tear_link_href = $tear_link.attr('href');
if( $tear_link.length > 0 ) {
// we want to avoid opening the content adding for "tear" content type in the overlay
// so we open it in the current window
$tear_link.unbind();
$tear_link.click(function(e){
window.open(tear_link_href,'_self',false);
e.stopPropagation();
})
}
};
}
})(jQuery);

询问是否有什么不太清楚。

关于javascript - 在特定内容类型的节点创建上执行 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10856769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com