cnp/pattern-library

使用命名原子和结构数组,更快地堆叠原子和分子。

v1.0.1 2017-10-05 19:36 UTC

README

一个PHP库,专门为WordPress原子和有机体编写标准化标记而设计,以便快速编写。大多数原子都包含一个WordPress模板标签以及环绕模板标签返回内容的标记。例如,PostTitle原子默认情况下返回由h2标签包围的WordPress函数the_title();的内容。

原子中的每个部分,从标签到内容,都可以在原子参数中进行配置,如果无法访问主要参数,则可以单独过滤。最后,原子可以堆叠在一起形成有机体,这使得为WordPress主题编写标记更快、更干净。这样,您不必处理成堆的打开和关闭PHP标签,或奇特的缩进和古怪的if语句嵌套。所有这些都会分散对标记核心的注意力:内容。WordPress Pattern Library使标记更加清晰。

原子

AtomTemplate类是一种定义常见原子参数的方式。方法getMarkup使用CNP/Atom类来组装标记。如果需要,命名原子也可以创建和使用特定的原子参数(请参阅PostThumbnail)。

原子文档

链接

一个标准链接。

参数
  • href:链接URL。
使用

PostLink

扩展:Link

指向文章的链接。

参数
使用
  • get_permalink()

FrontPageLink

扩展:Link

指向主页的链接。

参数
使用
  • home_url()

SiteTitleFrontPageLink

以网站标题作为内容的指向主页的链接。

参数
使用
  • FrontPageLink
  • get_bloginfo( 'site_title' )

PostsPageLink

扩展:Link

指向文章页面的链接。

参数
使用
  • get_permalink( get_option( 'page_for_posts' ) )

FacebookShare

扩展:Link

一个Facebook分享链接。

参数
  • share:要分享的URL。
  • target:链接目标窗口。默认为"_blank"。
使用
  • share未提供且$post为null时,为get_site_url()
  • share未提供且$post已定义时,为get_the_permalink()

TwitterShare

扩展:Link

一个Twitter分享链接。

参数
  • share:要分享的URL。
  • status:预定义的Twitter状态。
  • target:链接目标窗口。默认为"_blank"。
使用
  • share未提供且$post为null时,为get_site_url()
  • share未提供且$post已定义时,为get_the_permalink()

EmailShare

扩展:Link

一个电子邮件分享链接。

参数
  • share:要分享的URL。
  • body:预定义的电子邮件消息正文。
  • target:链接目标窗口。默认为"_blank"。
使用
  • share未提供且$post为null时,为get_site_url()
  • share未提供且$post已定义时,为get_the_permalink()

摘录

使用来自文章对象的手动摘录。

参数
使用

ExcerptForce

扩展:Excerpt

要么是文章摘录,要么是文章的开始部分。

参数
使用
  • get_the_excerpt()

ExcerptSearch

扩展:Excerpt

为搜索结果页面定制的专用摘录,突出显示搜索到的术语。

参数
使用
  • get_query_var( 's' )
  • get_the_content()

PostClass

返回具有文章类的<article>

参数
使用
  • get_post_class()

PostThumbnail

返回文章缩略图。

参数
  • size:文章缩略图大小。
  • attr:传递给get_the_post_thumbnail函数的属性。
使用
  • get_the_post_thumbnail()

PostTitle

返回包含标题的h2

参数
使用
  • get_the_title()

PostTitleLink

扩展:PostTitle

返回包含PostLink的PostTitle。

参数
使用

CategoryList

返回文章分类列表。

参数
使用
  • get_the_category_list()

Loop

使用vsprintf运行简单的循环。

参数
  • array:要遍历的数据数组。
  • 格式: 格式字符串。
使用
  • vsprintf()

SchemaAddress

参数
  • address_data: 地址数据数组。键包括
    • street_address
    • city
    • state
    • zip_code
    • country
使用

PostDate

返回格式化的帖子日期

