现在我们到了 philosopherbios_profile_tasks() 的最后一部分。我们已经看到了调用 drupal_get_form() 的结果是让提交处理函数设置默认主题。让我们继续分析 philosopherbios_profile_tasks() 函数,看看表单数据处理完成后发生了什么:
if ($task == 'philosopherbios_pick_theme') { $form = drupal_get_form('philosopherbios_theme_form', $url); // See if the form was processed: if (variable_get('philosopherbios_theme', FALSE)) { variable_del('philosopherbios_theme'); $task = 'profile-finished'; } else { return $form; // try again. } }
调用 drupal_get_form() 以后,我们需要有一种方法能够确认表单处理函数是否的确被调用了。换句话说,我们需要确认用户的确处理了主题选择画面。我们可以通过查看 varialble 表中的 philosopherbios_theme 变量是否被设置来确认这一点。
回忆一下,我们在 philosopherbios_theme_form_submit() 函数的开头使用了variable_set()。所以现在我们可以根据那个变量是否存在来判断表单提交处理函数是否运行过。
如果 variable_get('philosopherbios_theme', FALSE) 返回 FALSE,那么我们就知道提交函数并未运行过。于是执行 else 代码块,把表单送回给用户。
但是,如果 variable_get('philosopherbios_theme', FALSE) 返回 TRUE,我们就知道提交处理函数已经运行过了。我们需要做些清理工作,并把控制权交还安装程序。
对于我们的安装大纲,清理工作很简单。我们只是在 variable 表中留下了一个变量,因此我们用 variable_del() 删除它:
variable_del('philosopherbios_theme');
为了把控制权交还安装程序,我们只要通知它大纲任务均已完成即可。这是通过把 $task 设置为 profile-finished 并允许函数返回实现的。
再回头看一下安装程序,用户选择一个主题然后点击“Save and continue”:

图 9-10
表单被处理;主题被启用、初始化并设置为默认;删除额外的数据;控制权交还安装程序。从此处开始,安装程序将进行安装过程的最后一个画面:

图 9-11
这就是全部!如果我们进入新站点四处看看,我们将发现所有内容类型 (Quote, Biography, News Brief) 在 Create content 下都是可用的。当新闻简讯发布时,触发器就会被激活。philquotes 和 goodreads 区块已经可以用来在 Administer | Site building | Blocks 页面上进行配置。我们的安装大纲让管理员可以选择发送邮件,正如 emailusers 模块提供的功能。
提示:想预先配置你的区块吗?
如果多做些工作,安装大纲就可以把 philquotes 和 goodreads 区块加入默认主题。这需要在 blocks 表中做些底层的工作。研究这个问题可以从这里开始: modules/block/block.admin.inc,特别是 block_admin_configure_submit()函数。
现在我们已经配置好了我们的自制发行版。剩下的工作是把它打包。
评论
发表新评论