5

ページで使用されている背景画像を変更する機能をユーザーに提供しようとしています。

背景画像のリストは、実際には変更されない少数になります。

いくつかの分類用語を追加できると思いました...背景タイプごとに1つ...次に、ページが表示されたときにbodyタグにクラスを適用します。

これは実現可能だと思いますか?もしそうなら、どうやってそれをやろうと思いますか?

ありがとう

サム

4

1 に答える 1

1

編集:質問に対する私の誤解を明確にした後、回答を修正しました

背景画像を (ノード) ページごとに定義する場合、分類ボキャブラリによるアプローチが正しい方法のように思えます。$node用語を CSS で使用できるようにする最も簡単な方法は、変数に直接アクセスできる node.tpl.php ファイルでそれらをクラスとして出力/使用することです。しかし、その場合、それらは結果のマークアップの真ん中にいくらか埋もれてしまい、適切に使用するのが少し難しくなります.

それらを$body_classespage.tpl.php の変数に追加するには、zen_preprocess_page()関数を操作して追加するか、(より良い方法) preprocess_page()zen 関数を使用して独自のモジュール/テーマ関数に追加する必要があります。例として:

function yourModuleOrTheme_preprocess_page(&$vars) {
  // Add classes for body element based on node taxonomy
  // Is this a node page?
  if ('node' == arg(0) && is_numeric(arg(1))) {
    // Yes, extract wanted taxonomy term(s) and add as additional class(es)
    $node = node_load(arg(1));
    $background_vid = yourFuntionToGetTheBackgroundVocabularyId(); // Could be hardcoded, but better to define as variable
    $terms = $node['taxonomy'][$background_vid];
    foreach ($terms as $tid => $term) {
      // NOTE: The following assumes that the term names can be used directly as classes.
      // You might want to safeguard this against e.g. spaces or other invalid characters first.
      // Check the zen_id_safe() function for an example (or just use that, if zen is always available)
      $vars['body_classes'] .= ' ' . $term;
    }
  }
}

注: テストされていないコードには、タイプミスやその他の見落としが含まれている可能性があります。


編集前の元の回答-OPの意図の誤解に基づいて、他の人が同様に誤解した場合に備えて彼女を残しました:)
基本的なアイデアは実行可能に聞こえますが、マイナーなバリエーションをお勧めします:

ユーザーごとに設定を調整できるようにするため、ユーザーが分類用語で自分自身を「タグ付け」できるようにするために、いくつかのフープをジャンプする必要があります。(コアですがオプションの)プロファイルモジュールを有効にして、そこに「リスト選択」タイプの「背景」フィールドを設定する方がはるかに簡単だと思います。フィールドはユーザー ページ (または、カテゴリを指定した場合はそのページの別のタブ) に表示され、ユーザーの選択は後でコードから非常に簡単に利用できるようになります。たとえば、ページ テンプレートのクラスを派生させます。

global $user;
// NOTE: The following call would be the explicit way,
// but usually the profile fields get added to the $user object
// automatically on user_load(), so you might not need to call it at all,
// extracting the values directly from the $user object instead
$profile = profile_load_profile($user);
$background = $user->profile_background
于 2010-05-20T18:24:19.000 に答える