drupal极快速入门,适合国人的思维:drupal anywhere 0 : node_load , node_save

论坛: 

本文适用于drupal6\drupal 7\drupal 8.

本文最下方有D7、D8的例子

下文写的时候是基于d6,但node_load、node_save一直没变,bootstrap有点不一样了,但大的变化是没的,copy index.php就行。

本文意在让大家快速上手drupal,如果你会写PHP的话,那你看完此文,应该可以将drupal看成是一个大的php-class了,别幻想有人能帮你背唐诗,要吃饱有人提供饭了你还得咀嚼
开篇:想不用键盘敲代码而学好drupal的请离开,也不需要再学drupal了,因为永远学不好
明意:drupal是复杂的,正如生活是复杂的,但有些人仍然活得很好,因为他们的起点就比别人好很多(出生
好);同理,要学drupal学得好,就要有一个好的出发点.我们是大人了,不是小学生,学习不是真的都需要看图会话才会操作.copy一下代码吧,世界
变得很简单.
1.drupal只是工具,不要去适应工具,要去应用工具.正如你不想委屈你的脚去适应你将要买的鞋一样.
2.handbook的意思是手册,不能翻译为教科书,所以没必要按着handbook去做,你们搜索学习drupal的时候,可以搜索guide,本文就是一个guide
3.drupal的theme机制比他的api或者hook(模块)机制要复杂好几十倍,甚至至今天,除非必
要,我不会去深入研究drupal的theme,别以为drupal的theme就是那些放在sites/all/themes上的,还有放在模块上的
呢.但drupal的精髓却是”api”和”hook”,学习不要舍本求未去了.新手不要去学theme,花时间去学api,事半功倍
4.drupal除了工具还是工具:discuz是建论坛的,wordpress是建博客的,joomla是小
公司发布站的,moodle是建在线教育站的,drupal是干什么的?drupal就是拿来做上面几个程序不能很好做到的站的,drupal也能做上面
的事,只是有句话叫:术业有专攻.
——————————————————————————————–
[drupal anywhere 1:]:安装好drupal,这里没什么好说的,不会的就点这里的连接:drupal是什么,drupal版本选择,drupal的安装前准备
[drupal aynwhere 2:]:装完不要急着去用drupal,drupal不像我们平时用的discuz,装完就是一个完善的论坛,原始的drupal只是个垃圾.要了解drupal,最好是学着去安装http://drupal.org/project/admin_menu ,这个模块(国内翻译可叫插件)安装完后,就像开始菜单于windows,是一个必装模块.装完这个模块后,才慢慢地到处点击drupal去了解吧.安装模块教程.这样你就能快速上手drupal了,记住,每个连接都点一下.
[drupal aynwhere 3:]永远记住,drupal只是个工具,现在就用drupal做第一件事:发表文章,修改文章,显示文章.
[发表文章:]http://yourdrupalsite.com/node/add/page  , 对应哪个图形界面?自己用admin_menu这个模块查看
这不是很容易吗?对,但我要讲的是,从一开始,你就学习用api去显示他们,顺序是反过来的,逆向学习法麻.
[显示文章:]在drupal的根目录下,建立下面一个PHP文件,例如叫node_load.php吧:内容就用下面的(只要三行,有两行还是通用的!)
<?php
require_once ‘./includes/bootstrap.inc’;
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
print_r(node_load(1));
?>
然后用浏览器打开:http://youdrupalsite.com/node_load.php看看显示什么,对比一下http://yourdrupalsite.com/node/1的显示
然后对比一下这个node_load.php与drupal的主页的index.php的代码有什么不同,于不
同中发现大道理.右键查看源码,记住是查看源码,看看结构,仔细看看结构!记着这结构.自己想办法看看能不能在我上面三行的基础上输出文章的标题(只显示
标题).如果想破头也想不到,就看我的答案吧,真不希望你看答案,实在太简单了:
[修改文章:]这里我们要用代码的方式实现http://yourdrupalsite.com/node/1/edit的修改,永远记住print_r以drupal的重要性
在根目录下新建一个文件叫node_save.php吧
<?php
require_once ‘./includes/bootstrap.inc’;
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//////////////////////
$nid=1;//要修改什么文章啊
$node=node_load($nid);//[显示文章:]
print_r($node);//了解一下这个node的结构,如果你不记得了
//////////////////////
$body=$node->body;//读取内容,准备修改
$body=”我想修改的内容放这里,或者使用正则表达式”;
$node->body=$body;//修改完后,给body重新赋值
node_save($node);//保存
$node=NULL;//养成习惯,不用的对象马上清空了
/////////////////////
?>
将这个代码,比较一下node_load.php或者index.php,再对比一下print_r($node),在比较中掌握真理,记住print_r($node)的应用,要改什么都可以.需要了解更多,请点击.
[发表文章:]用代码实现http://yourdrupalsite.com/node/add/page的功能,有了上面修改的基础,这里我不解析你都猜到了吧,还是那句,记住print_r($node)将有助于你了解代码
<?php
require_once ‘./includes/bootstrap.inc’;
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
/////////////////////////////////////////////////
//这个地方你可以直接跳过,不理解也行,直接复制吧
$node=(object)$node;//$node= new stdClass;这样也行
//注意,下面的结构几乎不用记,忘记了就print_r(noad_load(1));
$node->nid=0;//这样的做法是为了让保存后可以将$nid调回,drupal6特有
$node->type = ‘page’;//类型为page
node_prepare($node);//自动将默认的项填写了,如作者,时间等
$node->uid = 1;//用最高级别权限执行,uid=1时正好是系统管理员,你自由可以修改这里
$node->status = 1; //发表,0则为不发表
$node->promote = 1;//是否放罢到首页,注意这里设置为1时会自动将status强制设置为1
$node->changed = $node->created;//标记为新建,可有可无
$node->sticky = 0;//是否在主页置顶
$node->format=2;//完全使用html,为1时,会过滤iframe等一些HTML
/////////////////////////////////////////
$node->title=”我是标题”;
//$node->field_source[0][value]=”我系CCK的字段”;//这个在你安装CCK后才有意义
$node->body=”我是正文”;
//$node->taxonomy=array(1,2);//我属于分类1及分类2,注意,这个要生效,必须在后台先设置这些分类可以用于这个内容类型
node_save($node); //保存
//$nid=$node->nid;//这句将新生成的nid返回,有时很有用.
$node=NULL;
?>
[总结:]假设你已经有了一定的PHP基础,那么想想,你随便在网上找一个静态模板,放在根目录下,然后调用上面的三段代码,一个简单的动态网站,不就可以做出来了么?当然是非常简单的.
如果你再关注一下dbquery的话,drupal不就是略有小成了?
你会看到,我是完全忽略drupal的theme机制的,但并不是说我不会drupal的theme,有空我再专门整理关于theme的资料,说实话,theme,新手不要去碰,你学theme,不如花时间学习api
最后:要学习好drupal,记住一个关键词:google drupal api
此文是我根据我博客中的drupal anywhere 0-8的八篇文章融合整理起来的.希望大家支持.[新手不要看到代码就晕哦,这样学不好drupal的]
[drupal 7的版本]
下面的代码放在/drupalsiteroot/demo/文件夹下,例如一个叫demo.php的文件内
//该文件用于批量整站导入,function tsearch_indexnode
//测试该文件的时候,可以与clear.php清空索引配合
//网页测试http://www.anetb.com/tsearch/demo/commerce/search.php

$dir=dirname(__DIR__);chdir($dir);
define('DRUPAL_ROOT', $dir);
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//批量复制50篇文章
for($i=0;$i&lt;50;$i++){
   $node=node_load($i);
  $node-&gt;nid=NULL;
  $node-&gt;vid=NULL;
  $node-&gt;type="page";
  $newnode=node_save($node);
}
注:在drupal 8中,node_load后,直$node->field_XXX即可以输出内容,与drupal 6略有不同。
例如,我会在node.tpl.php上引用别的node,是这样写:
    $nodeobj=node_load(1);
print “<pre>”; print_r( $nodeobj->field_trackself);print “</pre>”;
$nodeobj=NULL;

QQ群:227600605

关于drupal anywhere \ drupal commerce\ drupal crawler cms

email:lihaojiang_1@163.com