从父文件到子文件的块内容是否真实?
例如,我有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
构造呢?请,任何建议。
答案 0 :(得分:2)
使用prepend
或append
保留父块的内容。 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}
更新的答案
看起来很狡猾。您可以使用多个块content
。 menu
中的阻止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}
这并不能完全回答你的问题,但可能有助于我思考。