Drupal 7 开发内部培训资料, 分头诗人

美音婚礼™

Drupal站点案例

使用了views, fancybox, date, picture等100多个modules,应用drupal内建缓存。

网站介绍:

美音婚礼™ http://meiyin.co

美音婚礼™ 精致时尚婚礼团队,注重从婚礼策划到婚礼创意实现,从婚礼司仪、婚礼跟妆、婚礼跟拍到婚礼筹备的每一个流程。从婚礼现场的设计搭建到完成婚礼的现场气氛营造,美音婚礼™ 全程贴心服务,精致于微处,为你呈现高品质的最具性价比的婚礼盛典。

d8的目录结构、自动加载及使用自动加载的方式加载第三方库

上周没写,主要是忙了点

d8的目录结构已经有很多人都说了,不在重复他们说过的东西了,只说几个自己的东西,而自己这些都用到了drupal的自动加载

回顾下上次说的那一部分

//看着这行代码
$autoloader = require_once 'autoload.php';
//打开文件,后又是一个包含,继续打开
return require __DIR__ . '/vendor/autoload.php';
 
//注意composer,这个东西,这是一个php管理工具
<?php
 
// autoload.php @generated by Composer
 
require_once __DIR__ . '/composer' . '/autoload_real.php';
 
return ComposerAutoloaderInitDrupal8::getLoader();

d8使用了composer进行自动加载。

composer 这个php管理工具有很多框架都在使用,yii2,d8,symfony等等都在用。

这个自动加载有5种方式,如果你添加了一个新的类库,可以使用其中任意一种,这4种方式分别为class_map,files,namespace,psr4.对应composer文件夹下的autoloder_*.php文件

我只熟悉prs4,其他的没仔细看,有兴趣的朋友看了,可以给我讲讲

psr4是一种标准与其对应的是之前的psr0标准,psr4定义存放目录的方式为,当然这些也没有什么意义,可以作为了解内容。

d8的入口文件及引申

d8入口文件

<?php

/**
 * @file
 * The PHP page that serves all page requests on a Drupal installation.
 *
 * All Drupal code is released under the GNU General Public License.
 * See COPYRIGHT.txt and LICENSE.txt files in the "core" directory.
 */
//使用了两个命名空间,有什么作用呢,后面auto会用到。
use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;
// 包含自动加载文件
$autoloader = require_once 'autoload.php';
// 创建一个DrupalKernel对象
$kernel = new DrupalKernel('prod', $autoloader);
//获取请求
$request = Request::createFromGlobals();
//处理对请求处理
$response = $kernel->handle($request);
//向浏览器发出回应
$response->send();
//事件监听,监听整个请求和回应的过程
$kernel->terminate($request, $response);

这一整套流程其实就是Symfony的运行机制

当然为了更好的了解这个运行过程,从网上找了个图片下

其实这里可以用自己的理解方式来理解上述问题,我做了如下方式,当然这只是粗糙的思路,并不是完美的代码

打算使用symfony,系统的搞一搞drupal8

据说drupal8是用symfony写的,不要问我是据说说的,我也是听说的。最近接触了下symfony2做的开源程序,感觉symfony2有点意思,打算从头系统的学下symfony,然后源码分析下drupal8.当然一切都是建立在drupal8是用symfony写的,这一基础上。

争取每星期搞出一篇blog出来

七节课掌握DRUPAL7应用之七:关于DRUPAL的应用和中国化的问题

这个作为我编译的《七节课掌握drupal7应用》最后一集,我先声明这篇内容并不是原文有的,因为原作者并没有写到第七部分。不过我还是想谈一下dupal在中国本地化应用的问题,也算是一份自己想法的补充吧。

DRUPAL的汉化

