Drupal 模块字段和提要,模块生成数据

Drupal 模块字段和提要,模块生成数据,drupal,field,Drupal,Field,在保存字段之前修剪字段有问题。我想将substr()或regex()与preg\u match()一起使用。我已经构建了一个Drupal7模块,但它根本不能工作。我曾尝试在feeds tamper模块中使用trim插件,但它似乎不起作用。我使用的数据来自Google Alerts的提要。我已经发布了这个问题 这就是我到目前为止所做的,我知道我的正则表达式是错误的;我试着让它做任何事情,只是想看看我是否能让它工作,但我对如何将这种类型的函数添加到Drupal模块感到非常困惑 function su

在保存字段之前修剪字段有问题。我想将
substr()
regex()
preg\u match()
一起使用。我已经构建了一个Drupal7模块,但它根本不能工作。我曾尝试在feeds tamper模块中使用trim插件,但它似乎不起作用。我使用的数据来自Google Alerts的提要。我已经发布了这个问题

这就是我到目前为止所做的,我知道我的正则表达式是错误的;我试着让它做任何事情,只是想看看我是否能让它工作,但我对如何将这种类型的函数添加到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模块获取字段

如果有一个使用<代码>子()/<代码>的简单方法,我会考虑这个或别的什么东西。


基本上,我只想取消对URL的Google重定向,因此它只是网站的基本URL。

根据您的问题和以后的评论,我建议使用node_pressave hook(http://api.drupal.org/api/drupal/modules!node!node.api.php/function/hook\u node\u presave/7)用于此。 它在insert(new)和update ops之前调用,因此如果需要,您将需要额外的验证来防止它在节点更新上执行

<?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']);
        }
    }
}

-函数中没有参数?-将$node对象作为引用发送(&$node)。-另外,你能用一些例子解释一下在preg_比赛后你需要保存什么吗?嗨,好吧,我不知道没有任何争论还在继续。我有一个来自google alerts的rss提要,它为进入链接模块字段的网站生成url。我想要PrggMatter来识别中间的基本URL,而不是谷歌前面的重定向信息和后面的字符串。我想删除我不需要的东西。谷歌警报URL看起来像这样。我想在节点保存中间的URL。http%3A//www.rollingstone.com/music/news/chili-peppers-neil-young-jack-white-black-keys-to-headline-austin-city-limits-fest-2012-20120522非常感谢您的帮助!!!!!这有意义吗?我可以提供更多信息来帮助回答这个问题。再次感谢。好的,我要试试这个。我明白你的意思了。我也认为普雷萨夫。如果我能让它工作,我会向你汇报。再次感谢你的帮助!也许一个正则表达式可以快速/有效/减少内存,但我对正则表达式了解不多。谷歌和你会发现很多正则表达式模式可以从URL获取特定的参数。你提供的代码是否对URL进行了任何修剪,还是仍然需要添加?修剪(urldecode($parms['q'])不会有什么不同,但如果你愿意,可以使用上面的ti替换urldecode($parms['q'])当我将代码添加到模块中时,我现在遇到了一些错误,请查看这些错误,我非常感谢!谢谢!!!!