参数
  • date_format: PHP日期格式。默认: "F j, Y"
  • prefix: 日期前的字符串输出。默认: "<strong>Published:</strong> "。
  • suffix: 日期后的字符串输出。默认: ""。
使用
  • get_the_date()

EventDate

一个复杂的原子,返回事件日期。它适用于Tzolkin或The Events Calendar。

参数
  • start_date_function: 获取事件开始日期的函数。
  • end_date_function: 获取事件结束日期的函数。
  • all_day_function: 检查事件是否为全天事件的函数。
使用
  • self::SetEventFunctions: 设置事件开始日期、结束日期和全天函数。
  • self::setDateType: 根据事件开始日期和结束日期与当前时间的关系设置日期类型。可能的值有:"now"、"allday-single"、"allday-multiple"、"single-day"或"uncategorized",如果所有其他检查失败。
  • self::setDateFormat: 使用datesprintf设置事件日期格式字符串。
过滤器
  • event_date_functions/{$name}_event_date_functions: 全局或特定于有机体的过滤器,用于调整事件日期函数。
  • event_date_format/{$name}_event_date_format: 全局或特定于有机体的过滤器,用于设置日期格式。

EventBadge

扩展:EventDate

返回事件“徽章”,即显示事件开始日期的月/日块。

参数
  • badge_pieces (数组):徽章的子元素。默认: [ 'month' => date( 'F', $this->event_start_date ), 'day' => date( 'd', $this->event_start_date ) ]
使用
过滤器
  • {$name}_badge_pieces_arr: 调整徽章元素的特定于有机体的过滤器。

TaxonomyList

返回分配给特定帖子的分类法术语列表。用于自定义分类法。

参数
  • taxonomy: 从中提取分类法的分类法。默认: 如果未提供,则为get_object_taxonomies()的第一个结果。
  • separator: 列表项的分隔符。默认: ","。
  • before: 在列表前输出的字符串。
  • after: 在列表后输出的字符串。
使用
  • get_object_taxonomies()
  • get_the_term_list()

ListTerms

返回一个无序列表,包含分类法术语。

参数
  • taxonomy: 显示哪个分类法的术语。默认: 如果帖子类型是"post",则为"Category",如果未提供,则为从get_object_taxonomies()返回的第一个分类法。
  • list_args: wp_list_categories()的列表参数。默认: [ 'taxonomy' => $this->taxonomy, 'echo' => 0, 'title_li' => '' ]
使用
  • get_object_taxonomies()
  • wp_parse_args()
  • wp_list_categories()
过滤器
  • list_terms_list_args/{$name}_list_terms_list_args: 全局或特定于有机体的过滤器,用于wp_list_categories()参数。

ListPages

返回一个无序列表,包含页面。

参数
  • list_args: wp_list_pages()的列表参数。默认: [ 'post_type' => 'page', 'echo' => 0, 'title_li' => '' ]
使用
  • wp_list_pages()
过滤器
  • list_pages_list_args/{$name}_list_pages_list_args: 全局或特定于有机体的过滤器,用于wp_list_pages()参数。

PostAuthor

显示帖子作者的名称。

参数
  • prefix (字符串): 帖子作者前的字符串。默认: "By: "。
  • suffix (字符串): 帖子作者后的字符串。默认: "."。
使用
  • get_the_author()

Menu

返回wp_nav_menu。

参数
  • menu_args (数组): 传递给wp_nav_menu()的参数。默认: [ 'menu' => $this->menu, 'echo' => false, 'container' => '' ]
使用
  • wp_parse_args()
  • wp_nav_menu()

Image

返回一个响应式图像。

参数
  • image_object/attachment_id: 可以从ACF提供图像对象或附件ID。然而,我们只需要ID,所以附件ID是首选
  • size: WordPress图像大小。
  • icon: 图标。
使用
  • wp_get_attachment_image()

ContentSourceLink

一个在前端输出的链接,用于为内容区域提供更快的编辑访问。