drupal作为一个国外的开源程序,要在国内普及应用首先要迈过语言这个门槛。而drupal一大优点就是有比较好的本地化翻译组。其中的中文翻译组(有简体与繁体),就已经翻译了drupal的核心模块和其他主要的应用模块,并且不断在增加翻译语条。drupal中文翻译组:https://localize.drupal.org/translate/languages/zh-hans,为中国的drupal应用者们提供了基础性的汉化资源。另外drupal本身也提供比较完善的本地化翻译模块,方便使用者自己去汉化自己程序版本。说到缺憾的话,就是在说明文件(documentation)方面,特别是模块的说明文件方面,相关翻译还是不足,而这些资源的缺乏往往使得入门者面对模块方面缺乏详尽理解的能力。希望以后有更多高手加入这一块。

DRUPAL的本地化模块

drupal的特点就是拥有大量不同功能的贡献模块,方便各位使用者按需求安装使用。不过drupal的模块虽多,但是在中国特色的互联网环境下不少模块功能是用不了或者不好用的,幸好有一些国内开发者和durpal开发公司为我们提供了一些适合中国国情的应用模块。我尝试罗列一些,挂一漏万之处还请大家包涵。

China address field
https://www.drupal.org/project/china_address_field

针对中国的地址列表,带省市县三级联动。在建登记表的时候经常会用到。

 

China Address - 中国收货地址

https://www.drupal.org/project/china_address

这个是有四级联动中国地址,更轻量级的。

 

Drupal 7 通过form API 建立无刷新的图片上传功能

表单是网站常用的,不可缺少的。而通过表单建立图片上传也是刚需,基本每个网站都需要图片上传功能,现在比较流行的是直接无刷新上传图片,无刷新上传图片在drupal7 如何做呢?下面代码就是实现此功能。

Drupal7如何使用Entity metadata wrappers (Entity API)

Drupal7如何使用Entity metadata wrappers (Entity API)

Drupal的第三方贡献模块Entiry API提供了一个包装类wrapper,使得在处理实体类型的字段和属性的值的时候更加容易和得心应手。

注:本文翻译自:https://www.drupal.org/documentation/entity-metadata-wrappers 由于英文水平有限,某些句子可能理解不是很到位,如有疑虑请自行查阅源文档。


使用wrapper包装类可以更容易的以一致的编程的方式获取和设置字段的值以及内容。
举例来说,当我们需要从一个node节点中获取某个字段的值,以下这种方法是我们经常在drupal的实体中获取值的方式:

$node->field_number[LANGUAGE_NONE][0]['value'] 

尽管这种方式在大多数情况下可以正常工作,但是这并不理想。比如:用户要求页面需要显示不同的语言或者上面的字段中的'value'并不存在亦或是一个image或file类型的字段呢?
使用Entity模块提供的metadata wrapper我们可以轻松的获取某个字段的值而不用顾虑这些,就像这样:

$node_wrapper->field_number->value(); 

Drupal中所有的Entities实体类型都有某种类型的label。实体类型的label通常是一个对用户友好的字符名称,例如:所有的节点类型都有title的属性、所有用户都有用户名称,如果是一个标准的实体类型我们将很难知道如何正确的处理这些label。Metadata wrapper提供了一个统一的方法去获取不同实体类型的信息。例如:

七节课掌握DRUPAL7应用之六:drupal站点的高阶功能应用

在之前的第二节课上,我们介绍了DRUPAL的基本功能。应该说掌握基本功能的应用,也就仅能满足一个网站上线的简单需求。如果你要更多个性化设置功能,就一定要懂得drupal站点高阶功能的使用了,虽然这部分内容偏技术了些,但相信我,这并不难掌握。

第一部分:如何给文章做分类

当你发布一定数量的文章时,你可能就有对这些文章分类的需求。比如说把文章分成:技术、娱乐、时政、经济等类别。所以这里就讲下怎么实现。

在drupal中,分类模块(Taxonomy)为站点管理者提供了一个组织管理网站内容的方式。你可以通过在分类模块中设置,使用户能够为内容添加某个术语(比如标签或者元数据标记)。

