Drupal8开发习惯之一:如何建立一个单独的页面(主页,某个活动页面等需要完全定制的页面)
最近研究好多的Drupal8打包发行的版本和acquia的论文,书籍等,发现了一些建站习惯和我自己的完全不同,所以总结一些
今天我们讲的是如何建议里一个页面,有下面几种选择:
1.使用page_manager ui模块
2.新建模块,建立一个routing指向Controller,在输出到MODULENAME.module中定义的twig模板
3.创建一个node
显然,最合理应该是第三种方案,我以前比较笨,一直用前两种方法
但是如何正确的用node 来创建一个页面呢
同样有两种方法:
1.:创建一个Landing Page(名字随意)内容类型,字段全部删除。
创建这个这个内容类型的页面,然后复写这个node的模板,并添加一些东西,region,html等,一些简单的网站推荐用这种方法来创建主页,活动页等
通过前面两节的学习,我们已经成功在Windows下安装了 Vagrant 和 VirtualBox 。这两个是本教程必不可少的两个工具。
其他准备工作
- 安装Git
除了它们之外,我们还需要一些辅助工具,比如用来执行命令的终端工具,比如 Windows 7 自带的 cmd命令行工具,或者 Windows PowerShell 等。不过,个人比较喜欢用 Git Bash 来写命令行,因为它比cmd更强大,支持的命令更丰富,适合习惯用Linux命令行的朋友。
本教程也是采用 Git bash 来输入命令,Git 当前的最新版本是 2.11.0,你可以到它的下载页面下载最新版本:https://git-scm.com/downloads。
- 阅读更多 关于 下载和添加 box
- 登录或注册以发表评论
上一节《Windows下安装Vagrant图文教程》介绍了Vagrant的安装,这一节来介绍一下 VirtualBox 的安装。
以下内容转自cnblogs,请先下载新版本的VirtualBox,然后按下面的内容介绍操作。
Virtualbox下载与安装步骤
本文主要介绍一下如何从官方网站下载正版的 虚拟化 Oracle VM VirtualBox ,以及说明一下去官方下载正版软件的重要性。
一、为了系统的稳定以及数据的安全,建议下载软件的时候到可靠的网站下载。
1、到可靠的网站下载,例如百度提供的下载链接
2、到软件的官方网站上面下载,
有时候,我们在百度上搜索虚拟化软件VirtualBox ,看到很多网站都可以下载,如果没有经验的用户,看到哪一个下载连接然后就下载了,完全没有考虑软件的可靠性,也没有了解到安全性。这样其实是很危险的。少用一些绿色软件,避免中病毒造成不必要的损失。
本文以 Windows 7 操作系统环境演示,安装很简单。
首先,到 VirtualBox官网下载 Windows版本的 VirtualBox:https://www.vagrantup.com/downloads.html 。
下载完成后,即可开始安装。
点击“Next”(下一步)继续:
同意协议,点击“Next”(下一步)继续。
默认的安装目录是:C:HashiCorp\Vagrant,可以保持默认,也可以在D盘根目录创建一个Vagrant的目录,然后安装的这里:
教程目标:
本教程将介绍如何利用Vagrant等工具来搭建一个本地的Lamp (Linux + apache + Mysql + php)开发环境。
本教程使用的操作系统是 Windows 7 。
操作系统:
- Window 7
内容安排:
- 安装 Vagrant
- 安装 VirtualBox
- 下载和添加 box
- 管理 box
- 下载和编译安装 oneinstack
- 添加虚拟域名 vhost
- 安装 Drupal
接着,我们来看看需要准备哪些工具。
在views里面创建两个block如下图所示:
然后第一个block设置contextual 为登录用户显示所下图所示:
设置保存以后,然后在block2设置匿名用户要显示的内容,再通过block1当中的 No results behavior 选项,添加Global: View area (Global: View area)通过设置如果下图所示:
当drupal的控制器返回渲染数组的时候,系统会派发视图事件,渲染数组被main_content_view_subscriber(主内容视图订阅器)处理,它根据请求的格式,将系统流程定向到对应的格式渲染器,系统默认提供了四个格式渲染器,他们被定义在容器的main_content_renderers参数里面,其中html格式对应的是服务id为“main_content_renderer.html”的html格式渲染器,我们得到的html格式页面几乎都是它渲染的,它将渲染分为两个步骤:先渲染body标签,然后渲染html标签,其中我们将html的渲染称为根渲染。
具体的工作是由渲染器完成的,它负责将渲染数组转换为html字符串,本篇的主题就是这个渲染器。
要理解它是怎么工作的需要先理解一些知识。
首先是渲染数组,关于它可阅读本系列的《云客Drupal8源码分析之渲染数组(render array)》
其次是渲染上下文,下面介绍一下渲染上下文:
渲染上下文:
每次渲染时,渲染数组的渲染过程是从根元素开始的,递归到所有的子元素,它对应着html页面结构,由父元素渲染到子元素,这个过程中有两个问题需要解决:
从本质上讲现代所有的web软件系统中都用到了渲染数组,只不过在drupal世界里明确给了它这个名字:“渲染数组”。
如果你使用过模板引擎,那么会很熟悉它,要使模板引擎工作,那么需要给它传入一些变量,这些变量将决定模板里面对应变量的显示,传入的这些变量往往是以数组的方式传入,键名代表模板里面的变量名,键值代表变量值,这样的数组就叫做渲染数组,比如著名的php小型框架CodeIgniter(简称CI框架)中的经典用法就是这样:
$this->load->view('show_news', $data);
其中参数show_news指定网页模板,参数$data就是程序中准备好的一个数组,包含了传递给模板的变量
可以说渲染数组是数据系统和显示系统的一个桥梁,在数据系统中程序计算出需要给用户的数据,他们全部放置到渲染数组中,显示系统仅面向渲染数组这一个接口工作,这样一来系统和显示之间解耦了,许多事情变得简单,这里的显示是广义的,它也包括“显示”成json或xml给其他系统“看”。
本篇主题讲解drupal8系统是如何计算页面标题的,标题很重要,尤其对于搜索引擎优化来说,标题权重很高
页面有标题当然是针对请求格式为html而言,在整个执行流程中如果控制器直接返回响应对象,那么标题计算就在控制器中随意进行 流程仅仅停留在Symfony的渲染管道中,如果控制器返回的是渲染数组,那么将派发视图事件,主内容视图订阅器MainContentViewSubscriber将判断请求格式,并启动对应的格式渲染器渲染输出 今天的话题就发生在请求格式为html的HtmlRenderer渲染器中,这个渲染器用到了标题解析器 这就是本主题的内容,下面看看标题是怎么计算出来的:
首先如果控制器返回的渲染数组包含#title子元素,如:$main_content['#title'],那么将原封不动的使用其值,标题计算完成 如果没有包含,则调用标题解析器进行计算,标题解析器服务id为“title_resolver” 类:Drupal\Core\Controller\TitleResolver 构造函数接收控制器解析器:controller_resolver及字符串翻译服务:string_translation
下面看一下标题解析源代码:
在drupal的HttpKernel核心中使用控制器解析器来取得要执行的控制器,以及解析出控制器需要的参数 除此之外也在多个地方用到它,比如渲染数组的回调解析,是一个重点内容
它的服务ID为:controller_resolver,接受以下两个参数:
psr7.http_message_factory:用于创建psr7描述的请求对象(关于这个请看:http://www.php-fig.org/psr/psr-7/) class_resolver:从容器里面取服务