二月 2015

扩展Twig

本章描述了如何对Twig 1.12进行扩展。如果你在使用一个旧版本,请移步到过往文档继续阅读。

有多重扩展Twig的方法,可以加入新的标记、Filter、Test、操作符、全局变量以及函数。甚至还能利用Node visitors对解析器本身进行扩展。

本文的第一章节会介绍如何简单的扩展Twig。如果你想要在不同项目中进行复用,或者共享给他人使用,后面章节中还提供了如何创建扩展的内容。

Drupal的锁定机制

这一功能一般用于协调不同请求中的长时间操作。

在多数环境下,多个Drupal页面请求(也就是线程或者进程)会并发执行。如果两个请求同时执行一段代码,就有发生冲突或者竞争的可能。一个常见的例子就是menu_rebuild()这样的重建过程:这类过程中我们会调用很多hook,来从所有的激活模块中获取并处理信息,最后需要在数据库中删除旧信息,并以新数据取而代之。

任何长时间运行的操作,都可能因为多次请求而产生并发,这种情况应该在处理之前获取一个锁。得到锁的请求会通知其他请求,操作正在进行,无法并发执行。

要使用这个API,需要给锁起一个唯一名称。一般建议使用这个长操作的函数名称。下面是一个例子:

Drupal 7: PHP7 vs PHP5

Environment

  • Server: Ubuntu 14.04.1 LTS
    • Parallels
    • Apache 2.4.7
    • PHP 5.5.9
    • PHP 7.0.0-dev(github master)
    • Drupal 7.34
  • Client
    • OS X 10.10.2
    • Homebrew
    • Siege 3.0.7 (net.inet.tcp.msl: 15000 -> 1000)

Installing the dependencies

apt-get

sudo apt-get install \
libxml2 \
libxml2-dev \
libssl-dev \
pkg-config \
curl \
libcurl4-nss-dev \
enchant \
libenchant-dev \
libjpeg8 \
libjpeg8-dev \
libpng12-0 \
libpng12-dev \
libvpx1 \
libvpx-dev \

Site Builder的CSS

Tags: 

在我第一次使用Drupal的时候,添加CSS是个颇有难度的工作。最初我在主题的主样式表中添加css。可大多数情况下,都不需要覆盖整个网站的所有样式,所以这不是个好办法。可惜的是Drupal 7自身并没在管理页面上提供添加css的方法。所以我开始寻找一些添加/覆盖CSS的变通方法。

有时候站点管理员和运营人员需要添加新的css,覆盖或修改现有主题的css,这都可以通过在主题中添加自定义css直线。然而,有些css的变化目的只是想在一个页面中、一个node或者某一种内容类型中生效。这需要一些Drupal主题方面的知识。对于非开发者来说,这就更加困难了。所以也出现了很多模块,帮助用户来对css进行新增、覆盖或者修改。本文中,我会介绍其中的几个。

Code Per Node

Code Per Node(cpn)模块允许用户向一个内容类型或者Node中加入CSS。如果用户无权修改主题,但是又想在某个页面或者内容类型中加入css,那就再合适不过了。这个模块会为每个你指定的Node加入你的自定义CSS。

下面是这个模块的Node配置的截图: