带有提要的模块字段,生成数据的模块

时间:2012-05-29 16:45:57

标签: drupal field

我在保存字段之前有一个问题。我想将substr()regex()preg_match()一起使用。我已经构建了一个Drupal 7模块,但它根本无法工作。我尝试在feed篡改模块中使用trim插件,但它似乎不起作用。我使用的数据来自Google快讯的Feed。我已发布此问题here

这是我到目前为止所做的,我知道我的正则表达是错误的;我试图让它做任何事情,只是为了看看我是否可以让它工作,但我很遗憾如何将这种类型的函数添加到Drupal模块。

function sub_node_save() {    
   $url = $node->field_web_screenhot['und'][0]['url'];
   $url = preg_match('~^(http|ftp)(s)?\:\/\/((([a-z0-9\-]*)(\.))+[a-z0-9]*)($|/.*$)~i',$url );
   $node->field_web_screenhot['und'][0]['url'] =$url;

  return ;
}

我使用Devel模块来获取该字段。

如果有一种简单的方法可以使用substr(),我会考虑这个或其他。

基本上,我只想将Google重定向从网址中删除,因此它只是该网站的基本网址。

1 个答案:

答案 0 :(得分:1)

根据您的问题和后来的评论,我建议使用node_presave hook(http://api.drupal.org/api/drupal/modules!node!node.api.php/function/hook_node_presave/7)这个。 它在插入(新)和更新操作之前调用,因此如果需要,您将需要额外的验证以防止它在节点更新上执行。

<?php
function MYMODULE_node_presave($node) {
// check if nodetype is "mytype"
    if ($node->type == 'mytype'){
        // PHP's parse_url to get params set to an array.
        $parts = parse_url($node->field_web_screenhot['und'][0]['url']); 
        // Now we explode the params by "&" to get the URL.
        $queryParts = explode('&', $parts['query']);

        $params = array();
        foreach ($queryParts as $param) {
            $item = explode('=', $param);
            $params[$item[0]] = $item[1];
        } 
        //valid_url validates the URL (duh!), urldecode() makes the URL an actual one with fixing "//" in http, q is from the URL you provided.
        if (valid_url(urldecode($parms['q']))){
            $node->field_web_screenhot['und'][0]['url'] = urldecode($parms['q']);
        }
    }
}