在自定义页面中如何调用区块(2.0.X)

作者 文明猪 于 1151685813
现在页面设计人员都很有创意,而xoops基本功能没有办法满足,比如他们会把一个区块的内容放置到很随意的位置,这样有时会使开发人员很头痛,下面是自定义页面的区块调用两种方法(当然,您也可以自己直接写代码实现区块实现的功能):

条件:区块存在,页面非正常的xoops页面,而是我们自己定义的。
此程序在2.0.13及2.0.14上是通过的。

示例:美工想要一个页面,要求:header和footer是和整站统一的,而中间:
三个区块构成第一层,
一个区块构成通栏第二层,
两个区块构成通栏第三层

好了,这是一个单独的页面,而这个页面中共使用了3+1+2六个区块,按现在的xoops功能是达不到如此的页面效果,那么我们就写一个单独的页面吧:
下面是这个演示页面的布局架构
<?php
include "mainfile.php";//包含主配置文件,需要按照此文件的路径变化
include "header.php";//包含header文件,需要按照此文件的路径变化
//第一层
echo "<table><tr><td>";
//这里是第一层第一个区块代码
echo "</td><td>";
//这里是第一层第二个区块代码
echo "</td><td>";
//这里是第一层第三个区块代码
echo "</td></tr></table>";

//第二层
echo "<table><tr><td>";
//这里是第二层区块代码
echo "</td></tr></table>";

//第三层
echo "<table><tr><td>";
//这里是第三层第一个区块代码
echo "</td><td>";
//这里是第三层第二个区块代码
echo "</td></tr></table>";
include "footer.php";//包含footer文件,需要按照此文件的路径变化
?>


好了,架构布置了,现在开始填写该填写的代码吧:
我们首先查看需要的区块的安装id,方法我就不讲了,很多的。
在该插入区块代码的地方用如下代码:
$thesearchblock = new XoopsBlock(1659);//1659是区块的id,一般网站有这么多区块的的可能性不大
//下面做一下区块是否存在的判断,以免死掉
if(is_object($thesearchblock) && $thesearchblock->getVar('bid')>0){
	$bresult =& $thesearchblock->buildBlock();
	if ($bresult) {
	$xoopsTpl->assign_by_ref('block', $bresult);
	$btpl = $thesearchblock->getVar('template') != '' ? $thesearchblock->getVar('template') : "system_block_dummy.html";
	$bcontent =& $xoopsTpl->fetch('db:'.$btpl, 'blk_'.$thesearchblock->getVar('bid'));
	echo $bcontent;
	}
}

这样就能在指定的位置显示指定的区块了
此方法是使用了区块的原模板

另外一种方法,通过直接调用区块的程序获得数据,如:
include_once XOOPS_ROOT_PATH."/modules/newbb/blocks/newbb_block.php";//首先我们引用要调用的区块执行文件
//传递区块的配置选项参数,请分析一下区块设置与执行的代码,这样才能知道如何配置
$options=array(0 => 'time', 1 => 4, 2 => '360', 3 => '2', 4 => '1', 5 => '0', 6 => '177');
$allnewtopic = b_newbb_topic_show($options);//获得区块执行后返回的数组
//print_r($allnewtopic);//如果不知返回什么内容,就用这种方法查看一下
$i=0;
//下面是将内容按照我们网页的要求显示出来
echo "<table>";
foreach($allnewtopic['topics'] as $atopic){
	$title = xoops_substr(htmlspecialchars($atopic['title']), 0, 30);
	if($i>0){$linestyle=" style='text-align:left;border-top:1px solid #969696;background-color:#ffffff;padding:5px 0px 5px 0px;'";}else{$linestyle=" style='background-color:#ffffff;text-align:left;padding:5px 0px 5px 0px;'";}
	echo "<tr><td width=\"1%\"".$linestyle.">·</td><td width=\"59%\"".$linestyle."><a href=\"".XOOPS_URL."/modules/newbb/viewtopic.php?topic_id=".$atopic['id']."&forum=".$atopic['forum_id']."\" target='_blank'>".$title."</a></td><td width='40%'".$linestyle.">".$atopic['time']."<br />".$atopic['topic_poster']."</td></tr>";
$i++;
}
echo "</table>";

这里是一个页面中调用论坛区块代码获得数据的方法,我们从区块的执行代码中获得了数据,然后将数据按我们的要求显示出来。

呵呵,就到这里吧,现在德国和阿根廷下半场进行了40分钟,1-1平。
xoops.org.cn xoops中文社区 文明猪

来自: http://xoops.org.cn/newbb/viewtopic.php?topic_id=8142&post_id=30751