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

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

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

广州drupal聚会啦

      聚会目标:让你不虚此行

        亲们,广州应该半年多没聚会啦,有空就来吧

        这次聚会邀请了多位大神分享drupal经验

        赞助商公司也有可能提供多个待遇丰厚的广州drupal岗位

 

时间:2015.3.21(周六)下午2:30  

地点:广州大道南448号财智大厦1802室       

本次活动组织者:浩江(drupal anywhere (link is external)作者,我的微信或手机:15918779497,加微信请注明聚会,以免我错过结识新朋友哈),赵高欣、分头诗人、nfemuboy

协办&鸣谢:Drupal中国(http://drupalchina.cn

vxplo互动大师公司提供(www.vxplo.com (link is external)):提供会议场所、零食、饮品

他们的后台也是用drupal的,大家顺便也可以一起分享经验

 

会议主题可能与这几个有关:drupal下的html5 & 性能

 

邀请到@赵高欣 进行有关性能的分享

邀请到@分头诗人 进行有关drupal 开发经验的分享

邀请到vxplo互动大师公司CEO进行HTML5的精彩案例 (link is external)的分享

希望更多drupal爱好者主动参与聚会分享!

如果时间充分,我就代表drupal anywhere团队串串场,也做做最近用drupal创业的经验分享和部分开发经验分享。

drupal自定汉化

drupal汉化的方式教程已经说过了,说下自定义汉化,但是仍然有很多没有汉化的字符,这些可能是来自第三方的,也有可能是不需要汉化的。这时候需要我们自己汉化了

例如我在编辑页面加了个保存草稿,和保存对于客户来说概念上不好区分,因为他们发表文章需要审核,所以要改为提交,还有列表页的新建提示的红字不好看,改回原来的new

新建一个后缀名为.po的文件例如drupal-tying.zh-hans.po

然后里面添加代码 

msgid "Save configuration"
msgstr "保存"
msgid "Save"
msgstr "提交"
msgid "Participants"
msgstr "发信人"
msgid "Last Updated"
msgstr "发送时间"
msgid "new"
msgstr "new"
msgid "Actions..."
msgstr "操作"

msgid "英文需要翻译字符“
msgstr   ”翻译后字符“

在dupal中只有t()函数里面的字符可以翻译

drupal与普通编程的相同之处

说说drupal的开发的一些想法。

可以吧drupal看做一个集成了大量api的框架

当然有很多东西必须是必须要用的,例如hook_memu,drupal表单、数据库操作函数、权限处理

很多东西不是必须要用,可以直接使用我们常用的php文件,例如自定义模板,当然对已这个框架来说需要记住的api太多了

这么说可能不是很直观,举个例子吧

/*
 *hook_menu
 *这个函数对于有一些需要自定义的页面的人来说是必须的,例如我想做一个提供接口的api给其他程序
 *
 *user_is_logged_in() 这个是判断用户是否为登陆,drupal定义函数,登陆返回true,否则为ffalse,
 *通过这里我们可以根据需求自定义访问的权限,当然不是drupal的方式,但是他可以实现一些需求,drupal的方式通过hook_permission()
 */
function hook_menu(){
    $items['test']=array(
        'title'=>t('_test_hello'),
        'page callback' => '_test',//页面调用函数
        'access callback' => user_is_logged_in(),//如果全部用户可以反问可以为true
    );
    return $items;
}
function _test_hello(){
  $output = "hello word!";
  return $output;
}
?>

访问localhost/drupal/test, 发现hello word! 出现在了前台的内容页面,当然这个只是最简单的例子,但是对于编程来说这是一种方式,假设当views没有开发出来的的时候,我需要在_test_hello()中操作数据库,这是最原始的解决方法,对于views出现之后,对drupaler来说这也是不推荐的,随便在数据库里面新建个表article吧,然后字段随便建几个和node相同吧,多个nid和node以便关联,既可以修改了

Drupal获取保存外部图片文件的方法

Drupal获取保存外部图片文件的方法

function get_external_image($url) { 
    $external_image = file_get_contents($url);
    $parsed_url = parse_url($url);
    $name_dest = rand(1000,9999)."_". basename($parsed_url["path"]);
    $file = file_save_data($external_image, 'public://'.$name_dest , FILE_EXISTS_REPLACE);
    if (is_object($file) && file_exists($file->uri)) {
        $file->status = 1;
        $file = file_save($file);
        drupal_write_record('file_usage', $file);
        return (array) $file;
    }
    return null;
}

get_external_image("http://www.drupalla.com/logo.gif");

drupal8初探,d8和d7关于模块通用的方式

drupal8的bate版本出来了,据说d8手册已经出来了,在百度上面搜了下没有找到 ,T-T,唉,只能自己没事瞎琢磨了

这些只是自己瞎猜测的没有进行实践

发现目录结构变化了很多,网站的theme和module该到了根目录themes和modules里面。 同时兼容d7的方式sites/all/的方式

在sites下的readme 是这么说的,大意差不多

This directory structure contains the settings and configuration files specific
to your site or sites and is an integral part of multisite configurations.

It is now recommended to place your custom and downloaded extensions in the
/modules, /themes, and /profiles directories located in the Drupal root. The
sites/all/ subdirectory structure, which was recommended in previous versions
of Drupal, is still supported.

See core/INSTALL.txt for information about single-site installation or
multisite configuration.

关于模块

然后看了下d8的模块目录,看了下dblog模块,发现这个就是watchdog的记录插入数据库方式

name.module文件最醒目,和d7差不多

Drupal中inc文件的理解和用法

Drupal中inc文件是可以调用的php文件。

Drupal中Inc文件作用是用来定义函数

Drupal中Inc文件的用法:

1、导入的方法module_load_include();

1
2
3
4
5
6
<?php
// Load node.admin.inc from the node module.
  module_load_include('inc', 'node', 'node.admin');
  // Load content_types.inc from the node module.
  module_load_include('inc', 'node', 'content_types');
?>

2、菜单调用的方法

页面

订阅 RSS - 博客