vierwd / typo3-smarty
在模板中使用 Smarty 而不是 Fluid
Requires
- php: >=7.2.0
- smarty/smarty: ^3.1, !=3.1.30
- typo3/cms-core: ^10.4.0
Requires (Dev)
- dealerdirect/phpcodesniffer-composer-installer: ^0.7.0
- friendsofphp/php-cs-fixer: ^2.12.0
- nimut/testing-framework: ^5.0.0
- phpstan/extension-installer: ^1.0
- phpunit/phpunit: ^6.0
- saschaegerer/phpstan-typo3: ^0.13.1
- vierwd/coding-standard: dev-master
Replaces
- vierwd/vierwd_smarty: 10.2.0
- dev-main / 12.x-dev
- 11.5.x-dev
- 10.4.x-dev
- 10.2.0
- 10.1.0
- 10.0.0
- 9.5.x-dev
- 3.3.1
- 3.3.0
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.0
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.x-dev
- 2.11.0
- 2.10.3
- 2.10.2
- 2.10.1
- 2.10.0
- 2.9.2
- 2.9.1
- 2.9.0
- 2.8.0
- 2.7.10
- 2.7.9
- 2.7.8
- 2.7.7
- 2.7.6
- 2.7.5
- 2.7.4
- 2.7.3
- 2.7.2
- 2.7.1
- 2.7.0
- 2.6.4
- 2.6.3
- 2.6.2
- 2.6.1
- 2.6.0
- 2.5.6
- 2.5.5
- 2.5.4
- 2.5.3
- 2.5.2
- 2.5.1
- 2.5.0
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.3
- 2.3.2
- 2.3.0
- 2.2.1
- 2.2.0
This package is auto-updated.
Last update: 2024-09-01 13:18:02 UTC
README
在模板和 extbase 扩展中使用 Smarty。
安装
使用 composer 安装
composer require 'vierwd/typo3-smarty'
在控制器中的使用
要为扩展的动作使用 smarty 模板,只需扩展 Vierwd\VierwdSmarty\Controller\ActionController
。您的模板需要与之前使用的 Fluid 模板位于同一位置,但文件扩展名为 .tpl
。
示例
// Classes/Controller/BlogController.php namespace Example\ExampleBlog\Controller; class BlogController extends \Vierwd\VierwdSmarty\Controller\ActionController { /** * @var \Example\ExampleBlog\Domain\Repository\PostRepository * @TYPO3\CMS\Extbase\Annotation\Inject */ protected $postRepository; public function listAction() { $posts = $this->postRepository->findAll(); $this->view->assign('posts', $posts); } }
{* Resources/Private/Templates/Blog/List.tpl *} {foreach $posts as $post} <div class="post"> <h1>{$post->getTitle()}</h1> {$post->getContent()|escape|nl2p nofilter} </div> {/foreach}
预定义变量
有一些变量始终可用于您的模板
预定义 smarty 函数、块和修饰符
- 翻译
- uri_resource
- uri_action
- link_action
- flashMessages
- nl2p
- typolink
- typoscript
- fluid
- svg
Power-Blocks: typoscript 和 fluid
这个扩展真正的好处是,您仍然可以在 Smarty 模板中使用 typoscript 和 fluid。这样,您可以确保元素与普通内容元素(如带图片的文本)具有完全相同的 HTML 输出。如果您编写表单,也最好使用 Fluid 为一些 ViewHelpers 提供回退。
typoscript
{capture assign=text} <p>Lorem <b>ipsum</b> dolor sit amet, consectetur adipisicing elit. Dolorem, earum est reiciendis modi neque in veniam rerum deleniti et praesentium? Numquam, odit, itaque voluptate pariatur adipisci enim tempora ducimus dolor!</p> {/capture} {typoscript header='TypoScript Example' bodytext=$text CType=text} lib.parseFunc_RTE > 10 < tt_content {/typoscript}
输出(添加了换行符)
<div class="csc-default"> <header class="csc-header"><h1>TypoScript Example</h1></header> <p>Lorem <b>ipsum</b> dolor sit amet, consectetur adipisicing elit. Dolorem, earum est reiciendis modi neque in veniam rerum deleniti et praesentium? Numquam, odit, itaque voluptate pariatur adipisci enim tempora ducimus dolor!</p> </div>
typoscript 的更改不会持久保存。这样,您可以在一个 TypoScript 块中删除 lib.parseFunc_RTE
,同时仍在另一个中使用它。也可以为所有参数使用 data
数组。
{capture assign=text} <p>Lorem <b>ipsum</b> dolor sit amet, consectetur adipisicing elit. Dolorem, earum est reiciendis modi neque in veniam rerum deleniti et praesentium? Numquam, odit, itaque voluptate pariatur adipisci enim tempora ducimus dolor!</p> {/capture} {$data=[ CType => text, header => 'TypoScript Example', header_layout => 1, bodytext => $text ]} {typoscript data=$data header_layout=2} lib.parseFunc_RTE > 10 < tt_content {/typoscript}
注意,在块标签中的参数会覆盖数组键(在这个示例中是 header_layout)
输出(添加了换行符)
<div class="csc-default"> <header class="csc-header"><h2>TypoScript Example</h2></header> <p>Lorem <b>ipsum</b> dolor sit amet, consectetur adipisicing elit. Dolorem, earum est reiciendis modi neque in veniam rerum deleniti et praesentium? Numquam, odit, itaque voluptate pariatur adipisci enim tempora ducimus dolor!</p> </div>
使用 Smarty 作为基础模板
您还可以在主要的 TypoScript 设置中使用 Smarty 作为您网站基础模板
page = PAGE
page.10 < plugin.tx_vierwdsmarty
page.10.settings {
template = EXT:example_blog/Resources/Private/Templates/main.tpl
typoscript.navigation < lib.navigation
typoscript.footerNavigation < lib.footerNavigation
typoscript.content < styles.content.get
typoscript.logo < lib.logo
}
settings.typoscript 中的所有条目都会被解析,并在模板中作为变量可用。
{* example_blog/Resources/Private/Templates/main.tpl *} <header> {$logo nofilter} {$navigation nofilter} </header> <div role="main"> <!--TYPO3SEARCH_begin--> {$content nofilter} <!--TYPO3SEARCH_end--> </div> <footer>{$footerNavigation nofilter}</footer>
注意 Smarty 的 nofilter 参数。默认情况下,所有变量都将转义以防止某些 XSS 攻击。
使用 Smarty 作为菜单
lib.navigation = HMENU
lib.navigation {
entryLevel = 0
1 = SMARTY
1 {
expAll = 1
extensionName = vierwd_example
template = Navigation/Main.tpl
NO = 1
ACT = 1
IFSUB = 1
ACTIFSUB = 1
}
2 < .1
2.template = Navigation/Submenu.tpl
3 < .2
}
此代码块将加载位于 typo3conf/ext/vierwd_example/Resources/Private/Templates/Navigation/
的模板以渲染导航。在模板中,您可以遍历菜单项并输出菜单
<nav class="main-navigation"> <ul> {foreach $menu as $item} {$hasSubmenu = $menuObject->isSubMenu($item.uid)} {$isActive = $menuObject->isActive($item.uid)} <li class="{if $isActive}active{/if}"> <a href="{$item.uid|typolink}"> {$item.nav_title|default:$item.title} </a> {$menuObject->submenu($item.uid) nofilter} </li> {/foreach} </ul> </nav>