分类模块是通过创建一个词汇表(Vocabularies)来包含有关的术语(term)的。一个词汇表其实一套术语组合,这里的术语换个说法可以当成是一个分类。举具体例子来说明下:
1、“国家”可以看成是一个词汇表,“美国”,“加拿大”,“德国”,“英国”等都算是术语,他们隶属于“国家”这个词汇表。
2、“音乐类型”可看成是一个词汇表,“流行”、“摇滚”、“饶舌”等都是术语,他们属于“音乐类型”这个词汇表。

ps:如果你想更多了解关于drupal分类模块的基础概念,可以看下这个博文(原文英语)。http://www.symphonythemes.com/content/taxonomy-drupal-tutorial-basic-con...

若我们想为站点的文章建立分类,就要按以下几步做:

1、建立技术、娱乐、时政以及经济这些术语
2、这些术语都属于站点文章的分类项目,所以要建立一个词汇表“文章分类”。
3、通过分类模块(Taxonomy)把技术、娱乐等等术语归为”文章分类“的子项。

是不是很容易?我们现在说下创建词汇表和术语的具体操作步骤:

创建词汇表

第一步、在后台点击进架构界面,点入其中的分类(Taxonomy),对应路径:/admin/structure/taxonomy/。
点击添加新词汇表(add vocabulary)如下图:

广州drupal聚会-2015-3-21(周六)14:30 小结(图)(附)

2015年3月21日Drupal广州聚会如期举办,有20多位Drupal新老朋友参加了本次聚会。

本次聚会有3个话题,项目开发、性能优化、html5 以及 vxplo。感谢几位演讲嘉宾为本次聚会做的准备工作以及精彩的现场分享。

演讲PPT及视频下载:

项目开发经验分享.pdf  ----- 分头诗人

性能优化(待传) ----- 赵高薪

视频图片资料:http://pan.baidu.com/s/1c0B5y5i

七节课掌握DRUPAL7应用之五:drupal站点日常运营维护

当你建立了你的新站点后,真正艰巨工作才开始呢,运营网站就像父母养育孩子那样要学会细心照顾、耐心教导,让她在正确的道路上成长。嗯说得有点远了,本章节跟大家说下drupal站点的日常运营维护。

第一  网站运营数据分析

要想运营好网站,你首先需要了解你的网站运营状况,比如:网友都是从哪里来访问你的网站?网友最喜欢看的都是什么内容?持续关注哪些页面?还有访问网页的网友们的年龄层次怎样?性别比例怎样?。你或许会问:我怎么知道这些?不要紧,网络巨头们早就发明了一整套网站流量的分析系统,用以定位网站用户进行有针对性的网络广告投放。这方面翘楚就是谷歌公司,事实他们就是靠这项技术的应用获得大量收益而成为全球的it巨头。我们作为案例的这个发行版本也是自带谷歌分析的对接模块。

不过如大家知道的原因,谷歌分析在国内是不好用的。所以我在这里就讲下作为国内替代品的百度分析对接模块,这样更符合“中国特色”。

好先说下 百度分析(Baidu Analytics )对接模块的安装

1、先到百度分析的模块页面下载模块压缩包, 页面地址https://www.drupal.org/project/baidu_analytics

2、然后将模块安装到自己的drupal网站上去,具体操作方法可参考第四课讲到的“如何新增模块和主题”http://www.drupalla.com/node/3137

3、当模块安装好后,就可以将其开启。这样就可以进入管理后台设置百度分析模块了。访问方式从后台进入管理设置再进入系统设置点击进百度分析,对应的路径:admin/config/system/baidu_analytics 

4、进入百度分析模块后,就需要将你的百度分析账号对应的id填到Web Property ID的框内。
如果你还没有,就到百度统计的首页注册申请一个帐号就有了(地址:http://tongji.baidu.com/

5、填好后就可以对百度分析模块进行一些细节上的设置,比如是否只针对某些页面、用户角色、用户行为进行跟踪。甚至可以跟踪分析下载链接和邮件链接被点的情况,还有站内搜索也可以设置监控。此外还提供高级模式,允许你进行百度代码调用的修改。如下图

页面

订阅 RSS - 博客