Smarty一般块代码继承

时间:2015-05-03 15:14:04

标签: html templates inheritance smarty block

从父文件到子文件的块内容是否真实? 例如,我有3个文件parent.tpl& first-child.tpl& second-child.tpl

父包含该代码:

<div>
    {block name='greetings'}{/block}
</div>

First-Child包含:

{extends file="parent.tpl"}
{block name='greetings'}
    <h1>Hello! I'm child</h1>
{/block}

Second-Child包含与第一个问候语块相同的内容(仅限同一文本),但不是h1标记,而是使用第二个孩子h4标记:

{extends file="parent.tpl"}
{block name='greetings'}
    <h4>Hello! I'm child</h4>
{/block}

我不想在每个孩子中复制该文本Hello! I'm child,而是将其放入自己的块中。 它可以这样做:创建新文件greeting_text.tpl并将它们包含在每个子节点中,但我不想为自己的文件分配。我试图将该文本声明为parent.tpl

...
{block name='greetings_text'}Hello! I'm child{/block}

从孩子那里得到:

{extends file="parent.tpl"}
{block name='greetings'}
    <h1>{block name='greetings_text'}{/block}</h1>
{/block}

和第二个孩子:

{extends file="parent.tpl"}
{block name='greetings'}
    <h4>{block name='greetings_text'}{/block}</h4>
{/block}

但我明白从父母到孩子的内容不可能是block。或者也许我错了。 请给我建议,除了将greeting_text放入他们自己的文件并将其包含在儿童中之外,我该怎么做?谢谢!

已编辑:

抱歉,以前的问题文字有点不正确(没有完全描述我正在尝试做的事情)

如何编写 sofl ,它适用于append构造。但问题是,我有3个文件,其中两个可扩展(layout.tpl,default.tpl和page.tpl)

layout.tpl

<div class="layout">
  {block name="content"}{/block}
</div>

default.tpl

{extends file="layout.tpl"}

{block name='menu'}
  <ul>
      <li>Link 1</li>
      <li>Link 2</li>
      <li>Link 3</li>
  </ul>
{/block}

page.tpl

{extends file="default.tpl"}

{block name="content"}
  <div class="first-page-example">
      {block name='menu' append}{/block}

      <span>I'm text only for first page....</span>
  </div>
{/block}

我启动了page.tpl$smarty->display('page.tpl')),我希望从menu获得default.tpl给每个孩子(page.tpl,ps可以有很多孩子page1.tpl,page2.tpl,...但对于所有这些,需要从default.tpl放置默认菜单并将所有内容放到layout.tpl,如content。那么我怎么能用block构造呢?请,任何建议。

1 个答案:

答案 0 :(得分:2)

使用prependappend保留父块的内容。 http://www.smarty.net/docs/en/language.function.block.tpl

<div>
    {block name='greetings'}<h4>Hello! I'm child</h4>{/block}
</div>

{extends file="parent.tpl"}
{block name='greetings' append}
    <h5>...here I am</h5>
{/block}

更新的答案

看起来很狡猾。您可以使用多个块contentmenu中的阻止default.tpl没有展示位置。

一些可能性

<强> layout.tpl

<div class='layout'>
  {block name='content'}{/block}
</div>

<强> default.tpl

{extends file='layout.tpl'}

{block name='content'}
    {block name='menu'}
      <ul>
          <li>Link 1</li>
          <li>Link 2</li>
          <li>Link 3</li>
      </ul>
    {/block}
    {block name='actualContent'}{/block}
{/block}

<强> page.tpl

{extends file='default.tpl'}

{block name='menu'}
    <div class="first-page-example">
        {$smarty.block.parent}
    </div>
{/block}
{block name='actualContent'}
    <span>I'm text only for first page....</span>
{/block}

我对项目的背景知之甚少,但我个人不会在page.tpl中添加太多结构。所以我的替补看起来像这样

<强> layout.tpl

<div class='layout'>
  {block name='content'}{/block}
</div>

<强> default.tpl

{extends file='layout.tpl'}
{block 'content'}
    <header>
        <nav>
        {block 'menu'}
            <ul>
                <li>Link 1</li>
                <li>Link 2</li>
                <li>Link 3</li>
            </ul>
        {/block}
        </nav>
    </header>
    <main>
        {block 'actualContent'}comming soon...{/block}
    </main>
{/block}

<强> page.tpl

{extends file='default.tpl'}
{block 'actualContent'}
    <article>I'm text only for first page....</article>
{/block}

这并不能完全回答你的问题,但可能有助于我思考。