Warning: Undefined array key "HTTPS" in include() (line 29 of /opt/www/fdv2/drupal.stage/web/sites/default/settings.local.php).
include('/opt/www/fdv2/drupal.stage/web/sites/default/settings.local.php') (Line: 4)
require('/opt/www/fdv2/drupal.stage/web/sites/drupal001.net/settings.php') (Line: 145)
Drupal\Core\Site\Settings::initialize('/opt/www/fdv2/drupal.stage/web', 'sites/drupal001.net', Object) (Line: 1099)
Drupal\Core\DrupalKernel->initializeSettings(Object) (Line: 701)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
如何在自己的模块中覆写drupal其它模块的方法? - Drupal大学 - Drupal问答论坛
首页 / 帖子
如何在自己的模块中覆写drupal其它模块的方法?

如题:

在dupal默认的模块中有一个方法:

路径:/modules/node/node.module

function node_get_recent($number = 10) {.......}

我现在想在我的模块zfm中改这个方法的逻辑,我想在这个方法的查询条件中加一个条件。

路径:/sites/all/modules/zfm/zfm.module

这个应该怎么弄?谢谢。。。

3个答案
闻涛
发布于:2014-09-29 16:52

看了下node_get_recent的源码,并没有提供任何hook去修改查询条件或者更改查询结果。

如果是想修改node_recent_block, 提供个思路供参考:

直接复制node_get_recent的源码,新建一个 zfm_node_get_recent的函数进行自定义查询。

修改 theme_node_recent_block 的变量,如下:

/**
 * Preprocess variables for theme_node_recent_block().
 */
function zfm_preprocess_node_recent_block(&$vars) {
    $num = variable_get('node_recent_block_count', 10);
    $vars['nodes'] = zfm_node_get_recent($num);
}

这样就可以实现自定义查询了。


需要注意的是这样其实进行了两次nodes的查询,所以最好还是自定义一个block。


发布于:2014-09-29 17:39

同意 @流浪者

自己写吧,或者用views,然后在模版里面嵌入views结果也可以。

没必要一定用代码。

陈蹊
发布于:2014-09-30 13:09

要么自己实现,要么使用Views生成,推荐后者。