###実現したいこと
2つある.refine
を1つにまとめ、cookieに応じたチェックを入れたいです。
###該当のソースコード
現在、2つの機能があります。
➀list
というcookieに応じて、2つある.refine
のどちらかに.current
を付与し、CSSでそれ(.refine.current
)だけを表示しています。
➁さらにpostrefine
とuserrefine
というcookieに応じてチェックを入れています。
そこで質問です。
この2つの.refine
を1つにまとめたいと思ってまして、そのときに➀のようなクラス付与は不要になるわけですが、➁のチェックを入れる方法がわかりません。
html
1 2<?php 3// cokie「list」の値に応じて、class「.current」を出力する。 4$cookie_list=filter_var_array($_COOKIE,["list"=>FILTER_DEFAULT]); 5$title_list=(!is_null($cookie_list["list"]) and $cookie_list["list"]!=="")?$cookie_list["list"]:"post"; 6$class_list=['post'=>'', 'user'=>'']; 7$class_list[$title_list]="current"; 8// 記事の絞り込みで、cookie「postrefine」の値に「checked」を出力する。 9$cookie_postrefine=filter_var_array($_COOKIE,["postrefine"=>FILTER_DEFAULT]); 10$checked_postrefine=[ 11 "follow_post"=>preg_match("/(^| )follow_post(?= |$)/",$cookie_postrefine["postrefine"])?"checked":"", 12 "follow_user"=>preg_match("/(^| )follow_user(?= |$)/",$cookie_postrefine["postrefine"])?"checked":"", 13]; 14// ユーザーの絞り込みで、cookie「userrefine」の値に「checked」を出力する。 15$cookie_userrefine=filter_var_array($_COOKIE,["userrefine"=>FILTER_DEFAULT]); 16$checked_userrefine=[ 17 "follow_post"=>preg_match("/(^| )follow_post(?= |$)/",$cookie_userrefine["userrefine"])?"checked":"", 18 "follow_user"=>preg_match("/(^| )follow_user(?= |$)/",$cookie_userrefine["userrefine"])?"checked":"", 19]; 20?> 21 22<div> 23 <h4>ここにはいずれかの「.refine」が表示されます(「記事を絞り込む」か「ユーザーを絞り込む」か)</h4> 24 25 <div class="refine <?=$class_list["post"];?>"> 26 <p>記事を絞り込む</p> 27 <label> 28 <span>「フォロー中の記事」を表示する</span> 29 <input type="checkbox" value="postrefine_follow_post" <?=$checked_postrefine["follow_post"];?>> 30 </label> 31 <label> 32 <span>「フォロー中のユーザーが、執筆した記事」を表示する</span> 33 <input type="checkbox" value="postrefine_follow_user" <?=$checked_postrefine["follow_user"];?>> 34 </label> 35 </div> 36 37 <div class="refine <?=$class_list["user"];?>"> 38 <p>ユーザーを絞り込む</p> 39 <label> 40 <span>「フォロー中の記事を、執筆したユーザー」を表示する</span> 41 <input type="checkbox" value="userrefine_follow_post" <?=$checked_userrefine["follow_post"];?>> 42 </label> 43 <label> 44 <span>「フォロー中のユーザー」を表示する</span> 45 <input type="checkbox" value="userrefine_follow_user" <?=$checked_userrefine["follow_user"];?>> 46 </label> 47 </div> 48 49</div> 50 51<style> 52.refine:not(.current){display:none} 53.refine.current{display:block;} 54</style>
###解決のポイント
この2つの.refine
を1つにまとめるために必要はことは
・value
の値
・checked
の有無
・span
のテキスト
を変数として処理することだと思います。
###spanとvalueはできる
まずspan
は問題なさそうなのでスルーします。
そしてvalue
は次のようにできるでしょう。
value="postrefine_follow_post"
を
value="<?=$title_list;?>refine_follow_post"
とすれば、
.refine
を1つにまとめても問題ありません。
###checkedの有無ができない
しかしchecked
の有無ができません。
<?=$checked_postrefine["follow_post"];?>
を
<?=$checked_<?=$title_list;?>refine["follow_post"];?>
としても、
おかしなことになってしまい、.refine
を1つにまとめることはできません。
ここで躓いているのですが、どのようにしたら2つある.refine
を1つにまとめながら、cookieに応じたチェックを入れることができるでしょうか?
長くなってしまって大変恐縮です。どなたか解決の糸口をご教示頂けましたら幸いでございます。よろしくお願い致します。