奇怪了

#1 soseek

/model/dh.php
class dh extends spModel
{
var $dh => "g";


}
?>

controller/main.php
class main extends spController
{
        function index(){

$this->display('index.html');
        }
       
}
怎么,风格/index.html,<{$dh}>显示是空白?

2011-01-30 14:04:16

#2 jake

var $dh => "g";  
? => 这符号不是这样用的吧?
另外,控制器本身的成员变量不能在模板中使用,只有$this->这样赋值的非成员变量才可以。

2011-01-30 14:42:07

#3 soseek

=_,=打错。是==

2011-01-30 15:08:16

#4 soseek

=_,=打错。是==

2011-01-30 15:08:19

#5 soseek

=_,=打错。是==

2011-01-30 15:10:33

#6 soseek

回复 2 jake


    其实我想问的是怎么样在模版和控制器里调用/model/dh.php变量

2011-01-30 15:12:10

#7 jake

就算是 == 也不行,成员变量赋值应该是 = 吧

控制器调用类的成员变量是 $a = spClass('dh'); echo $a->dh;
当然也可以简写一下 echo spClass('dh')->dh;

模板内要通过在控制器内 $this->dh = spClass('dh')->dh;  才能 <{$dh}>

PS:上面那变量,最好不要和类本身同名。

2011-01-30 15:45:26

#8 soseek

回复 7 jake


    控制器里。$this->dh = spClass('dh')->dh;
dh.php里。
function dh(){
echo "m";
}

模版里没有<{$dh}>一样在页面上显示了m。

还在拿sp练手,所以问题多多老大别见怪啊

2011-01-30 16:22:55

#9 soseek

要调用成员变量而不是类呢?

2011-01-30 16:25:45

#10 jake

回复  jake


    控制器里。$this->dh = spClass('dh')->dh;
dh.php里。
function dh(){
echo "m";
}

模 ...
soseek 发表于 2011-1-30 16:22
这几个问题我都看不懂,dh.php是一个函数库还是一个类?dh又是类名又是变量名还是函数名:L
练手的程序,建议写得比较清晰些,把变量函数名之类的都好好区分,这样更容易理解。

2011-01-30 16:33:41

#11 soseek

回复 10 jake

我大意了。是函数库放置在model文件夹

2011-01-30 16:36:27

#12 soseek

对了spAddViewFunction只能写在控制器里?

2011-01-30 17:15:51

#13 jake

写哪里都可以,这是一个函数。一般是写到控制器、入口文件、或者函数库里面。

不过一定要在模板display之前写。

如果除了控制器之外的地方,那么就要注意有没有调用到它了。

2011-01-30 17:52:14

#14 soseek

回复 13 jake

不行提示错误
./sp/model/dh.php里function showtime(){
echo date ( "Y-m-d H:i:s" );
}spAddViewFunction('SHOWTIME','showtime');

./sp/controller/main.php
spAddViewFunction('SHOWTIME','showtime');


    风格<{SHOWTIME}>

