本帖最后由 ted1006 于 2008-11-25 09:35 编辑
提示:仅适用于 UCenter Home 1.5 RC2 版本
增加后台数据调用中对数据调用结果进行长度的截取设置功能,适用于站内调用和JS的站外调用。
修改方案:(ted1006 提供)
1、执行SQL语句:- ALTER TABLE `uch_block` ADD `strlen` TEXT NOT NULL ;
复制代码 2、./admin/tpl/block.htm 修改代码:117~120行- <tr bgcolor="#F3F3F3"><th> 字段名 </th><th> 数据实例 </th></tr>
- <!--{loop $colnames $key $value}-->
- <tr><td bgcolor="#F5F5F5"> $key </td><td bgcolor="#FFFFFF"> $value </td></tr>
- <!--{/loop}-->
复制代码 修改为:
- <tr bgcolor="#F3F3F3"><th> 字段名 </th><th> 数据实例 </th><th> 截取长度 </th></tr>
- <!--{loop $colnames $key $value}-->
- <tr><td bgcolor="#F5F5F5"> $key </td><td bgcolor="#FFFFFF"> $value </td>
- <td bgcolor="#FFFFFF"> <input type="text" size="15" name="strlen[$key]" value="$block[strlen][$key]"> </td></tr>
- <!--{/loop}-->
复制代码 3、./admin/admincp_block.php 修改代码:42行左右- $bid = intval($_POST['bid']);
- $block = sub_getblock($bid);
- $setarr = array(
- 'cachename' => $_POST['cachename'],
- 'cachetime' => intval($_POST['cachetime']),
- 'num' => intval($_POST['num']),
- 'perpage' => intval($_POST['perpage']),
- 'htmlcode' => trim($_POST['htmlcode'])
- );
- ……
- $setarr['htmlcode'] = "<!--{block/{$perstr}sql/".rawurlencode($block['blocksql'])."/cachename/$setarr[cachename]/
- cachetime/$setarr[cachetime]}-->\r\n".stripslashes($setarr['htmlcode']);
复制代码 修改为:
- $bid = intval($_POST['bid']);
- $block = sub_getblock($bid);
- $strlen = array();
- $strlenstr = '';
- foreach ($_POST['strlen'] as $key => $value) {
- $strlen[$key] = intval($value);
- if ($value != 0) {
- $strlenstr .= $key.'len/'.$value.'/';
- }
- }
- $setarr = array(
- 'cachename' => $_POST['cachename'],
- 'cachetime' => intval($_POST['cachetime']),
- 'num' => intval($_POST['num']),
- 'perpage' => intval($_POST['perpage']),
- 'htmlcode' => trim($_POST['htmlcode']),
- 'strlen' => serialize($strlen)
- );
- ……
- $setarr['htmlcode'] = "<!--{block/{$perstr}sql/".rawurlencode($block['blocksql'])."/".$strlenstr."cachename/
- $setarr[cachename]/cachetime/$setarr[cachetime]}-->\r\n".stripslashes($setarr['htmlcode']);
复制代码 4、./admin/admincp_block.php 添加代码:查找下面代码- } elseif($_GET['op'] == 'add') {
复制代码 在之上添加代码
- $block['strlen'] = unserialize($block['strlen']);
复制代码 5、./source/function_block.php 修改代码:48行左右- if($results['count']) {
- $query = $_SGLOBAL['db']->query($results['sql']);
- while ($value = $_SGLOBAL['db']->fetch_array($query)) {
- $blockarr[] = $value;
- }
- }
复制代码 修改为:
- if($results['count']) {
- $query = $_SGLOBAL['db']->query($results['sql']);
- while ($value = $_SGLOBAL['db']->fetch_array($query)) {
- foreach ($value as $k => $v) {
- if (isset($paramarr[$k.'len'])) {
- $value[$k] = getstr($v, $paramarr[$k.'len']);
- }
- }
- $blockarr[] = $value;
- }
- }
复制代码 提示:getstr()函数的第二个参数是截取的长度,如果您的希望截取3个字符那个位置应该是4,所以在后台设置的时候就要多设置一个。如果想在后台设置的时候设置截取3个长度,就设置为3的话,则下这一行:- $value[$k] = getstr($v, $paramarr[$k.'len']);
复制代码 应改为:- $value[$k] = getstr($v, $paramarr[$k.'len']+1);
复制代码 即可。 |