参数
  • href:指向内容的相对WordPress管理员链接。使用site_url()构建完整URL。
  • type:有3种内容类型:“h”代表“硬编码”,“d”代表“动态”和“e”代表“可编辑”。只有可编辑内容源链接应该有href。
  • parent:内容源链接标签元素的CSS选择器。
  • title:title属性的简写。
使用
  • site_url()

BackgroundVideo

返回一个Vide启用的背景视频。

参数
  • mp4(URL):mp4文件的URL。
  • webm(URL):webm文件的URL。
  • jpg(URL):jpg文件的URL。
  • vide-options(数组):Vide选项。默认值是:autoplay: true, posterType: jpg, loop: true, muted: true, position: left top
使用

PostTermLinkSingle

返回单个帖子术语。在设计中只有一个术语空间,但由于内容输入不正确,可能出现多个术语的情况下很有用。

参数
  • taxonomy(字符串):提取帖子术语的分类。默认值:“”。
使用
  • wp_get_post_terms()
  • get_term_link()

Organisms

OrganismTemplate类是多原子标记的起点。使用结构数组,我们可以传递需要包裹在生物体内的命名或通用原子。

与AtomTemplate类似,OrganismTemplate类有一个getMarkup方法,该方法遍历标记数组并编译生物体的标记。

OrganismTemplate类中可用的属性有

  • name:(必需)生物体名称。生物体内部的所有原子都被赋予CSS类$organism_name-$atom_name
  • tag:(可选)生物体标签,用于CNP/Atom。 默认值:'div'
  • tag_type:(可选)标签类型,用于CNP/Atom组装生物体包装器时。默认为split,以便正确嵌套原子。 默认值:'split'
  • attributes:(可选)生物体属性,用于CNP/Atom。 默认值:数组
  • before_content:(可选)放置在原子之前的一串标记。
  • after_content:(可选)放置在原子之后的一串标记。
  • structure:(必需)结构数组。
  • posts:(可选)WP帖子对象数组,用于loopPosts方法。如果您正在构建帖子列表,这很有用。
  • posts-structure:(如果存在posts则是必需)每个帖子对象的结构。

Structure

您必须以特定方式编写结构数组,以便正确嵌套。

  • key:原子名称。
  • value:字符串|数组。如果值是字符串,则它将被用作原子的内容。如果它是一个数组,那么您必须提供以下键之一
    • children:用于创建另一层嵌套。
    • parts:用于指示生物体此部分的最终嵌套级别。

除了childrenparts之外,值还用于传递普通原子参数。存在一个用于class的简写,这使得添加特定的CSS类变得更容易。

生物体示例

简单

输入

$brief_args = [
	'name' => 'brief',
	'structure' => [
		'title' => 'The Brief',
		'description' => 'Here's the Brief!',
	]
];

输出

<div class="brief">
    <div class="brief-title">The Brief</div>
    <div class="brief-description">Here's the Brief!</div>
</div>

使用帖子、子代和部分进行嵌套

输入

$post_card_args = array(
	'name'           => 'posts',
	'posts'          => $latest_posts,
	'posts-structure' => [
		'item' => [
			'children' => ['PostClass'],
			'class' => 'column'
		],
		'PostClass' => [
			'children' => ['item-image', 'item-text'],
			'class' => 'posts-item-inside'
		],
		'item-image' => [
			'parts' => [
				'PostThumbnail'
			]
		],
		'item-text' => [
			'parts' => [
				'PostTitleLink',
				'ForceExcerpt'
			]
		]
	]
);

输出

<div class="posts">
  <div class="posts-item column">
    <article class="PostClass posts-item-inside">
      <div class="posts-item-image">
        <img src="PostThumbnail.jpg" />
      </div>
      <div class="posts-item-text">
        <h2 class="posts-PostTitleLink"><a href="#">Post Title</a></h2>
        <p class="posts-ForceExcerpt">Post excerpt</p>
      </div>
    </article>
  </div>
</div>