有个技术问题需要大家出出主意

#1 叠良户

用SpeedPHP做了一个简单的文章管理系统,在附件。
内部嵌有xheditor,需自己下载到/pub下。
数据库建article,表格在附件,执行sql语句导入。
页眉页脚没有,可以自己添加。

现在有一个问题就是一对多关联分页没有解决,请大家出出主意,或者可以给个解决方案。谢谢。谷歌

2012-09-28 11:31:07

#2 278086346

帮忙顶以下吧,问题我解决不了,下载案例来学习....

2012-09-28 11:47:52

#3 叠良户

278086346 发表于 2012-9-28 11:47
帮忙顶以下吧,问题我解决不了,下载案例来学习....
谢谢谷歌

2012-09-28 12:13:49

#4 jake

路过帮顶。



PS:对这种直接扔出代码的做法无感。

2012-09-28 12:30:30

#5 叠良户

jake 发表于 2012-9-28 12:30
路过帮顶。
绝不是扔代码,发代码是为了能提供主意的帮助者更好的理解我的意图。
关于这个分页的问题我是把本站的问题及回答都看过了,试过了,都不行,也百度过。所以才出此下策。
请老大莫批评。
谢谢

2012-09-28 15:15:27

#6 jake

叠良户 发表于 2012-9-28 15:15
绝不是扔代码,发代码是为了能提供主意的帮助者更好的理解我的意图。
关于这个分页的问题我是把本站的问 ...
不是批评。

不过实话说,很少人会看这种不提问题直接放压缩包的。

2012-09-28 15:34:36

#7 叠良户

jake 发表于 2012-9-28 15:34
不是批评。

不过实话说,很少人会看这种不提问题直接放压缩包的。
嗯,下次提问,一定纠正。谢谢。
{:soso_e100:}

2012-09-28 15:38:30

#8 meieiem

呃,你两个表没有关系啊....

2012-09-28 15:44:41

#9 meieiem

新手?我写两个月了,没用过一对多,不过看了一下手册,你应该在lib_article 表建一个pid 对应lib_artclass里的id,而lib_artclass 里可以直接将主键弄成pid自增,ID在这里面就没用了,
或者 删除pid而将$linker里面的mapkey改成id///这一句我不确定,应该是这样
然后就可以使用一对多了,

2012-09-28 15:54:38

#10 叠良户

meieiem 发表于 2012-9-28 15:54
新手?我写两个月了,没用过一对多,不过看了一下手册,你应该在lib_article 表建一个pid 对应lib_artclass里的 ...
谢谢,都是新手。我要解决的不是关联的问题,而是关联后输出分页的问题。{:soso_e100:}

2012-09-28 16:30:49

#11 meieiem

有一个,'limit' => '2,1',  这里$linker里面可以设置这个值, 不过我猜既然这里提供了limit,那么可能没有直接可以使用的spPager,可能需要自己实现一个,或者能不能在linker类里面加一个方法,将用来获取和设置关联表的spPager

2012-09-28 17:57:44

#12 叠良户

meieiem 发表于 2012-9-28 17:57
有一个,'limit' => '2,1',  这里$linker里面可以设置这个值, 不过我猜既然这里提供了limit,那么可能没有直 ...
你的想法非常好,不过,新手实现比较困难。谢谢。

2012-09-29 08:14:34

#13 meieiem

试了一下,发现一个新问题,你这个需求最好是分开处理,因为一对多查询的目标功能里面就没考虑过分页问题,它只是为了解决一对多来处理的,比如,你的条件是pid=1  如果条件是pid<3  那么就会有三批数据,ipd=0 pid=1 pid=2,这里分页上就不好处理了,原本类的设计就不处理分页,你会产生在一对多下分页的想法,原因是因为你确认你的查询只会产生一批数据,而对于spLinker来说,并不确认,所以无法分页.

还不只如此,一对多,是一表对多表,这里一直用到的都是1对1,如果1对多,那更麻烦了.

这种需求,明确在,你确认,只会产生一批数据,这需要你自己来实现分页函数,或者换其它方法来实现吧

class lib_artclass extends spModel{

    var $pk = "id"; // 每个留言唯一的标志,可以称为主键

    var $table = "lib_artclass"; // 数据表的名称
   
    var $linker = array(
      array(
        'type' => 'hasmany',   // 一对多关联
        'map' => 'article',    // 关联的标识
        'mapkey' => 'id',
        'fclass' => 'lib_article',
                'fkey' => 'pid',         
                //'countonly'=>'true',       
                // 'limit' => '2,1',  
        'enabled' => true
      ),
    );
       
        var $pagers=array();
       
        //这里应该处理 关联的标识来找到对应的关联表,偷下懒,直接当单对单处理了
        //只能处理数据为单批的情况
        function linkerPager($map,$conditions,$page,$pageSize)
        {
                //对应的linker设置
                $linker=&$this->linker[0];       
                //找到一条数据       
                $mainRow=$this->find($conditions);
               
                $subClass=spClass($linker[fclass]);
                //我对spPager理解得不是很好,这里进行了一次查询,但是查出来的数据没有用
                $subClass->spPager($page,$pageSize)->findAll(array($linker[fkey]=>$mainRow[$linker[mapkey]]));
                $this->pagers[$map]=$subClass->spPager()->getPager();
               
                //设置limit
                $linker['limit']=(($page-1)*$pageSize).','.$pageSize;
               
                return $this;
        }
       
        function getLinkerPager($map)
        {
                return $this->pagers[$map];
        }
}

?>
这个实现了你想要的效果,测试
class test extends spController{
        function index()
        {
                $artclass = spClass("lib_artclass");
                $conditions= "id=1";
                $page=1;
                $pageSize=5;
        $artresults = $artclass->linkerPager('article',$conditions,$page,$pageSize)->spLinker()->findAll($conditions);   
                $pager=$artclass->getLinkerPager('article');
                print_r($pager);                 
        }
}
?>

2012-09-29 09:40:48

#14 叠良户

叠良户 发表于 2012-9-28 16:30
谢谢,都是新手。我要解决的不是关联的问题,而是关联后输出分页的问题。 ...
{:soso_e100:},非常感谢,你是一个有思想的程序员。向你致敬。{:soso_e181:}

2012-09-29 15:10:39