欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

admin.php 的变量

程序员文章站 2022-05-26 11:26:07
...
做过phpcms开发人的一定知道,phpcms提供了大量内置的变量供我们在模版中调用,比如{$position} {$title}分别代表当前的位置与文章的标题。在方便使用的同时,我们不禁要问,为什么我们可以使用这些变量?在什么情况下,这些变量才有意义?

其实,我们可以将这几个问题归结为phpcms中html文件的生成过程。一切都是从admin.php开始的,我们在后台进行不同的操作(如生成文件,图片等)将会导致admin.php包含(include)不同的文件。而被包含者又会根据传给它参数的不同而包含不同的文件,这样一路包含下去,直到调用到我们的模版。这一路上所经过的文件和admin.php本身组成了最终的admin.php。而我们可以调用的变量就是在这些文件中出现过的变量,这也是我们判断变量是否可用的标准。这不难理解,因为我们的模版文件最终也被包含在了admin.php中,而它调用的变量或许原先不在admin.php中,但此刻却也被包含了进来。

下面以模版中自定义标签如何被翻译来解释上面的内容。这个标签实现了"上一篇下一篇"的功能,标签名为{tag_上一篇下一篇}。点击生成文章后的链接为:http://127.0.0.1/phpcms2007_sp6_gbk/phpcms/admin.php?mod=article&file=createhtml&action=create_show&channelid=1&referer=****标签代码如下:

1 php
2 defined ( ' IN_PHPCMS ' ) or exit ( ' Access Denied ' );
3 ?>
4 php
5 global $articleid , $db ;
6 $sqlpre = " SELECT * FROM phpcms_article_1 where articleid 7 $sqlaft = " SELECT * FROM phpcms_article_1 where articleid>' $articleid ' order by articleid asc " ;
8 $preart = $db -> get_one( $sqlpre );
9 $afart = $db -> get_one( $sqlaft );
10 if ( ! $preart [ ' title ' ])
11 $preart = $db -> get_one( " select * from phpcms_article_1 order by articleid desc " );
12 if ( ! $afart [ ' title ' ])
13 $afart = $db -> get_one( " SELECT * FROM phpcms_article_1 where articleid=1 " );
14 $preurl = $preart [ ' linkurl ' ];
15 $afurl = $afart [ ' linkurl ' ];
16 $pretitle = $preart [ ' title ' ];
17 $aftitle = $afart [ ' title ' ];
18 $url = $PHP_SCHEME . $PHP_DOMAIN . PHPCMS_PATH;
19 echo "

  • 上一篇: $pretitle
  • " ;
    20 echo "
  • 下一篇: $aftitle
  • " ;
    21 ?>

    原理很简单,根据当前页面的索引($articleid)通过数据库($db)查询它的上一篇和下一篇,并最终通过echo打印的页面上。但是,我们如何得知$articleid,$db的存在呢?这就需要我们理解在点击"生成文章"后后台都做了些什么?通过分析,执行这一命令后,消息路由如下:

    admin . php -> phpcms " module " article " admin.inc.php->phpcms " module " article " admin " createhtml.inc.php(case 'create_show':)->golbal.func.php(createhtml)->phpcms " module " article " include " createhtm " show . php

    消息路由到了这个文件,通过:

    ob_start ();
    include template( $mod , $templateid );
    $data = ob_get_contents ();
    ob_clean ();

    file_put_contents($filename, $data);完成了html文件的创建与写入。如果深究下去,可以发现template()调用了template_refresh(),而template_refresh()则调用template_parse()对phpcms的标签进行解释,并翻译了纯PHP。

    之后template()函数返回,被输出到了浏览器缓冲区(由ob_start()打开),与被输出到屏幕一样,此时文件中内嵌的PHP会被翻译成html的形式。对于自定义标签来讲,它被template_parse()翻译成,因此,在输出时会调用phpcms_mytag()函数。而正是由这个函数将最终的自定义标签的文件给包含了进来。这样一来,自定义标签的文件和包含$articleid,$db的文件结合在了一起,因此,此时便可以在自定义标签文件中使用这两个变量了。

    相关标签: admin.php 的变量