第五部 前端开发增强

欢迎继续阅读Drupal 8终极指南系列的第五篇。

##HTML5

Drupal 7中,所有的输出都转换为XHTML,而在8中,则转换为HTML5。这意味着nav/main/header/section等Drupal缺省模板中的标记,成为清理Drupal缺省标记的一部分重要工作。

HTML5带来了新的Form输入类型,包括date/tel和email,这些类型能在移动设备的界面上进行更好地交互(例如电话号码输入框中只显示输入法的数字部分),方便数据的录入。Drupal Form API提供了这些附加类型,方便直接创建这些字段。Drupal 7也可以使用Elements模块来获得类似效果。

Fields on iPhone

另外,你会发现很多以前需要自行处理的东西例如TextArea的尺寸调整,第一行/最后一行/基数行/偶数行等类,已经有了对应的HTML5/CSS3的处理,Fieldset的折叠功能被替换为detail元素来实现。

##新的前端库以及辅助工具

Drupal 5以后就自带jQuery,从7以后开始自带jQuery UI。Drupal 8打包了更多的前端库。例如Modernizr(用于检测浏览器是否支持触摸,或其他一些HTML5/CSS3特性)、Undescore.js(轻量级JS辅助库)以及Backbone.js(一个MVC JS框架)。这些附加库集成在一起,使得Drupal能够创建移动友好的,体验丰富的应用,这些库也是前面讲到的编辑体验和移动增强的重要支持。

##原生Schema.org输出

Drupal 8的RDF现在输出schema.org标记,这对搜索引擎优化有很大促进。这能够让Google、Yahoo、Bing以及Yandex这些搜索引擎能够比较容易的获取页面背后的信息,例如内容作者等。

Schema.org

##大大增强的访问性

Drupal 8继承并发展了Drupal 7现有的良好访问性。Drupal 8使用WAI-ARIA 属性来提供富前端体验,包括响应式工具栏以及就地编辑特性。在后端,Drupal 8也提供了很多的JavaScript访问性工具,来协助开发者提高应用的访问性。并且还有一个“利用Quail库进行自动化访问性测试”的项目正在进行之中。

这个视频来自于Dries在布拉格DrupalCon的KeyNode,演示了这些新的访问性功能如何为目标用户进行服务。

##Twig:新的主题系统

Drupal 8引入了Twig来代替Drupal 7中的模板系统。跟其他类似的模板引擎一样,让具备HTML/CSS背景的人,在没有PHP专家技能的情况下来修改标记。例如,不需要理解嵌套数组和对象的区别,也不需要关注什么时候使用each,一个简单的{{foo.bar}}语句就完成了。简单的条件判断和循环可以用{% …%}来完成。

