我在保存字段之前有一个问题。我想将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重定向从网址中删除,因此它只是该网站的基本网址。
答案 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']);
}
}
}