0

Smartyテンプレートの構造がかなり複雑なサイトがあります。この質問では、{include}表示されているデータに応じて、オプションで含まれている1つ以上の内部テンプレートを(含む)外部テンプレートがあるとします。

Outer Template (with <html>, <head>, and <body> tags)
    - Inner Template A (various content)
    - Inner Template B (more content)

場合によっては、これらの内部テンプレートの1つが追加のCSSファイルを参照する必要があります。<head>効率を上げ、FOUCを回避するために、これらをタグ内に含めることをお勧めします。適切なタグを内Inner Template Aに追加する変数を設定することは可能ですか?<link><head>Outer Template

同様のことを行うモジュールを作成した人を見つけることができましたが、私の場合、テンプレートから必要な変数を設定して機能させる方法がわかりません。Smarty3を使用しています。

4

3 に答える 3

1

私はしばらく前に同様の問題を抱えていました。私の解決策は多分汚いですが多分それはあなたを助けるかもしれません。

$css = '<link rel="stylesheet" type="text/css" href="/css/file.css">';
$smarty->registerFilter('output',create_function('$output','return preg_replace(\'/(<\/head>)/i\',\''.$css.'$1\',$output,1);'));

これを関数でラップすると、どこからでもヘッドセクションにcssを追加できます。

于 2013-01-09T12:49:40.023 に答える
1

アイデア1:

テンプレートAまたはBの表示に使用するのと同じロジックを頭のスタイルシートに巻き付けます。

アイデア2:

テンプレート1(トップレベル):

<link rel="stylesheet" type="text/css" href="whatevs1">
{block name="childStyles"}
{/block}

テンプレート2(子テンプレート):

{block name="childStyles"}
<link rel="stylesheet" type="text/css" href="whatevs2">
{/block}

補足:

HEADのスタイルシートにインクルードを使用してW3に準拠したいことは理解していますが、IE7でも、本文にインクルードを含めてもHTMLが破損することはありません...

于 2013-01-08T17:47:06.640 に答える
0

私は数年前に同様の障害に遭遇しました。Smartyテンプレートはほとんどの場合phpコードで埋め尽くされているため、私のソリューションでは、この目的のためにphpで特別な変数/配列を宣言し、ヘッドテンプレート/外部テンプレートで配列をループします。

例:

$your_special_css = array('css1.css', 'css2.css');

コード内のどこか...

$your_special_css[] = 'css3.css';

...そしてそれをテンプレートに渡します:

$your_smarty_template->assign('your_css', $your_special_css);

次に、外側のテンプレートは次のようになります。

<head>
 ...
{foreach $your_css as $css}
    <link rel="stylesheet" type="text/css" href="/css/{$css}">
{/foreach}
...
</head>

jscriptファイルでも同じように機能します。

于 2013-01-08T17:53:17.773 に答える