{ pager } 这个要怎么用?

#1 kingtalc

用法:

1. 在index.php内

require(SP_PATH.'/SpeedPHP.php');
require(压缩包内的functions.php文件);
spRun();


2. 控制器内


// 某表的记录数务必在3条以上,否则没有分页效果
$this->results = spClass('某表')->spPager($this->spArgs('p',1),2)->findAll();
$this->pager = spClass('某表')->spPager()->getPager();


dump($this->results);


3. 模板内内引入CSS



4. 模板内显示分页,这里是yahoo2是其中一个样式名称,其他的样式名称直接看css文件

<{pager pager=$pager myclass="yahoo2" c="网址控制器" a="网址动作" arg1="第一个参数" ...}>



前三步都没问题 就是到了最后使用这个{ pager }貌似没效果  什么都没输出
(我这样写的 { pager pager=$pager myclass="yahoo2" c="product" a="listAll" })
$this->results ; $this->pager 这两个都有值 没问题

jake 大哥 麻烦帮忙看下 哪有问题

2010-07-06 16:24:16

#2 jake

dump($this->results); 的内容是什么?还有dump($this->pager);

然后,在页面显示中,右键查看源文件,看看
{ pager pager=$pager myclass="yahoo2" c="product" a="listAll" }这里怎么显示。

functions.php里面的代码已经正确包含了对吗?

2010-07-06 16:55:12

#3 kingtalc

dump($this->results);  这的里面是array套array的查询数据
dump($this->pager); 这个里面是:
Array
(
    [total_count] => 13
    [page_size] => 5
    [total_page] => 3
    [first_page] => 1
    [prev_page] => 2
    [next_page] => 3
    [last_page] => 3
    [current_page] => 3
    [all_pages] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

)

写的格式是:<{ pager pager=$pager myclass="yahoo2" c="product" a="listAll" }>
源文件里面显示:<> (里面什么都没有)

functions.php放在SpeedPHP包下面
页面上是:
require(SP_PATH."/SpeedPHP.php");
require(SP_PATH."/functions.php");
spRun();

2010-07-06 17:00:41

#4 kingtalc

用这种循环的就是对的
{* foreach from=$pager.all_pages item=thepage*}

    {*if $thepage != $pager.current_page*}

       <{*$thepage*}>

    {*else*}
       {*$thepage*}
        {*/if*}
{*/foreach*}

2010-07-06 17:01:51

#5 kingtalc

顺便在弱弱的问个问题:
如果是自己写的sql不使用findAll();
$this->pager = $recProductDao->spPager()->getPager();
这个要怎么赋值...

2010-07-06 17:04:25

#6 jake

