Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

写数据调用的展示代码前应知道的一些知识

[复制链接]
lidq.jingwu 发表于 2009-9-8 20:48:48 | 显示全部楼层 |阅读模式
写数据调用的展示代码前应知道的一些知识:
在进行数据调用时由于数据的存放结构不同,所以在写展示代码时经常要进行调试,下面将一些在调试过程中经常用到的东西整理一下写在这里。
1、要学会打印数据。
打印从数据库中取到的数据有多种方式,针对字符串与数组的不同,常用的有下面几种:
字符串:
        1、<!--{echo 变量名}-->:echo标签是supesite自带的一个标签,仅仅是用来非数组型变量
        2、<!--{eval echo 变量名;}-->:eval标签是用于在模板中插入php语句。
                在这句代码中 echo 是php一个内置的函数,用于将非数组型变量或常量输出。
        3、变量名 :直接在模板中写变量名,如$value,程序会将这些变量转化为相应的数据。
                用这种方式要注意,变量前后一定要有空格,否则程序无法识别。如果不想要空格,可以将变量放置于大括号内,如{$value}。

数组:
        1、<!--{eval secho(变量名)}-->
        2、<!--{eval print_r(变量名)}-->
        上面两种方式都可以将变量(不区分数组与字符型数据,)打印出来,一般是在要求显示数组时才会用到。
        在使用的过程中,建议用第二种,因为第一种有局限。
        第一种打印方式是supesite程序自定义的函数,函数体如下:
  1.                 function secho($array, $eixt=1) {
  2.                         if(is_array($array)) {
  3.                                 echo '<pre>';
  4.                                 print_r($array);
  5.                                 echo '</pre>';
  6.                         } else {
  7.                                 echo '<br>';
  8.                                 echo shtmlspecialchars($array);
  9.                                 echo '<br>';
  10.                         }
  11.                         if($eixt) exit();
  12.                 }
复制代码
可以看到在函数中用到了exit,并且多了一个参数,所以在循环里面用这种方式打印数组数据,不太方便。
        第二种方式则没有上面的限制。

注意:数组只是在调试分析代码时用的,在写展示代码时必须用打印字符串的代码。

2、学会分析打印出来的数据
在讲它之前,必须对php中的数组做一个说明,因为很多站长对php并不是很熟悉。
数组在php中是一个相当重要的概念,所有的数据都是放到数组中的。
学习数组,必须知道两个重要的概念,一个是键(key),另一个是值(value).
在每个数组里面都有键与值。
键(key)可以指定也可以不指定,不指定时,默认的从0开始,自动增长的数字。
键(key)一般是字符串,也可以是数字,在每一维数组中都是唯一。
通过数组的键可以方便的读取与赋于数组数据。

值(value)是键所对应的数据,可以随意更改,可以是任意的数据类型。

举例如下:在php中创建数组是用array函数执行的。
        1)$arr        =        array("中国","美国","日本");
        在数组$arr中,"中国","美国","日本" 是它里面的值,每一个值以“,”(英文)分隔,字符串前台加双引号或单引号
        在创建的过程中没有指定key值,所以由函数产生默认的key值,即$arr[0]对应的值是"中国",$arr[1]对应的值是"美国",$arr[2]对应的值是"日本"。
        2)$arr        =        array("china"=>"中国","meiguo"=>"美国","japan"=>"日本");
        这是创建数组的另外一种方法,可以指定key值,即$arr["china"]对应的值是"中国",$arr["meiguo"]对应的值是"美国",$arr["japan"]对应的值是"日本"。
        这种方式是最常用的。

在php中给变量赋值是相当灵活的,可以使用array函数,也可以不使用。
        $temp        =        "aaa";                将字符串 aaa 赋值给变量$temp
        $temp[]        =        "aaa";                将字符串 aaa 赋值给数组变量$temp,key值是随着变量内的数据增长的。
        $temp["c"]        =        "aaa";        将字符串 aaa 赋值给数组变量$temp,key值是 c 。
       
在模板中显示数据,就是用在模板中打印字符串数据的方式。

下面我们来分析在SupeSite的模板中经常出现的数组。
打开index.html.php文件,在里面找到“最新资讯”,在它下面一句代码:
  1. <!--{block name="spacenews" parameter="order/i.dateline DESC/limit/0,5/cachetime/85400/subjectlen/46/subjectdot/0/showdetail/1/messagelen/150/messagedot/1/cachename/newnews1"}-->
复制代码
在这句代码后面加上以下几句代码:
  1.                 <pre>
  2.                 <!--{eval print_r($_SBLOCK['newnews1']);}-->
  3.                 </pre>
  4.                 <!--{eval exit;}-->
复制代码
说明:index.html.php文件里面找到的那句代码是默认模板中的数据调用语句,关于它的说明,这里不再介绍,可以去看已有的教程:
        教您如何读懂模块代码里的参数:http://faq.comsenz.com/viewnews-312
        SupeSite7.0数据调用模块参数详解:http://faq.comsenz.com/viewnews-696
