frozzare/处理器

WordPress的Twig模板

安装次数: 7,093

依赖项: 0

建议者: 0

安全: 0

星星: 10

观察者: 3

分支: 1

开放性问题: 0

类型:wordpress-muplugin

v1.8.1 2016-10-06 10:47 UTC

README

Build Status No Maintenance Intended

WordPress的Twig模板

Digster是一个WordPress插件,允许您使用少量Twig过滤器函数全局变量渲染Twig视图。

注册自己的扩展作曲家很容易。

安装

composer require frozzare/digster

示例

page.php的示例

/**
 * Render page view.
 */
echo view( 'page' );

page.twig的示例

{% include "partials/header.twig" %}
<div id="primary" class="content-area">
	<main id="main" class="site-main" role="main">
		<article class="post-2 page type-page status-publish hentry">
			<header class="entry-header">
				<h1 class="entry-title">{{ post.post_title }}</h1>
			</header>
			<div class="entry-content">
				{{ post.post_content | wpautop | raw }}
			</div>
		</article>
	</main>
</div>
{% include "partials/footer.twig" %}

配置

Digster有几个WordPress过滤器,其中一个是配置过滤器。如果WP_ENV等于development,则默认开启调试。

add_filter( 'digster/config', function ( $config ) {
  return $config;
} );

位置

一个包含视图位置的数组。默认情况下,已注册get_templates_directory() . '/views'

add_filter( 'digster/config', function ( $config ) {
  $config['locations'] = 'path/to/locations';
  return $config;
} );

Twig环境选项

Twig网站上了解有关选项的更多信息

auto_reload示例

add_filter( 'digster/config', function ( $config ) {
  $config['auto_reload'] = true;
  return $config;
} );

API函数

所有带有digster_前缀的函数也可以作为\Frozzare\Digster\Digster类的静态方法调用。只需将digster_替换为Digster::,确保您的代码中包含use Frozzare\Digster\Digster

获取视图

将视图获取到字符串中。

$view = digster_fetch( 'page' [, $data = [] ] );

获取视图实例

digster中的每个视图都是视图类的实例,可以访问。

$view = digster_view( 'page', [, $data = [] ] );

// or (only if `view` function don't exists.)
$view = view( 'page', [, $data = [] ] );

echo $view;

嵌套视图

digster_viewview将返回视图实例,因此您可以使用nest方法。

