0

私はJoomlaプラグイン(このコンテキストでは重要ではありません)を持っています。これは、大量の数値(テキストの段落内)を含む入力を受け取り、それらを一連のsに置き換えるように設計されています。

私の問題は、$ article-> textに対してpreg_replaceを実行する必要があることですが、一致した用語に変更を適用する方法がわかりません。preg_replace_callbackを見たことがありますが、関数内でそれを呼び出す方法がわかりません。

function onPrepareContent( &$article, &$params, $limitstart )
    {
        global $mainframe;
        // define the regular expression
        $pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s";
        if(isset($article->text)){
            preg_match($pattern, $article->text, $matches);
            $numbers = explode("," , $matches[1]);
            foreach ($numbers as $number) {
                echo "<div class='number'><span>" . $number . "</span></div>";  
            }
        }else{
            $article->text = 'No numbers';
        }
        return true;
    }

修正されたコード:

function onPrepareContent( &$article, &$params, $limitstart )
    {
        global $mainframe;
        // define the regular expression
        $pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s";
        if(isset($article->text)){
            preg_match($pattern, $article->text, $matches);
            $numbers = explode("," , $matches[1]);
            foreach ($numbers as $number) {
                $numberlist[] = "<div class='number'><span>" . $number . "</span></div>";   
            }
            $numberlist = implode("", $numberlist);
            $article->text = preg_replace($pattern, $numberlist, $article->text);

        }else{
            $article->text = 'No numbers';
        }
        return true;
    }
4

1 に答える 1

1
function onPrepareContent( &$article, &$params, $limitstart )
{
    global $mainframe;
    // define the regular expression
    $pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s";
    if(isset($article->text)){
        $article->text=preg_replace_callback($pattern,create_function('$match','$init="<div class=\'number\'><span>";$out="</span></div>"; return $init.implode($out.$init,explode(",",$match[1])).$out;'),$article->text);

    }else{
        $article->text = 'No numbers';
    }
    return true;
}

私はそれをテストしていませんが、動作するはずです

于 2010-05-13T15:59:08.290 に答える