<!--{eval print_r($_SBLOCK['newnews1']);}-->是将调用出来的数据打印出来。
<pre></pre>是html标签,可以将打印出来的数据结构化显示。
<!--{eval exit;}-->作用是结束程序执行,如果是在循环中打印数据,一定不要加这句。
数据打印出来的是下面这种形式:
  1. Array
  2. (
  3.     [46] => Array
  4.         (
  5.             [itemid] => 46
  6.             [catid] => 13
  7.             [uid] => 1
  8.             [tid] => 0
  9.             [username] => root
  10.             [itemtypeid] => 0
  11.             [type] => news
  12.             [subtype] =>
  13.             [subject] => 测试测试测试测试
  14.             [dateline] => 1252371542
  15.             [lastpost] => 1252371542
  16.             [viewnum] => 0
  17.             [replynum] => 0
  18.             [goodrate] => 0
  19.             [badrate] => 0
  20.             [digest] => 2
  21.             [top] => 2
  22.             [allowreply] => 1
  23.             [hash] => 60baa9d639abe959
  24.             [folder] => 1
  25.             [haveattach] => 0
  26.             [grade] => 2
  27.             [gid] => 0
  28.             [gdigest] => 0
  29.             [password] =>
  30.             [styletitle] =>
  31.             [picid] => 0
  32.             [subjectall] => 测试测试测试测试
  33.             [url] => http://localhost/s/?action-viewnews-itemid-46
  34.             [nid] => 46
  35.             [message] => 测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试
  36.             [relativeitemids] =>
  37.             [customfieldid] => 1
  38.             [customfieldtext] => a:1:{i:0;s:0:"";}
  39.             [includetags] =>
  40.             [newsauthor] =>
  41.             [newsfrom] =>
  42.             [newsfromurl] =>
  43.             [newsurl] =>
  44.             [pageorder] => 1
  45.         )

  46.     [44] => Array
  47.         (
  48.             [itemid] => 44
  49.             [catid] => 2
  50.             [uid] => 1
  51.             [tid] => 0
  52.             [username] => root
  53.             [itemtypeid] => 0
  54.             [type] => news
  55.             [subtype] =>
  56.             [subject] => 互联网出版产值将达10亿元 博客文学或有潜力
  57.             [dateline] => 1251858665
  58.             [lastpost] => 1251858665
  59.             [viewnum] => 3
  60.             [replynum] => 0
  61.             [goodrate] => 0
  62.             [badrate] => 0
  63.             [digest] => 0
  64.             [top] => 0
  65.             [allowreply] => 1
  66.             [hash] => ccc67b930b949371
  67.             [folder] => 1
  68.             [haveattach] => 1
  69.             [grade] => 0
  70.             [gid] => 0
  71.             [gdigest] => 0
  72.             [password] =>
  73.             [styletitle] =>
  74.             [picid] => 11
  75.             [subjectall] => 互联网出版产值将达10亿元 博客文学或有潜力
  76.             [url] => http://localhost/s/?action-viewnews-itemid-44
  77.             [nid] => 44
  78.             [message] => 2009年08月31日 05:01  北京商报
  79.   1998年,一个不经意的爱情故事让痞子蔡与广大网民有了《第一次的亲密接触》,活跃一时的  BBS以
  80.             [relativetags] => a:0:{}
  81.             [postip] => 127.0.0.1
  82.             [relativeitemids] =>
  83.             [customfieldid] => 1
  84.             [customfieldtext] => a:1:{i:0;s:0:"";}
  85.             [includetags] =>
  86.             [newsauthor] =>
  87.             [newsfrom] =>
  88.             [newsfromurl] =>
  89.             [newsurl] =>
  90.             [pageorder] => 0
  91.         )
  92. )
复制代码
分析查询出来的数据在最外一层的Array中只有两个key即:46、44,一个key值对应一个值,即一条记录,所以调用代码总共从数据库中查询出来两条记录。
在内层的Array中是以字段串的形式做为key值的。一个key对应数据库表supe_spacenews或supe_spaceitems中的一个字段。
通过它们可以方便的将数据取出来,如资讯的标题对应的字段是 subject ,如果读取第一条资讯记录的标题,可以用:$_SBLOCK['newnews1'][46][subject]

在写展示代码的过程中如果用到循环,可以去看已有的标签教程:模板里经常用到以下几个标签的说明:https://discuz.dismall.com/viewth ... page%3D1&page=1

评分

2

查看全部评分

popuppp 发表于 2009-9-12 22:39:21 | 显示全部楼层
((mk10)) 学习了。有些确实比较实用。楼主辛苦
回复

使用道具 举报

tim023 发表于 2009-9-12 23:26:56 | 显示全部楼层
写数据调用的展示代码前应知道的一些知识:
在进行数据调用时由于数据的存放结构不同,所以在写展示代码时经常要进行调试,下面将一些在调试过程中经常用到的东西整理一下写在这里。
1、要学会打印数据。
打印从数 ...
lidq.jingwu 发表于 2009-9-8 20:48

这个比较好哦~~~~~~~~
回复

使用道具 举报

阳光的重量 发表于 2009-9-15 16:30:36 | 显示全部楼层

O(∩_∩)O哈哈~
看帖顶帖
回复

使用道具 举报

阳光的重量 发表于 2009-9-15 16:33:45 | 显示全部楼层

O(∩_∩)O哈哈~
看帖顶帖
回复

使用道具 举报

wbband 发表于 2009-9-16 10:44:41 | 显示全部楼层
写的很好啊,支持一个
回复

使用道具 举报

ysober 发表于 2009-9-16 11:20:24 | 显示全部楼层
希望ss能赶紧发布7.5
回复

使用道具 举报

xiuchy 发表于 2009-9-17 11:55:12 | 显示全部楼层
真好,支持。。。。
回复

使用道具 举报

rowing 发表于 2009-10-21 14:34:59 | 显示全部楼层
收藏,慢慢学
回复

使用道具 举报

snny2008 发表于 2009-10-21 14:59:22 | 显示全部楼层
这个比较好,收藏了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-15 01:13 , Processed in 0.044434 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表