echo view( 'user.profile' )
  ->nest( 'picture', 'user.profile.picture', [
    'url' => 'http://site.com/user/1/profile.png'
  ] );
{# views/user/profile.twig #}
{{ picture }}
{# views/user/profile/picture.twig #}
<img src="{{ url }}" alt="Profile picture" />

您也可以使用digster_renderdigster_fetch执行相同的操作。

digster_render( 'user.profile', [
  'picture' => digster_fetch( 'user.profile.picture', [
      'url' => 'http://site.com/user/1/profile.png'
  ] )
] );

注册作曲家

使用Digster,您可以注册通配符模板或指定模板的作曲家。

此示例是为post对象,但Digster已经加载了此全局变量。

// '*', 'page' or 'page.twig'
digster_composer( 'page', function ( $vars ) {
  $vars['post'] = is_numeric( $vars['post'] ) ?  get_page( $vars['post'] ) : $vars['post'];
  return $vars;
});

// Only need to get the post ID
digster_render( 'page', [
  'post' => get_the_ID()
] );

您还可以创建一个可以添加到digster_composer的作曲家类。作曲家类上唯一必需的方法是接受视图参数的compose方法。

class Profile_Composer {

  public function compose( $view ) {
    $view->with( 'job', 'developer' );
  }

}

digster_composer( 'user.profile', 'Profile_Composer' );

注册自定义过滤器

1.7.1以来

add_filter( 'digster/filters', function ( $filters ) {
  return array_merge( $filters, [
    'hello' => function ( $text ) {
      return 'hello';
    }
  ] )
} );

注册自定义函数

1.7.1以来

add_filter( 'digster/functions', function ( $functions ) {
  return array_merge( $functions, [
    'uniqid' => 'uniqid'
  ] )
} );

注册自定义全局变量

1.7.1以来

add_filter( 'digster/globals', function ( $globals ) {
  return array_merge( $globals, [
    'num' => 1
  ] )
} );

注册扩展

使用Digster注册Twig扩展类。

digster_register_extensions( new My_First_Twig_Extension() );

// or

digster_register_extensions( [
	new My_First_Twig_Extension(),
	new My_Second_Twig_Extension()
] );

渲染视图

渲染视图

digster_render( 'page' [, $data = []] );

在视图之间共享数据

您可以使用带有*(通配符)的digster_composer或使用digster_share在视图之间共享数据。所有共享数据都可以被覆盖。

digster_share( 'site_name', 'Example' );

Twig过滤器

apply_filters

将过滤器应用于Twig输出。

{{ '@frozzare' | apply_filters('twitter_link') }}

摘录

获取文章摘要

{{ post.post_content | excerpt }}

短代码

在文本上运行WordPress短代码

{{ post.post_content | shortcodes | raw }}

wpautop

将p标签附加到文本

{{ post.post_content | wpautop | raw }}

Twig函数

1.7.1以来,您可以使用与WordPress中应使用的相同参数调用esc_html__esc_html_eesc_attr__esc_attr_eesc_jsesc_textareaesc_urlesc_url_raw

调用__

与WordPress的__相同。

Digster完全支持Twig i18n,有关更多信息

{{ __( 'Hello World!', 'your_textdomain' ) }}

调用_n

与WordPress的_n函数相同的参数。

Digster完全支持Twig i18n,有关更多信息

{{ _n('%s star', '%s stars', rating, 'your_textdomain') | format(rating) }}

调用操作

您可以向do action发送更多参数

{% do action('my_action') %}

调用apply_filters

apply_filters具有相同的参数

{{ apply_filters() }}

调用body_class

<body {{ body_class() }}>

调用language_attributes

<html {{ language_attributes() }}>

调用随机函数

您可以向fn发送更多参数

<body {{ fn('my_function', 'a', 'b') }}>

调用wp_footer

{{ wp_footer() }}

调用wp_head

{{ wp_head() }}

调用wp_title

wp_title具有相同的参数

{{ wp_title() }}

Twig全局变量

post

get_the_ID()返回id时,post是全局的。

<h1>{{ post.post_title }}</h1>

Twig国际化

Digster完全支持Twig i18n 扩展。您不需要做任何事情来启用它,只需使用它!它将自动加载主题文本域。别忘了将其添加到您的style.css中。

使用Poedit?您应该看看Twig Gettext Extractor!Digster会安装Twig Gettext Extractor,因此您不需要这样做!

{% trans "Hello World!" %}

{% trans string_var %}

{% trans %}
    Hello World!
{% endtrans %}

缓存

查看Twig缓存扩展(Digster安装了包,因此您无需安装)。Digster内置了一个使用WordPress对象缓存的缓存提供程序。

use Frozzare\Digster\Cache\WordPress_Cache_Adapter;
use Asm89\Twig\CacheExtension\CacheStrategy\LifetimeCacheStrategy;
use Asm89\Twig\CacheExtension\Extension as CacheExtension;

$cache_provider  = new WordPress_Cache_Adapter();
$cache_strategy  = new LifetimeCacheStrategy($cache_provider);
$cache_extension = new CacheExtension($cache_strategy);

digster_register_extensions( $cache_extension );

编码风格

您可以通过安装PHP CodeSniffer并在您的项目目录中运行以下命令来检查您的贡献是否通过风格指南

vendor/bin/phpcs -s --extensions=php --standard=phpcs.xml src/

许可证

MIT © Fredrik Forsmo