除非function showtime(){和spAddViewFunction('SHOWTIME','showtime');
同在控制器里。哪里出问题了呢?


回到我最初的问题上我在
./sp/model/dh.php里有个函数$kkk我赋值了77给他然后想在模版了调用函数$kkk要怎么做?用哪个函数

2011-01-30 18:18:38

#15 jake

错误提示是什么呢?

参考这篇文章http://speedphp.com/post/view-functions.html

2011-01-30 20:50:09

#16 soseek

回复 15 jake

老大难道你都没有看我的回复吗?编写方式在前回复
    Smarty Error: Plugin函数名" not callable

2011-01-30 22:58:50

#17 soseek

看来我的表达方式很有问题,唉

2011-01-30 23:01:27

#18 soseek

回复 10 jake


    控制器里。$this->dh = spClass('类')->dh;

函数文件dh.php里。
function 类(){
echo "m";
}
在模版里没有输入<{$dh}>的情况下,页面上依旧显示了m。

2011-01-30 23:21:29

#19 jake

类的写法是class xxx,不是function xxx,上面的类()应该是函数吧。函数不是用spClass类用的。

<{SHOWTIME}> 这种写法是模板中的函数
<{$dh}>这种写法是模板中的变量

你是希望在模板中,<{$dh}>没有值的时候,<{SHOWTIME}>就默认显示,如果<{$dh}>有值,就显示<{$dh}>的值对吧?也就是函数的默认值在模板中如何实现。

首先是在控制器载入函数定义文件import(文件名);使用import的时候,要保证文件在model目录中。
然后在函数文件中,注册函数到模板。当然,函数不能用echo,要用return,这是模板函数的规定,无论在模板函数中echo什么东西都不会出现,只能return才会出现。具体参考文件http://speedphp.com/post/view-functions.html(请仔细看看,内有全过程)

函数
function showtime($params){
$dh= ($params['dh'] == null) ? time() : $params['dh']; //这里是默认值
return date("Y-m-d", $dh);
}

最后,在模板中使用<{SHOWTIME dh=$dh}>即可

2011-01-31 08:52:47

#20 soseek

回复 19 jake


    class dh extends spModel{
function tpl_date(
$params){
$format=$params["format"];
$timestamp=$params["timestamp"];
return date($format , $timestamp);
}
spAddViewFunction('view_date','tpl_date');
}
?>
提示第九行错误
Parse error : syntax error, unexpected T_STRING, expecting T_FUNCTION in /model/dh.php on line 9

2011-01-31 15:47:08

#21 jake

这个错误的意思,是你在类里面写了执行函数的代码。spAddViewFunction('view_date','tpl_date');这行不能放这个位置,因为那是在类的里面。

类的成员函数和普通的函数是不同的。可以搜索一下相关的文章看看。

2011-01-31 15:59:28

#22 soseek

回复 21 jake


   嗯嗯,
对了这样
class dh extends spModel{
function tpl_date(
$params){
$format=$params["format"];
$timestamp=$params["timestamp"];
return date($format,$timestamp);
}
}


spAddViewFunction("view_date", "tpl_date");
?>
也是不行

spAddViewFunction("view_date", "tpl_date");写到控制器也是显示一样错误Smarty Error: Plugin"view_date" not callable

2011-01-31 17:46:15

#23 jake

还是那句,类的成员函数和普通函数不同的。例子中的tpl_date是一个普通函数,而你这上面的tpl_date是dh类的成员函数。

这样注册:spAddViewFunction("view_date", array('dh', "tpl_date"));

http://speedphp.com/post/view-functions.html 中有说明

2011-01-31 17:51:49

#24 soseek

回复 23 jake


    class dh extends spModel{
function tpl_date($params){
$format=$params["format"];
$timestamp=$params["timestamp"];
return date($format,$timestamp);
       }
}
spAddViewFunction("view_date",array('dh',"tpl_date"));
?>

Fatal error: Cannot redeclare class dh in /home/00/sp/dh.php on line 10

2011-01-31 19:58:00

#25 soseek

说明手册能否有个例子代码下载/

2011-01-31 20:26:53

#26 jake

上面的错误是,你在别的地方也有个叫dh的类在,所以PHP提示类重复了。

例子暂时没有,等下写个给你

2011-01-31 20:33:20

#27 jake

上面的错误是,你在别的地方也有个叫dh的类在,所以PHP提示类重复了。

例子暂时没有,等下写个给你 ...
jake 发表于 2011-1-31 20:33
例子:smartyfunction.zip
    先得设定框架的路径,另外我已经对部分类名改了一下。也建议你把类名都改改,让它们可以很好地区分开来。

2011-01-31 20:43:26

#28 soseek

{:3_59:} 回复 26 jake


    多谢老大!!

2011-01-31 20:49:46

#29 soseek

老大例子里面
        public $pk = "gid";
        public $table = "guestbook";
是干嘛用的?

2011-02-01 01:59:21

#30 jake

老大例子里面
        public $pk = "gid";
        public $table = "guestbook";
是干嘛用的?
soseek 发表于 2011-2-1 01:59
没什么用的,如果这个m_dh有链接数据库的话,那么这两个是主键和表名,不过我注释掉链接数据库的代码了。

2011-02-01 07:41:58

#31 soseek

回复 21 jake


    spAddViewFunction("view_date", array('dh', "date"));
是把dh中的date注册到模版,那么如果我要在控制器中使用而不是模版呢?我找不到对应的函数

2011-02-02 19:08:43

#32 jake

对应的函数是 dh::date(); 或者是 spClass('dh')->date();

建议真的 好好 看看 PHP基础。

2011-02-02 19:26:21

#33 soseek

回复 32 jake


    嗯嗯

一定~~~

2011-02-02 23:28:35