質問: ### 実現したいこと 2つある`.refine`を1つにまとめ、cookieに応じたチェックを入れたいです。 ### 該当のソースコード 現在、2つの機能があります。 ➀`list`というcookieに応じて、2つある`.refine`のどちらかに`.current`を付与し、CSSでそれ(`.refine.current`)だけを表示しています。 ➁さらに`postrefine`と`userrefine`というcookieに応じてチェックを入れています。 そこで質問です。 この2つの`.refine`を1つにまとめたいと思ってまして、そのときに➀のようなクラス付与は不要になるわけですが、➁のチェックを入れる方法がわかりません。 ``` FILTER_DEFAULT]); $title_list=(!is_null($cookie_list["list"]) and $cookie_list["list"]!=="")?$cookie_list["list"]:"post"; $class_list=['post'=>'', 'user'=>'']; $class_list[$title_list]="current"; // 記事の絞り込みで、cookie「postrefine」の値に「checked」を出力する。 $cookie_postrefine=filter_var_array($_COOKIE,["postrefine"=>FILTER_DEFAULT]); $checked_postrefine=[ "follow_post"=>preg_match("/(^| )follow_post(?= |$)/",$cookie_postrefine["postrefine"])?"checked":"", "follow_user"=>preg_match("/(^| )follow_user(?= |$)/",$cookie_postrefine["postrefine"])?"checked":"", ]; // ユーザーの絞り込みで、cookie「userrefine」の値に「checked」を出力する。 $cookie_userrefine=filter_var_array($_COOKIE,["userrefine"=>FILTER_DEFAULT]); $checked_userrefine=[ "follow_post"=>preg_match("/(^| )follow_post(?= |$)/",$cookie_userrefine["userrefine"])?"checked":"", "follow_user"=>preg_match("/(^| )follow_user(?= |$)/",$cookie_userrefine["userrefine"])?"checked":"", ]; ?> ここにはいずれかの「.refine」が表示されます(「記事を絞り込む」か「ユーザーを絞り込む」か) "> 記事を絞り込む 「フォロー中の記事」を表示する > 「フォロー中のユーザーが、執筆した記事」を表示する > "> ユーザーを絞り込む 「フォロー中の記事を、執筆したユーザー」を表示する > 「フォロー中のユーザー」を表示する > ``` ### 解決のポイント この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に応じたチェックを入れることができるでしょうか? 長くなってしまって大変恐縮です。どなたか解決の糸口をご教示頂けましたら幸いでございます。よろしくお願い致します。
回答: 結論からいうと、.currentというクラス名付与によって要素を見せ隠しするなら、最初からif文をhtmlに埋め込めば解決すると思います。 ``` if(表示を制御する判定文)):?> "> 記事を絞り込む 「フォロー中の記事」を表示する > 「フォロー中のユーザーが、執筆した記事」を表示する > else: ?> "> ユーザーを絞り込む 「フォロー中の記事を、執筆したユーザー」を表示する > 「フォロー中のユーザー」を表示する > endif; ?> ``` あと、preg_matchの中の正規表現が本当に実現したい通りになっていますでしょうか。