0

既に待機中のテンプレート用のテンプレート エンジンを作成しています。

これがどれほど強化されているかについて言う前に。私はそれを行うためにお金を払っていますが、なぜ彼らが独自のものを持っていると主張しているのかわかりません (おそらく、テンプレートは既に作成されており、マークが付けられているためです)。

彼らはすでに次のようにテンプレートをマークしています:

index.html

<html>
<head><title> [title] </title></head>
<link href="css/style.css" rel="stylesheet" type="text/css" />

<body>
<img class="header" src="images/header.jpg" />
[contents]
</body>

</html>

私は非常に単純な検索と置換のアプローチを使用していますが、十分に機能します。

index.php

$e = new tengine ;
$e->load_template('index.html');// basically file_get_contents 

$e->replace('title' , 'zzzzzzz'); 

$e->replace( 'contents' , 'xxxx');

$e->show();

それらが同じディレクトリにある間は正常に機能します。

ここで、テンプレートと呼ばれる別のディレクトリにアセットを移動したいと考えています。

したがって、次のようにテンプレートを呼び出す必要があります。

index.php

    $e->load_template('template/index.html');

テンプレート (index.php) をレンダリングするページは、テンプレート ファイル (index.html) と同じディレクトリにありません。

まだ機能しますが、テンプレート ページにあるすべてのスタイル、画像、および .js が失われます。これらはテンプレート ディレクトリにあり、その 1 つ上のディレクトリにページをレンダリングするためです。

回避策はありますか? テンプレートは既に作成されており、ある種の GLOBALbase_urlのようなものを作成し、すべての画像と .js/.css リンクを変更することは論外です。

4

9 に答える 9

3

また、要求されたファイルが存在する場合を除いて、「templates/」サブディレクトリへのすべての要求を書き換える .htaccess ファイルを作成することをお勧めします (そのため、webroot 内の index.php またはその他のファイルは引き続き適切に提供されます)。

apache2 の「mod_rewrite」を有効にします。シェルで次のように入力します。

a2enmod rewrite

Web アプリケーションのルート ディレクトリに「.htaccess」という名前のファイルを次の内容で配置します。

RewriteEngine On

# If the requested file does not exist redirect it to the "template/" subdirectory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.*)$ template/$1 [L]

「css/style.css」をリクエストすると、「RewriteCond」ステートメントは「css/style.css」がないことに気づき、リクエストを「template/css/style.css」に書き換えます。しかし、「index.php」をリクエストすると、書き換え条件はそのような名前のファイルがあることに気づき、通常どおりに提供します。

于 2013-02-28T09:56:04.467 に答える
2

.htaccess を使用して書き換えエンジンを使用できます

たとえば、css フォルダーの書き換えルールを作成し、それをhttp://www.mysite.com/css/にアドレス指定します。

書き換えモジュールを使用すると、何らかの方法で処理できると確信しています。

于 2013-02-27T06:12:50.513 に答える
2

相対パスではなく、メディア ファイルへの絶対パスを使用してください。したがって、次のようなものを使用するのではなく、

 <img src='../assets/img/temp.png' />

また

使用する

 <img src='/assets/img/temp.png' />

そうすれば、処理がどこで行われるか、テンプレートがどこにあるか、ファイルがどのサーバーディレクトリから呼び出されるかなどはまったく問題になりません。それらを心のコンテンツに移動することができますが、違いはありません。

于 2013-02-26T08:20:29.253 に答える
1

アセットのインクルードは、テンプレートエンジンでも行う必要があることをお勧めします。

だから書く代わりに

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

テンプレートで、次のようにします

[stylesheet css/style.css]

次に、エンジンで、追加されたアセットパスを使用して適切なHTMLを作成します。または、相対ディレクトリ内のcssファイルをルートディレクトリにコピーします。

于 2013-03-01T10:21:35.337 に答える
1

dirname( FILE ).'/example.php';はどうですか?

dirnameファイルを使用すると、ファイルがある場所に正確にいます

于 2013-02-20T21:18:15.750 に答える
1

テンプレートの html ヘッドを変更するオプションがある場合は、baseタグを使用して、ドキュメント内のすべての相対 URL のベース URL を変更できます。

<head>
<base href="http://yourdomain/template/">
...
</head>

相対パスを使用する前に、一番上に挿入することを忘れないでください。

于 2013-02-26T09:20:46.220 に答える
1

HTML には、必要なことを行うための簡単なハックがあります。ハックはベース URL を介して行われます。追加のタグ リンクを次のように追加する必要があります。

<head>
      <base href="domin.com/directory">
</head>

基本htmlタグを使用すると、すべてに長所と短所があることに注意してください

プロ:

  • .htaccess の使用禁止

  • ファイルのコピーを使用しない

  • ドキュメントの静的表現

短所:

  • アンカー、リンク、または href を使用するものを含む、提供されたベース href にすべての href タグをリンクします。
于 2013-02-27T10:17:04.033 に答える
0

テンプレートディレクトリから.css/.jsにアクセスしないため、テンプレートのリンクは問題ではないと思います。ここで重要なのは、それらをレンダリングするファイルの場所です。これは、リンクがレンダリングされた後に読み取られるためです。index.phpが以前と同じディレクトリにある限り、テンプレート内のリンクは引き続き正常に機能します。

于 2013-03-01T06:48:14.290 に答える