下面的例子来自于page.html.twig(相当于Drupal 7中的page.tpl.php),其中使用了Twig、HTML5以及一些ARIA支持。

  <?php
    <main role="main">
      <a id="main-content"></a>{# link is in html.html.twig #}

      <div class="layout-content">
        {{ page.highlighted }}

        {{ title_prefix }}
        {% if title %}
          <h1>{{ title }}</h1>
        {% endif %}
        {{ title_suffix }}

        {{ tabs }}

        {% if action_links %}
          <nav class="action-links">{{ action_links }}</nav>
        {% endif %}

        {{ page.content }}

        {{ feed_icons }}
      </div>{# /.layout-content #}

      {% if page.sidebar_first %}
        <aside class="layout-sidebar-first" role="complementary">
          {{ page.sidebar_first }}
        </aside>
      {% endif %}

      {% if page.sidebar_second %}
        <aside class="layout-sidebar-second" role="complementary">
          {{ page.sidebar_second }}
        </aside>
      {% endif %}

    </main>
  ?>

可是没有PHP,怎么使用那些变量呢?像平时一样(只不过以前的template.php现在变成了THEME.theme)用*THEME_preprocess_HOOK()*函数来搞定。Twig在表达层和业务逻辑的分离上作出了卓有成效的努力,使得主题层面的可管理性和安全性大大增强(一旦Twig变量自动转义完成,安全性还将进一步提高)。

Twig另外还有一个有意思的事情是如果你在settings.php用$settings[‘twig_debug’] = TRUE启用了debug模式,那么Drupal 8生成的标记里面会出现有用的代码说明,用来提醒你要修改的模板在哪个文件,正在使用什么样的”theme suggestion”来生成标记,例如:

<?php
<div class="content">

<!-- THEME DEBUG -->
<!-- CALL: _theme('node') -->
<!-- FILE NAME SUGGESTIONS:
   * node--1--full.html.twig
   * node--1.html.twig
   * node--article--full.html.twig
   * node--article.html.twig
   * node--full.html.twig
   x node.html.twig
-->
<!-- BEGIN OUTPUT from 'core/themes/bartik/templates/node.html.twig' -->
<article class="node node--type-article node--promoted node--view-mode-full contextual-region clearfix quickedit-processed" data-history-node-id="1" data-quickedit-entity-id="node/1" role="article" about="/node/1" typeof="schema:Article" data-quickedit-entity-instance-id="0">
    ...
</article>

<!-- END OUTPUT from 'core/themes/bartik/templates/node.html.twig' -->

      </div>
?>

这有点像把Theme developer集成到核心一样。

##唯快不破

Acquia的性能大师Wim Leers假设,为领导地位的CMS提速是为整个Internet提速的最好方法,这意味着,CMS的初始安装就应该具有高性能的配置,而不是让用户自己学习这些技能。在Drupal 8中,我们就在做这种努力。你可能注意到,Drupal 8缺省安装时,CSS JS聚合等特性就已经设置为打开了。

如果你是一个前端开发者,这对你意味着:Drupal的缺省安装对你来说可能不是一个好的开发环境,除非你手动去关掉这些性能选项(即使Hack掉核心的CSS也没用)。幸运的是,Drupal 8自带了一个sites/example.settings.local.php文件用来完成这个任务。这个文件用硬编码的方式把这些性能选项关掉,所以这个配置文件对开发者是很有用的。只要把这个文件复制成为sites/default/settings.local.php,并在sites/default/settings.php中把下面的行注释掉:

<?php
# if (file_exists(__DIR__ . '/settings.local.php')) {
#   include __DIR__ . '/settings.local.php';
# }
?>

接下来说说没被注释掉的行,你的新的settings.local.php文件中也有一些关于Twig的选项是缺省关闭的,例如打开debug模式,以及关闭缓存。去掉这些注释很显然会把开发站点变慢,不过也能让Theme开发简单一点,因为对模板的修改能够立即看到了,而不用等着清空缓存。

另外一个前端性能相关的新闻,为了尽可能提高前端性能,尤其是移动设备的前端性能,Drupal会带着最新版本的jQuery和jQuery UI,相对于普通的JavaScript,这实际上存在很大的差异。缺省Drupal 8安装不会为匿名用户载入任何JavaScript。

总的说来,性能方面的优化,还有很多工作要做,Drupal 8将带着有更好的前端性能面世。

##新的界面元素

Drupal 8带着很多新的界面元素。包括模态对话框和下拉按钮,在Drupal7和以前的版本中,这两个组件本来是CTools模块的一部分。Drupal 8还引入了一个概念,“按钮类型”分为“首要”(在Seven主题中渲染为蓝色),以及”危险“(红色),来帮助用户在具有众多选项的时候作出正确选择。

new element

##响应式主题

移动增强一篇中介绍过,Drupal 8中包含了很多响应式的特性,包含主题,工具栏,图片以及表格等。

为了支持这些特性,可以在主题中声明Breakpoints(为了符合浏览器和设备的需要,定义的高度宽度和分辨率),断点可以用来支撑这些多种多样的相应式特性。(然而,注意“把Breakpoint设置转移到*.info.yml中”)还是一个正在开发中的补丁。

另外,Drupal 8很可能支持新的元素,这个元素将会在今年秋天被浏览器支持。会对前端性能有很大增强。针对移动设备来说,会发送小尺寸图片给小屏幕,节省流量和时间。(多谢Marc Drummond提供了本节内容)

##选择性添加JS/CSS的新方法

继续前端性能的话题。过去,如果想要在某个页面加入CSS或者JS,需要使用drupal_add_css()以及drupal_add_js()函数。现在只要在渲染数组中加入#attached属性就可以了,例如:

seven.theme

function seven_form_node_form_alter(&$form, &$form_state) {
...
  $form['#attached'] = array(
    'css' => array(drupal_get_path('module', 'node') . '/css/node.module.css'),
  );
...
}

着对于一次性的使用很有帮助,而且没有什么依赖,更通用并且推荐的方式是在你的MODULE/THEME.libraries.yml中注册一个或多个CSS/JS项目,然后在#attached属性中添加一个引用。

seven.libraries.yml

maintenance-page: version: VERSION js: js/mobile.install.js: {} css: theme: maintenance-page.css: {} dependencies: - system/maintenance

install-page: version: VERSION js: js/mobile.install.js: {} css: theme: install-page.css: {} dependencies: - system/maintenance

drupal.nav-tabs: version: VERSION js: js/nav-tabs.js: {} dependencies: - core/matchmedia - core/jquery - core/drupal - core/jquery.once - core/jquery.intrinsic

seven.theme

<?php
function seven_preprocess_install_page(&$variables) {
  // ...
  $libraries = array(
    '#attached' => array(
      'library' => array(
        'seven/maintenance-page',
        'seven/install-page',
      ),
    ),
  );
  drupal_render($libraries);
}
?>

这种方式看起来不如drupal_add_foo()的方式直观,但是这意味着这些内容可以被缓存从而提高性能,可以容易的在不同地方进行重用。

##安息吧,IE678

最后,来一个忧郁的结尾,最大一个对前端开发者而言的进步就是,Drupal 8核心已经放弃了对IE 6-8的支持,启用了jQuery 2.0以及现代的HTML5/CSS3的浏览器支持(还在讨论关于停止对Android 2.3以及更旧版本的支持的问题)。

html5shiv(一个为兼容性差的浏览器准备的HTML5处理器)也包含在Drupal 8中,这使得IE 8之类的浏览器不会完全坏掉, 还有个IE8项目被提供给必须支持IE8的开发者们。

我们正在寻找简洁有效的前端代码,而不想为5岁以上的浏览器担忧。

IE WANTED

##还有更多

Drupal 8还在开发之中,连Beta还没开始,有些API还没能够最终确定(RC之前这些修饰类的事情都不会停止)。前端还有些编码和复审之类的大事需要做。

##这是一个转折

下一次,我们将会讲一些Drupal 8中的后端开发的特性。

Avatar
崔秀龙

简单,是大师的责任;我们凡夫俗子,能做到清楚就很不容易了。

comments powered by Disqus
下一页
上一页

相关