0

これの最初の部分が主観的なものであることは承知していますが、人々が使用するいくつかの異なるテクニックを聞きたいです. これは 2 つの部分からなる質問です: PHP で複雑な複数行の文字列に何を使用しますか? あと、smartyと合成型の関係は使えますか?

質問 1: ヒアドキュメントと "." があることは知っています。オペレーター。もしあれば、新鮮で読みやすいアイデアを探しています。

質問 2: もっと具体的に言うと、smarty でやりたいことは次のとおりです。

テンプレート base.tpl があるとします。

<html>
<head><title></title></head>
<body>
{$main_content}
</body>
</html>

テンプレート、つまり $main_content を表す別のテンプレート、たとえば main.tpl をチェーンできますか?

<div id="header">$header</div>
<div id="container">
<h1>{$first_header}</h1>
<p>{$first_paragraph}</p>
<h1>{$second_header}</h1>
<p>{$second_paragraph}</p>

私はwhatever.phpで1つのテンプレートを別のテンプレートにロードしたいので、つまり:

// ... including smarty and all other boiler plate things ...

$smarty -> assign('first_header', "Foo");
$smarty -> assign('first_paragraph', "This is a paragraph");
$smarty -> assign('second_header', "Bar");
$smarty -> assign('second_paragraph', "This is another paragraph");

$main_content = $smarty->load('main.tpl');
$smarty -> display('base.tpl');

smarty に「テンプレート継承」があることは知っていますが、詳しくありません。これと同様の機能を提供できますか?

注: ヒアドキュメントの最大の問題は、html の構文を強調表示できないことだと思います (ヒアドキュメント文字列で html を指定した場合)。強調表示がないと、smarty を通過させたい html は非常に読みにくく、smarty の目的に反します。

4

2 に答える 2

2

テンプレート内でテンプレート (フラグメント) を呼び出すには、{include} を使用する必要があります。

http://www.smarty.net/docsv2/en/language.function.include.tpl

<html>
<head>
  <title>{$title}</title>
</head>
<body>
{include file='page_header.tpl'}

{* body of template goes here, the $tpl_name variable
   is replaced with a value eg 'contact.tpl'
*}
{include file="$tpl_name.tpl"}

{include file='page_footer.tpl'}
</body>
</html>

含まれているテンプレートに変数を渡す:

{include file='links.tpl' title='Newest links' links=$link_array}
{* body of template goes here *}
{include file='footer.tpl' foo='bar'}

複数行の文字列に関しては、次のパターンを使用する傾向があります。

$my_string = "Wow, this is going to be a long string. How about "
           . "we break this up into multiple lines? "
           . "Maybe add a third line?";

おっしゃる通り、主観です。簡単に読める限り、快適に感じるものは何でも...

于 2012-10-18T03:10:16.003 に答える
0

今朝、テンプレートの継承に関するドキュメントを見つけました...

上記の例を拡張するには、基本レイアウト (base.tpl) を使用できます。

<html>
<head><title>{$title|Default="title"}</head>

<body>

<nav>{block name=nav}{/block}</nav>

<div id="main">{block name=main}Main{/block}</div>

<footer>Copyright information blah blah...</footer>

</body>
</html>

新しいバージョンの smarty (home.tpl) を使用して、テンプレートを拡張し、ブロックをオーバーライドできるようになりました。

{extends file=base.tpl}

{block name=nav}
          <ul style="list-style:none">
            {foreach $links as $link}
              <li><a href="{$link.href}" target="_blank">{$link.txt}</a></li>
            {/foreach}
          </ul>
{/block}

{block name=main}
    {foreach $paragraphs as $p}
        <h2>{$p.header}</h2>
        <p>{$p.content}</p>
    {/foreach}
{/block}

http://www.smarty.net/inheritance

于 2012-10-18T14:02:53.217 に答える