web-dev-qa-db-ja.com

ビューのURL文字変換は書き換えますか?

View の分類用語があり、何らかの理由で用語のフィールドを上書きし、「このフィールドをリンクとして出力」を使用して「手動」でリンクする必要があります。画面に出力する前に transliteration プロセスを通じて '[name]'トークンを処理するにはどうすればよいですか?

3
Artur

ここに私のために働いた回避策があります。

前提条件:Pathautoおよび文字変換モジュール。

  1. 「cleaned_name」などの分類に新しいテキストフィールドを追加します。後のステップで、ビューの実行時にこのフィールドにpathauto_cleanstringを渡した後、用語名を入力します。
  2. 「分類用語:名前」と「分類用語:クリーンアップされた名前」をビューに追加します。 「cleaned_name」フィールドは「Name」フィールドの下にある必要があります。
  3. [名前]フィールドのビュー設定で、[表示から除外]チェックボックスをオンにします。
  4. 「cleaned_name」フィールドのビュー設定で、「結果の書き換え」をクリックして書き換え設定を開き、「このフィールドの出力を書き換える」チェックボックスをオンにします。
  5. これにより、リンクHTMLを作成できるテキストボックスが表示されます。例えば:

    <a href='PUT-YOUR-PATH-HERE/[field_cleaned_name]'>[name]</a>
    
  6. 次に、hook_views_pre_renderを実装します。名前を取得し、pathauto_cleanstringを実行して、cleaned_nameフィールドに保存するという考え方です。私は次のコードを使用しました:

    function YOUR_MODULE_NAME_views_pre_render(&$view) {
        if ($view->name == "MACHINE_NAME_OF_YOUR_VIEW") {
           //dpm($view->result); INSTALL DEVEL MODULE AND UNCOMMENT THIS IF YOU NEED TO SEE WHAT FIELD NAMES TO USE
       module_load_include('inc','pathauto');
       foreach($view->result as $key => &$result) {
          $cleaned_name = pathauto_cleanstring($result->taxonomy_term_data_name);
      $result->field_field_cleaned_name[0]['rendered']['#markup'] =  $cleaned_name;
       } // End of FOREACH statement
       unset($result); 
         }
    }
    

分類にフィールドを追加して、文字変換されたバージョンのフィールドを返す場所を用意するのは、少し醜いです。私が試したもう1つの方法は、nameautoフィールドをビューに2回追加することでした。その1つだけをpathauto_cleanstringで実行し、クリーンなバージョンとクリーンされていないバージョンの両方をトークンとして使用してリンクを構築することを考えました。ただし、これは機能しませんでした。用語名フィールドをビューに2回追加でき、ビューは2つのトークン([name]、[name_1])を作成しますが、バックエンドでは両方のトークンが同じフィールドを指します。このフィールドを変更すると、両方のトークンが変更された値を出力します。

私が試したもう1つの方法は、hook_views_pre_render関数内にリンクhtmlを作成し、それを使用して$ result-> taxonomy_term_data_nameの値を上書きすることでした。これにより、分類にフィールドを追加する必要がなくなります。ただし、ここでの問題は、ビューがHTMLを表示するときにHTMLをエスケープすることです。これを回避する方法を見つけることができませんでした。

1
sja1