11、设置版块宽度:preferred_width() 设置 block 的 prefer width 。 Moodle 对 block 的 width 的处理过程包括 2部分:首先 moodle 会检索在课程页里的每一个 block 的 prefer width ,然后使用最大的 prefer width 作为所需的值。因此当你设置 prefer width 时, moodle 不一定保证一定以这个 prefer width 来显示,但显示该 block 时应该不会小于该 prefered width。 所有标准的Moodle课程格式将提供180和210像素之间的任何要求的宽度,包容。当你使用下列代码时: function preferred_width(){ // The preferred value is in pixels return 200 ; } 就会使你的 block width 大于 standard 的宽度。 12、设置HTML属性:html_attributes() 该方法是用来控制处理 block 的容器的 。每一个 block 都会包含在 <div> or <table> 容器里(即block的HTML代码会包含在 <div> or <table> 里)。那么该方法可以通过添加一些HTML属性来设置包含block的容器。具体方法有下列2种: a)直接影响最终的结果(如果我们说,分配bgcolor=”black”) ,b)给容器一个 class ,从而利用CSS来控制,让我们自由定制的最终结果(这是默认情况方法)。 下面的例子就用到第二种方法。 function html_attributes(){ return array ( ‘class’ =>’sideblock block_’ .$this->name() , ‘onmouseover’=>”alert(‘Mouseover on our block!’);” ) ; } 以上代码把包住 block 的容器设置为 class=sideblock block_xxx ,这样我们就可以使用这个类,使我们的主题CSS选择器来改变该块的视觉风格(例如, “.sideblock.block_helloworld { border: 1px black solid}”)。另外把 onmouseover 赋予该 block 的容器,使得当鼠标进入该容器时,就弹出“Mouseover on our block!”。 缺省的 html_attributes() 方法: function html_attributes(){ // Default case: an id with the instance and a class with our name return array ( ‘id’=>’inst’ . $this -> instance -> id , ‘class’ =>’block_’ .$this -> name ()) ; } 如果你打算重写此方法,你应该返回默认属性,再是那些你自己添加的属性。推荐的方法是: function html_attributes(){ $attrs = parent::html_attributes(); // Add your own attributes here, e.g. // $attrs[‘width’] = ‘50%’; return $attrs; } 13、设置适用格式:applicable_formats() 该方法是用来控制 block 可以在哪里使用 。有些 block 可能开发者不希望在所有地方都能够使用,例如 “Social Activities” block 只适用于 social format 的 course ,对于 week format 的 course 并不合适,因此 block 需要设置为只有 social format 的 course 才能够添加该 block ,就要用到 applicable_formats method 。 注意:在 applicable_formats method 里定义哪些地方可以使用block,是以 page 来设置,而不是以 course 来设置。 这是因为blocks可以显示在支持它们的任何网页中。例如, quit视图页(当我们点击quit的名称,首先看到的页面)也支持blocks。 例1 : function applicable_formats(){ return array ( ‘course-view’=>true , ‘course-view-social’ =>false ) ; } 上述代码先设置了允许所有的 course 的 view.php page 都可以添加该 block ,然后再 设置不允许social format 的 course 的 view page 不能够使用它 。 例2 : function applicable_formats(){ return array ( ‘site-index’=>true , ‘course-view’=>true , ‘course-view-social’=>false , ‘mod’=>true , ‘mod-quiz’=>false ) ; } 上述代码设置了一个版块可以显示在网站首页,可以显示在除social课程的所有课程里, 也可以显示在除quiz活动的所有活动模块里。 例3 function applicable_formats(){ return array ( ‘site’=>true ) ; } 上述代码设置了一个版块只显示在网站首页(如果省略网页名称,则看作是首页,即site = site-index) 从上面的例子可以看出页面格式名称(page format name)的格式定义方法 。 例如,如果你需要设置 /course/view.php 是否能够使用block ,则它的页面格式名称是course-view。类似的,请理解一个测试页面格式名称应是:mod-quiz-view 定义格式名称的规则: 1、Moodle首页的格式名称是:site-index . 2、课程页的格式名称不只是course-view,可以是course-view-weeks, course-view-topics ,等等。 3、即使没有这样的页面,总的格式名称可以用来匹配所有选项。 在我们定义的适用格式里,我们概括了我们希望的尽可能多的格式名称。每种格式都可以被允许或不允许的,而且,这儿也有三个规则,以帮助解决这个问题:“此版块是允许到这个页面或不允许?”: a、格式名称前缀将匹配该格式名称,例如,mod将匹配所有活动模块(activity modules)。course-view将匹配任何课程,无论课程的具体格式。最后,site也将匹配网站首页(记住其完整格式名称是site-index)。 b、当决定此block是否将被允许时,有匹配您页面的更专门、更高优先级的格式名称。例如:mod,mod-quiz和mod-quiz-view 都是匹配quiz view page的。但是,如果所有三个目前都设置,mod-quiz-view将采取优先于其他两个以上,因为它是一个更好的匹配。 c、字符“*”可以用来代替任何单词。例如,mod和mod-*是等价的。在本文档的写作时,还没有实际利用“通配符匹配”功能,但它存在,以便以后使用。 d、格式名称出现的顺序不作任何区别。 14、设置定期响应cron计划 它可以允许你的block响应cron进程。它有一个定期运行的方法,不论用户是否交互。Moodle的cron.php用来运行一个计划表来执行维护任务,例如电子邮件传送和备份。它可能每5~15分钟就运行一次。 要使 block 具有任务调度功能,只需要2步 Step 1: 添加cron计划功能 function cron(){ mtrace(“Hey, my cron script is running”) ; // do something return true ; } Step 2: 在block_helloworld class的init函数里添加代码: $this->cron = 5; 这表示每5秒就会执行上面定义的cron函数一次。 注意:如果你修改了cron interval ,你必须修改 block 的 version number ,然后访问通知页安装更新才能生效。 注意:此block块的cron脚本是调用该块类型。也就是说cron并不关心该版块有多少个实例,在cron功能里,你如果需要获取版块的实例,你要自己写代码来迭代它们。 例: function cron(){ // get the block type from the name $blocktype = get_record( ‘block’, ‘name’, ‘my_block_name’ ); // get the instances of the block $instances = get_records( ‘block_instance’,’blockid’,$blocktype->id ); // iterate over the instances foreach( $instancesas$instance ){ // recreate block object $block= block_instance(‘my_block_name’ ,$instance) ; $someconfigitem=$block -> config -> item2 ; } } “my_block_name”将是版块存储的目录名称。 提示:这也意味着,创建一个block来创建cron运行计划是一个可行的办法。block的实际实例不是必需的。 15、Lists and Icons类型的block 它是一个只提供 item list 的 block type ,该 list 的每一行只显示一个项目和项目旁边的一个可选的图像(图标)。典型的例子就是 course page 里的 “administration” block 。 开发这种类型的 block ,你应该 extend block_list ,而不是 block_base 。另外,在 getContent 里不是使用 $this->content->text ,而是使用 $this->content->items and $this->content->icons array 。 例如: class block_my_menu extends block_list{ // init()方法不需要改变 function get_content(){ if( $this -> content!==null ){ return $this -> content ; } $this -> content =new stdClass; $this -> content->items = array(); $this -> content->icons = array(); $this -> content -> footer=’Footer here…’ ; $this – >content->items[] = ‘<a href=” a .php”>Menu Option 1</a>’ ; $this – >content->icons[] ='<img src=”1.gif” />’ ; // Add more list items here return $this -> content ; } } 具体参考官网:http://docs.moodle.org/dev/Blocks/Blocks_for_1.5_to_1.9#Authorized_Personnel_Only |
Moodle开发笔记9-Block开发(四)
11、设置版块宽度:preferred_width() 设置 block 的 prefer width 。 Moodle 对 block 的 width…