ページで使用されている背景画像を変更する機能をユーザーに提供しようとしています。
背景画像のリストは、実際には変更されない少数になります。
いくつかの分類用語を追加できると思いました...背景タイプごとに1つ...次に、ページが表示されたときにbodyタグにクラスを適用します。
これは実現可能だと思いますか?もしそうなら、どうやってそれをやろうと思いますか?
ありがとう
サム
ページで使用されている背景画像を変更する機能をユーザーに提供しようとしています。
背景画像のリストは、実際には変更されない少数になります。
いくつかの分類用語を追加できると思いました...背景タイプごとに1つ...次に、ページが表示されたときにbodyタグにクラスを適用します。
これは実現可能だと思いますか?もしそうなら、どうやってそれをやろうと思いますか?
ありがとう
サム
編集:質問に対する私の誤解を明確にした後、回答を修正しました
背景画像を (ノード) ページごとに定義する場合、分類ボキャブラリによるアプローチが正しい方法のように思えます。$node
用語を CSS で使用できるようにする最も簡単な方法は、変数に直接アクセスできる node.tpl.php ファイルでそれらをクラスとして出力/使用することです。しかし、その場合、それらは結果のマークアップの真ん中にいくらか埋もれてしまい、適切に使用するのが少し難しくなります.
それらを$body_classes
page.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