用这种循环的就是对的
{* foreach from=$pager.all_pages item=thepage*}

    {*if $thepage != $pager.c ...
kingtalc 发表于 2010-7-6 17:01
你的smarty限定符是{**}?那么这段代码应该是:
{*pager pager=$pager myclass="yahoo2" c="网址控制器" a="网址动作" *}


另外:使用SQL的时候分页
$this->results = $recProductDao->spPager($this->spArgs('p',1),3)->findSql("select * from xxx");
$this->pager = $recProductDao->spPager()->getPager();


使用findSql也可以用spPager的,不过要注意:
1. SQL内最好不要有limit限定,因为spPager会自动加上limit的。
2. SQL内select的字段,一定要有主键。

2010-07-06 17:09:25

#7 kingtalc

smarty的限定符 我写的时候是加上了的...还是没效果

是不是哪个地方少了什么 比如 pager 这玩意?

2010-07-06 17:16:04

#8 kingtalc

有没有什么小例子之类...

2010-07-06 17:22:20

#9 kingtalc

$this->results = $recProductDao->spPager($this->spArgs('p',1),3)->findSql("select * from xxx");

红色这部分 如果我这里是调用的一个方法 查询在方法里面 要怎么处理?

2010-07-06 17:29:05

#10 jake

这个就搞不清楚了,你可以把你的代码打包传上来看看。(;P不过记得打小包些,论坛流量很紧张哦)

spPager只支持findAll和findSql两个对应的查询,那些自定义的函数是不支持的。

不过可以有更灵活的方法:
1. 比如说你的函数是 findTitles,那么在findTitle可以是findTitle($conditions, $p, $pageSize),也就是参数中带有当前页和分页大小。
2. 然后在findTitles内再进行spPager的查询

2010-07-06 17:35:41

#11 kingtalc

十分感谢jake哥

我刚才看了下 好像是没调用起 functions.php 的 function __template_pager($params) 这个方法
这个是{ pager }的时候触发吗?

2010-07-06 17:57:57

#12 kingtalc

我在functions.php的开头echo了一个值
然后再__template_pager echo了一个值

结果只有开头那个值显示出来了,说明是包含了的...但是没执行__template_pager...

2010-07-06 17:59:15

#13 kingtalc

测试了下  应该就是因为没调用起注册的(spAddViewFunction)的函数

2010-07-06 18:29:06

#14 kingtalc

搞定 我在页面上导入import(APP_PATH.'/SpeedPHP/functions.php');这个类就可以

require(进去就调用不起...

2010-07-06 18:42:57

#15 jake

我在functions.php的开头echo了一个值
然后再__template_pager echo了一个值

结果只有开头那个值显示出来 ...
kingtalc 发表于 2010-7-6 17:59
成功了恭喜你,不过这里还是得提醒一下一个关于smarty注册函数的问题:在__template_pager里面无论如何也没有输出的,这是因为smarty本身屏蔽了注册函数内的输出,所以注册函数只能返回值。

2010-07-06 20:53:20

#16 yuanjianhua

还有个问题,就是模板中我要传入几个参数的时候,当空的时候就查不到数据,而且获取的数据的位置不对

2010-07-07 07:43:12

#17 hkbaby

我的也是这个问题  在spAddViewFunction('pager', '__template_pager');前面echo输出显示值,但在function这个构造函数里的值显示不出来;   就是这样
echo "1";
spAddViewFunction('pager', '__template_pager');
function __template_pager($params)
{echo "2";
‘1’显示出来,‘2’显示不出来

这问题怎么解决?    楼上的 import(APP_PATH.'/SpeedPHP/functions.php'); 这样载人我的也没值显示      请教下各位---

2010-07-07 08:41:35

#18 jake

我的也是这个问题  在spAddViewFunction('pager', '__template_pager');前面echo输出显示值,但在function ...
hkbaby 发表于 2010-7-7 08:41
请看本帖15楼!

2010-07-07 09:57:35

#19 hkbaby

{pager pager=$pager myclass="yahoo2" c="news" a="defaulthand"}   在模板里这个是不是没有显示?

2010-07-07 10:01:37

#20 hkbaby

控制器里是这样
$this->results = spClass("lib_news")->spPager($this->spArgs('page',1),10)->findAll(null,'ID desc');
$this->pager = spClass("lib_news")->spPager()->getPager();
模板里{pager pager=$pager myclass="yahoo2" c="news" a="defaulthand"}这个怎么什么都没有,查看源文件也没有

2010-07-07 10:11:10

#21 jake

repeat
控制器内试试dump($this->results);dump($this->pager); 看看数据

2010-07-07 10:12:41

#22 hkbaby

dump($this->results);输出
Array
(
    [0] => Array
        (
            [ID] => 1
        )

     [1] => Array
        (
            [ID] => 2
        )

   [2] => Array
        (
            [ID] => 3
        )
)

dump($this->pager); 输出
Array
(
    [total_count] => 3
    [page_size] => 3
    [total_page] => 3
    [first_page] => 1
    [prev_page] => 1
    [next_page] => 2
    [last_page] => 3
    [current_page] => 1
    [all_pages] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

)

2010-07-07 10:55:34

#23 jake

这个$pager已经有数据了,那么是否functions文件没有载入呢?也就是pager函数没有被注册到模板中。

2010-07-07 11:25:56

#24 hkbaby

我在functions.php里    function前面echo "1";在模板都能输出来,

不知道是哪里的问题?  头疼

2010-07-07 11:30:37

#25 hkbaby

{pager pager=$pager myclass="yahoo2" c="news" a="index"}  在模板里这样用没错吧?

2010-07-07 12:12:30

#26 hkbaby

require(SP_PATH."/functions.php");
spRun();
报错Fatal error: Call to undefined function spRun() in D:\AppServ\admin\index.php on line 54

2010-07-07 12:45:45

#27 hkbaby

require(SP_PATH."/functions.php");
@spRun();
这样没问题吧

2010-07-07 12:47:06

#28 jake

更新了例子,直接下这个代码试试吧

http://speedphp.com/bbs/thread-679-1-1.html

2010-07-07 13:05:17

#29 hkbaby

没压缩框架  只有SpeedPHP目录
怎么我的这个还是输不出来
Fatal error: Call to undefined function spRun() in D:\AppServ\www\page\index.php on line 26
帮我看看

谢谢

2010-07-07 13:55:21

#30 hkbaby

jake给我再说下  那是什么问题怎么会报错呢?  就是刚刚下载的http://speedphp.com/bbs/thread-679-1-1.html  还是没显示出页码来。

2010-07-07 15:06:36

#31 jake

“Call to undefined function spRun()” ?你是用SP2?试试SP3看看

2010-07-07 16:16:48

#32 hkbaby

sp3也是一样的,也不显示页码,报同样的错。屏蔽掉spRun()也还是不显示页码。
  就是我30楼发的那个,页码怎么都显示不出来。

2010-07-07 17:01:03

#33 jake

Call to undefined function spRun() 是意思是spRun这个函数没找到,spRun这个函数是speedphp 3才有的。

这是最基本的程序运行,无论是显示页码还是怎么,首先都要保证程序能运行起来。下个sp3的rc版,加上我的分页例子,配置好路径,先运行了再看吧。

2010-07-07 17:28:25

#34 hkbaby

噢, 好的  。

2010-07-07 17:30:48

#35 hkbaby

好了 谢谢jake    原来是sp2的问题   下在了sp3就好了

2010-07-07 17:51:53