2016-05-10 9 views
0

PHPを使用していくつかのCSSを処理しようとしています。処理したいCSSはページ固有のものなので、index.phpに変数を設定して、その変数が設定されているときにCSSをエコーするようにします。インクルードファイルのPHP変数を使用すると、インクルードファイルでNULLに評価される

のindex.php

<?php 
    $name = 'index'; 
?> 
<?php 
    include 'inc/header.php'; 
?> 

header.phpの

<head> 
     <meta charset="utf-8"> 
     <title></title>  
<?php include 'import.php'; ?> 
</head> 

import.php

<link rel="stylesheet" href="css/styles.css.php" type="text/css" /> 

ヘッダが正しくSでこのファイルのet。 CSSが解釈されます。

styles.css.php

.jumbotron { 
    background-image: url(../img/jumbotron.jpg); 
    <?php 
     if ($name === "index") { 
      echo("height: 50VH;"); /* Does not echo anything*/ 
     } 
     var_dump($name); // Evaluates to NULL 
    ?> 
} 

がどのように私はindex.phpで設定され$nameが、それはだ値に設定されていることを確認することができますか?


EDIT:私の最終的な解決策はstdClassからオブジェクトを作成し、私はオブジェクトへの属性として必要な変数を追加しました。オブジェクトのJSON文字列のBase64であるCSSファイルへのリンクにGETリクエストを入れます。

+1

グローバル$ name –

+2

で試してみましたか?styles.css.phpにindex.phpを含めましたか? –

+0

http://stackoverflow.com/questions/4675932/passing-a-variable-from-one-php-include-file-to-another-global-vs-not – scaisEdge

答えて

3

<link>タグは、相互に関係するPHPページとは完全に独立してHTTPリクエストを行います。したがって、$nameはstyles.css.phpで使用できません。

:スタイルシートstyles.css.php使用 $_GET['name']に続いて

<link rel="stylesheet" href="css/styles.css.php?name=<?php echo $name; ?>" type="text/css" /> 

:それをあなたが得る変数として$nameを渡すために、スタイルシートにこのようなものをリンクする必要があり、この方法を行うには

if ($_GET['name'] === "index") { 
     echo("height: 50VH;"); 
    } 
+0

同じことを考えていたので、このようにすることができます –

+0

修正しました!どうもありがとうございました :-) – MegaXLR

1

問題は、レンダリングされたhtml内のstyles.css.phpにリンクしているということです。これは、ページが別のリクエストで取得されることを意味します(ページの検査時と同じように)。この要求はindex.phpを決して通過しないので、$name変数は設定されません。

CSSをレンダリングしたHTMLにスタイルブロック内に含めることをお勧めします。それはこれまで、あなたのimport.phpを変えるのと同じくらい簡単でなければなりません:

<style> 
<?php include 'css/styles.css.php' ?> 
</style> 

これは、ブラウザが作るために持っているリクエストの数を減らすという利点も有しているため、ページをスピードアップする必要があります。

これは非常に標準的なCSSの使用方法ではありません。あなたのページの名前を示すbodyタグに何らかのid(またはデータ属性)を追加する方が良いと思います。 CSSファイル(つまり実行されませんトラフPHP、単に標準のCSSファイル)では、あなたはこのような何かを行うことができます:

.jumbotron { 
    background-image: url(../img/jumbotron.jpg); 
} 
#index .jumbotron { 
    height: 50vh; 
} 
+0

oops、thx @mike – Pevara

0

styles.css.php$name変数についてを知らないないファイル - それはなぜそれがですvar_dump($name)を実行するとnullです。 <link>を使用すると、style.css.phpの内容を単純なhtml/cssとして出力するだけです。 include_once('styles.css.php')またはrequire_once('styles.css.php')のいずれかを実行して、$name変数を正しく評価できるようにする必要があります。

0

index.phpによって生成されたHTMLページがあります。これは、外部スタイルシートを行<link rel="stylesheet" href="css/styles.css.php" type="text/css" />にロードするようにブラウザに指示します。ブラウザによる外部データのロードは全く新しい要求です。したがって、スタイルシートを生成するPHPファイルは、HTMLページを提供するスクリプトで宣言された変数について何も知らない。

実際、変数$ nameは設定されていません。 var_dumpを参照して引数として与えられているので(組み込み関数は参照によって引数を取ると宣言されています)、参照結果はnullになります。

あなたは、唯一のPHPスクリプトで異なるスタイルシートを区別クエリとしてURLにGETパラメータを追加したい場合は、次の

<link rel="stylesheet" href="css/styles.css.php?name=<?PHP echo $name;?>" type="text/css" /> 

syles.css.phpにそのパラメータを取る:

<?php $name = isset($_GET['name']) ? $_GET['name'] : ''; ?> 
関連する問題