0

保存前のフィールドのトリミングに問題があります。substr()、またはregex()と一緒に使用したかったのpreg_match()です。Drupal 7 モジュールをビルドしましたが、まったく機能しません。フィード改ざんモジュールでトリム プラグインを使用しようとしましたが、うまくいかないようです。私が使用しているデータは、Google アラートのフィードからのものです。この問題をここに投稿しました。

これは私がこれまで行ってきたことであり、私の正規表現が間違っていることはわかっています。私はそれを機能させることができるかどうかを確認するためだけに、何かをさせようとしていましたが、このタイプの機能を 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 リダイレクトを URL から外したいだけなので、Web サイトへの基本的な URL にすぎません。

4

1 に答える 1

1

あなたの質問とその後のコメントに応じて、node_presave フック (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']);
        }
    }
}
于 2012-05-29T22:00:42.333 に答える