web-dev-qa-db-ja.com

文字列の上書きは特定のページに制限されていますか?

サイトのさまざまな領域で Fivestar モジュールを使用しています。評価ウィジェットの下に「x票」が表示されます。

サイトの一部のエリアでは、「投票」を「レビュー」に変更したいと考えています。どうすればそれができますか?

1
uwe

'votes'テキストはtheme_fivestar_summary()関数にハードコードされているようです( 'includes/fivestar.theme.inc'の264行目あたり)。 format_plural()を介して実行されます(したがって、最終的には文字列オーバーライドで使用できるようになります)が、文字列オーバーライドの複雑な条件/コンテキストを定義する方法がわかりません。

これを解決するために私が見ることができる唯一の(簡単な)方法は、そのテーマ関数を独自のテーマに再実装し、完全な関数コードをtheme_fivestar_summary()からMYTHEME_fivestar_summary()にコピーし、変更する特定のテキストを変更するためのコンテキスト条件。

あなたは基本的にこれらの行を変更することを検討しているでしょう:

if (isset($votes) && !(isset($user_rating) || isset($average_rating))) {
  $output .= ' <span class="total-votes">'. format_plural($votes, '<span>@count</span> vote', '<span>@count</span> votes') .'</span>';
  $div_class = 'count';
}
elseif (isset($votes)) {
  $output .= ' <span class="total-votes">('. format_plural($votes, '<span>@count</span> vote', '<span>@count</span> votes') .')</span>';
}

に:

$context = MYTHEME_get_fivestar_context();
if ($context == 'something') {
  $metric = 'review';
}
else if ($context == 'something_else') {
  $metric = 'vote';
}

if (isset($votes) && !(isset($user_rating) || isset($average_rating))) {
  $output .= ' <span class="total-votes">'. format_plural($votes, '<span>@count</span> ' . $metric, '<span>@count</span> ' . $metric . 's') .'</span>';
  $div_class = 'count';
}
elseif (isset($votes)) {
  $output .= ' <span class="total-votes">('. format_plural($votes, '<span>@count</span> ' . $metric, '<span>@count</span> ' . $metric . 's') .')</span>';
}

それは特にきれいではありませんが、それを行うための最も効率的な方法だと思います。

1
Clive