2012-03-02 14 views
1

コンテンツにインデックス付きの検索を実行する必要があります。結果に2つのタグを含める必要があります。タグはランダムな選択でなければなりません。プラットフォームはDrupalです。7.12Drupal:ビューによって返された値のD7の書き換え

search_apiを通じてSOLR検索の結果を管理するビューを作成しました。ビューは必要なコンテンツを返し、意図したとおりに動作するように見えます。私はGlobal:カスタムテキストフィールドをタグエントリのプレースホルダとしていくつか含めました。

私は現在、タグ値をランダム化する要件を管理するソリューションを探しています。ランダム化は問題ではなく、ビューの結果にランダムな値を含める方法が問題です。

現時点でのアプローチは、フックを書き込み、フィールド([nothing][nothing_1])として表示されるプレースホルダを傍受することです。テストコードは次のようになります。

function MODULE_views_pre_render(&$view) 
{ 
    $view_display = $view->display['default']; 
    $display_option = $view_display->display_options; 
    $fields = $display_option['fields']; 
    foreach($view->result as $result) 
    { 
     $fields['nothing']['alter']['text'] = sprintf("test %d", rand(1,9)); 
    } 
} 

ビューがレンダリングされるときに現在プレースホルダに変更がありません。

アプローチや代替ソリューションなどの参考になるものは、現時点では多くの時間を浪費しているため、喜んで受け取ります。フック内からprint_r($view)を呼び出すと、46Mを超えて2つの結果セットのログファイルにダンプされます。

答えて

2

タスクには2つの解決策があります。

最初のアプローチは、テンプレートレベルですべてを行います。ランダム化するビューフィールドのテンプレートを定義します。ディスプレイの詳細設定では、テーマ:情報に進みます。適切なテーマが選択されていることを確認し、自分のフィールドのテンプレート候補を見つけます。彼らは最も一般的なものから最も具体的なものまでリストアップされており、どんなものを選ぶこともできます。 あなたのフィールドの最も具体的なテンプレートの提案は、次のようなものになると思います:views-view-field - [YOR VIEW NAME] - [あなたの表示名] - nothing.tpl.php。テーマテンプレートディレクトリにその名前のファイルを作成します。このテンプレートでは、あなたが望むものをレンダリングすることができます。あなたがこれを変更することができ

print $output; 

print sprintf("test %d", rand(1,9)); 

または何か他に、:)

第二のアプローチ一切はデフォルトで

は、このテンプレートは、唯一のラインを持っていますViews PHPモジュールと一緒に行く。このモジュールでは、あなたが望むことができるカスタムPHPフィールドを追加することができます。モジュールがリリースされていないにもかかわらず、ほとんどのタスクではかなりうまく動作していると思われます。

+0

名誉...これは岩もシンプルも! <?php print "$ outputへのリンク"; ?>とキャッシュをフラッシュすることで、単純化されたソリューションがカプセル化されます。ここで主な機能を追加します。 –

+0

ソリューションを最近見直し、上でアドバイスしたようにViews_PHPモジュールを使用し、モジュール関数を呼び出して、プレゼンテーション層ではなくビュー定義内でロジックを維持しました。リードにもう一度感謝します。 –

0

私はこれを見つけて別の問題を探していて、私が貢献すると思った。

別のモジュールを追加したりテンプレートを変更したりする代わりに、「グローバル:ランダム」のビュー「並べ替え基準」を追加するだけです。

関連する問題