奇怪了
发布于:2022-01-17 09:50:54
#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