0

多くの技術コンテンツを含む PHP Web サイトがあります。Web サイトで使用されているいくつかのあいまいな用語の用語集を作成しました。ユーザーがこれらの用語の 1 つにカーソルを合わせるたびに、ツールヒント (またはヒント バブルなど、名前が何であれ) が表示されるようにしたいと考えています。

私は、私が望むことをしているように見えるjQuery拡張機能をたくさん見つけましたがspan、特定のクラスにタグを設定して、各用語インスタンスに手動でリンクする必要があります。

これを自動的に実行したい。どのように進めればよいですか?

4

2 に答える 2

3

このサーバー側で行うことをお勧めします。ページに多くの要素がある場合、jQueryプラグインはページの速度を低下させます。あなたは次のようなものを得るかもしれません:

$content = "<p>Lorem ajax ipsum</p>";

$terms = array(
    'ajax' => 'Asynchronous JavaScript and XML',
);

foreach ($terms as $term => $explained) {
    $content = str_replace($term, '<acronym title="' . htmlspecialchars($explained) . '">' . $term . '</acronym>', $content);
}
于 2012-11-13T15:32:19.633 に答える
0

私はsroesの回答を作成しましたが、2 つの問題を解決する必要がありました。

  • 部分的な単語、つまり「rap」を定義するとき、「Those raptors」内で置き換えたくない
  • self の置換、つまり、「song」の定義に「rap」という単語が含まれている場合、再び置換され、定義の上に定義が作成されます。

この例は、ネストされた foreach ループを削除する正規表現またはその他の方法で改善される可能性があります。提案を歓迎しますが、stritr のシリアル置換に注意してください。

function add_glossary_tooltips($text) {
    global $glossary;
    if(empty($glossary))
        return $text;
    // Create array of replacements, using only individual
    // words surrounded by spaces or other punctuation

    $endings = array(
        '.',
        ' ',
        ',',
        '!',
        '-',
        '?',
        '&',
    );
    $beginnings = array(
        '-',
        ' ',
    );
    $replacements = array();
    foreach ($glossary as $entry) {
        $clean_defintion = htmlentities(strip_tags($entry['definition']), ENT_QUOTES);
        $replacement = "<abbr
                class='tooltip'
                title='".$clean_defintion."'
            >"
            .$entry['glossary_word']
            ."</abbr>";
        foreach ($endings as $ending) {
            foreach ($beginnings as $beginning) {
                $replacements[$beginning.$entry['glossary_word'].$ending] = $beginning.$replacement.$ending;
            }
        }
    }

    $text = stritr($text, $replacements);

    return $text;
}

これは、大文字と小文字を区別しないカスタム strstr によってサポートされています。(私の作品ではありません)

function stritr($string, $one = NULL, $two = NULL){
/*
stritr - case insensitive version of strtr
Author: Alexander Peev
Posted in PHP.NET
*/
    if(  is_string( $one )  ){
        $two = strval( $two );
        $one = substr(  $one, 0, min( strlen($one), strlen($two) )  );
        $two = substr(  $two, 0, min( strlen($one), strlen($two) )  );
        $product = strtr(  $string, ( strtoupper($one) . strtolower($one) ), ( $two . $two )  );
        return $product;
    }
    else if(  is_array( $one )  ){
        $pos1 = 0;
        $product = $string;
        while(  count( $one ) > 0  ){
            $positions = array();
            foreach(  $one as $from => $to  ){
                if(   (  $pos2 = stripos( $product, $from, $pos1 )  ) === FALSE   ){
                    unset(  $one[ $from ]  );
                }
                else{
                    $positions[ $from ] = $pos2;
                }
            }
            if(  count( $one ) <= 0  )break;
            $winner = min( $positions );
            $key = array_search(  $winner, $positions  );
            $product = (   substr(  $product, 0, $winner  ) . $one[$key] . substr(  $product, ( $winner + strlen($key) )  )   );
            $pos1 = (  $winner + strlen( $one[$key] )  );
        }
        return $product;
    }
    else{
        return $string;
    }
}/* endfunction stritr */
于 2015-06-27T07:50:29.913 に答える