質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1120閲覧

cookieがあったらクラス付与する(PHP)

ikkouenosenpai

総合スコア16

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/01/08 20:32

PHPでcookieに応じてクラス付与したいんですけど、良い方法を教えてもらえませんでしょうか?

たとえば
if ( $_COOKIE["title"] == 'title1' ){}
のときに、

下のように「#title1」に「.curernt」を付けたいんです。

html

1<div class="PageTitle"> 2<h1 id="title1" class="current">title1</h1> 3<h1 id="title2" class="">title2</h1> 4</div>

で、今自分なりに考えたのが、下の感じなんですが、、、これじゃ何かかっこ悪い感じがするんです。

php

1<div class="PageTitle"> 2<?php title_cookie(); ?> 3</div> 4 5<?php 6function title_cookie(){ 7// cookieありなら値に応じて .current を付与 8if (isset($_COOKIE["title"])){ 9if ( $_COOKIE["title"] == 'title1' ){ 10echo '<h1 id="title1" class="current">title1</h1><h1 id="title2">title2</h1>'; 11} 12elseif ( $_COOKIE["title"] == 'title2' ){ 13echo '<h1 id="title1">title1</h1><h1 id="title2" class="current">title2</h1>'; 14} 15// cookieなしなら #title1 に .current を付与 16}else{ 17echo '<h1 id="title1" class="current">title1</h1><h1 id="title2">title2</h1>'; 18} 19} 20?>

上のようにh1タグまるごとPHPで出すんじゃなくて、できれば下の感じでクラス出力の部分だけPHPにしたいんです。

php

1<div class="PageTitle"> 2<h1 id="title1" class="<?=xxx?>">title1</h1> 3<h1 id="title2" class="<?=xxx?>">title2</h1> 4</div>

良い方法があったら教えてください。宜しくお願いします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/08 23:48

まあ、h1は基本htmlに一つだと思う タイトルと同じ扱い(主見出し)
guest

回答3

0

ベストアンサー

PHP

1<?PHP 2$cookie=filter_var_array($_COOKIE,["title"=>FILTER_DEFAULT]); 3$class=["title1"=>"","title2"=>""]; 4$class[$cookie["title"]]=" class=\"current\""; 5?> 6<div class="PageTitle"> 7<h1 id="title1"<?=$class["title1"];?>>title1</h1> 8<h1 id="title2"<?=$class["title2"];?>>title2</h1> 9</div>

デフォルト値指定

PHP

1<?PHP 2$cookie=filter_var_array($_COOKIE,["title"=>FILTER_DEFAULT]); 3$title=(!is_null($cookie["title"]) and $cookie["title"]!=="")?$cookie["title"]:"title1"; 4$class=["title1"=>"","title2"=>""]; 5$class[$title]=" class=\"current\""; 6?> 7<div class="PageTitle"> 8<h1 id="title1"<?=$class["title1"];?>>title1</h1> 9<h1 id="title2"<?=$class["title2"];?>>title2</h1> 10</div>

投稿2019/01/09 00:30

編集2019/01/09 01:08
yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikkouenosenpai

2019/01/09 00:43

いつもお答えいただきありがとうございます。そしてまたもやコードに書いただけで分かりにくてすみません。「// cookieありなら値に応じて .current を付与」だけでなく、「// cookieなしなら #title1 に .current を付与」にもしたいんですが、その場合ですとどうなりますか?また後ででも全然大丈夫です。
yambejp

2019/01/09 01:09

デフォについて追記しておきました
ikkouenosenpai

2019/01/09 09:44

ご連絡遅れてしまってすみません!めっちゃ嬉しいです!どうもありがとうございます!
guest

0

三項演算子を使えばスッキリ書けるとは思いますが、出力結果は同じなのでカッコ悪いとかどうとかは気にしなくても良いと思いますよ。

投稿2019/01/08 23:15

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikkouenosenpai

2019/01/09 00:45

参考演算子使うとたしかに今の関数はスッキリしそうですけど、でもクラス出力の部分だけPHPにっていうのは難しいように思うんですけど、そんなことないです?
ikkouenosenpai

2019/01/09 00:45

参考演算子使うとたしかに今の関数はスッキリしそうですけど、でもクラス出力の部分だけPHPにっていうのは難しいように思うんですけど、そんなことないです?
m.ts10806

2019/01/09 00:54

参考ではなく三項ですね。 関数にhtmlまで含んでしまってるから難しくなってるだけです。 というかこれくらいは関数にするまでもないと思います。
guest

0

まあ別の観点

ナビの見出しとしてなら
id,class,textが違うので関数化をする

投稿2019/01/08 23:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問