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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

后台数据调用中对数据调用结果进行长度的截取设置功能

[复制链接]
玻璃屋女孩 发表于 2008-9-1 10:45:19 | 显示全部楼层 |阅读模式
本帖最后由 ted1006 于 2008-11-25 09:35 编辑

提示:仅适用于 UCenter Home 1.5 RC2 版本
增加后台数据调用中对数据调用结果进行长度的截取设置功能,适用于站内调用和JS的站外调用。
修改方案:(ted1006 提供)
1、执行SQL语句:
  1. ALTER TABLE `uch_block` ADD `strlen` TEXT NOT NULL ;
复制代码
2、./admin/tpl/block.htm 修改代码:117~120行
  1. <tr bgcolor="#F3F3F3"><th>&nbsp;字段名 </th><th>&nbsp;数据实例&nbsp;</th></tr>
  2. <!--{loop $colnames $key $value}-->
  3. <tr><td bgcolor="#F5F5F5">&nbsp;$key&nbsp;</td><td bgcolor="#FFFFFF">&nbsp;$value&nbsp;</td></tr>
  4. <!--{/loop}-->
复制代码
修改为:

  1. <tr bgcolor="#F3F3F3"><th>&nbsp;字段名&nbsp;</th><th>&nbsp;数据实例&nbsp;</th><th>&nbsp;截取长度&nbsp;</th></tr>
  2. <!--{loop $colnames $key $value}-->
  3. <tr><td bgcolor="#F5F5F5">&nbsp;$key&nbsp;</td><td bgcolor="#FFFFFF">&nbsp;$value&nbsp;</td>
  4. <td bgcolor="#FFFFFF">&nbsp;<input type="text" size="15" name="strlen[$key]" value="$block[strlen][$key]"> &nbsp;</td></tr>
  5. <!--{/loop}-->
复制代码
3、./admin/admincp_block.php 修改代码:42行左右
  1. $bid = intval($_POST['bid']);
  2. $block = sub_getblock($bid);
  3. $setarr = array(
  4. 'cachename' => $_POST['cachename'],
  5. 'cachetime' => intval($_POST['cachetime']),
  6. 'num' => intval($_POST['num']),
  7. 'perpage' => intval($_POST['perpage']),
  8. 'htmlcode' => trim($_POST['htmlcode'])
  9. );
  10. ……
  11. $setarr['htmlcode'] = "<!--{block/{$perstr}sql/".rawurlencode($block['blocksql'])."/cachename/$setarr[cachename]/
  12. cachetime/$setarr[cachetime]}-->\r\n".stripslashes($setarr['htmlcode']);
复制代码
修改为:

  1. $bid = intval($_POST['bid']);
  2. $block = sub_getblock($bid);
  3. $strlen = array();
  4. $strlenstr = '';
  5. foreach ($_POST['strlen'] as $key => $value) {
  6. $strlen[$key] = intval($value);
  7. if ($value != 0) {
  8. $strlenstr .= $key.'len/'.$value.'/';
  9. }
  10. }
  11. $setarr = array(
  12. 'cachename' => $_POST['cachename'],
  13. 'cachetime' => intval($_POST['cachetime']),
  14. 'num' => intval($_POST['num']),
  15. 'perpage' => intval($_POST['perpage']),
  16. 'htmlcode' => trim($_POST['htmlcode']),
  17. 'strlen' => serialize($strlen)
  18. );
  19. ……
  20. $setarr['htmlcode'] = "<!--{block/{$perstr}sql/".rawurlencode($block['blocksql'])."/".$strlenstr."cachename/
  21. $setarr[cachename]/cachetime/$setarr[cachetime]}-->\r\n".stripslashes($setarr['htmlcode']);
复制代码
4、./admin/admincp_block.php 添加代码:查找下面代码
  1. } elseif($_GET['op'] == 'add') {
复制代码
在之上添加代码

  1. $block['strlen'] = unserialize($block['strlen']);
复制代码
5、./source/function_block.php 修改代码:48行左右
  1. if($results['count']) {
  2. $query = $_SGLOBAL['db']->query($results['sql']);
  3. while ($value = $_SGLOBAL['db']->fetch_array($query)) {
  4. $blockarr[] = $value;
  5. }
  6. }
复制代码
修改为:

  1. if($results['count']) {
  2. $query = $_SGLOBAL['db']->query($results['sql']);
  3. while ($value = $_SGLOBAL['db']->fetch_array($query)) {
  4. foreach ($value as $k => $v) {
  5. if (isset($paramarr[$k.'len'])) {
  6. $value[$k] = getstr($v, $paramarr[$k.'len']);
  7. }
  8. }
  9. $blockarr[] = $value;
  10. }
  11. }
复制代码
提示:getstr()函数的第二个参数是截取的长度,如果您的希望截取3个字符那个位置应该是4,所以在后台设置的时候就要多设置一个。如果想在后台设置的时候设置截取3个长度,就设置为3的话,则下这一行:
  1. $value[$k] = getstr($v, $paramarr[$k.'len']);
复制代码
应改为:
  1. $value[$k] = getstr($v, $paramarr[$k.'len']+1);
复制代码
即可。
sunyon 发表于 2008-9-1 21:17:34 | 显示全部楼层
占位!
做个记号,等升级到1.5时使用
回复

使用道具 举报

maibay 发表于 2008-9-2 00:29:51 | 显示全部楼层
作个记号
回复

使用道具 举报

yanuhome 发表于 2008-9-4 12:33:37 | 显示全部楼层
原帖由 玻璃屋女孩 于 2008-9-1 10:45 发表
增加后台数据调用中对数据调用结果进行长度的截取设置功能,适用于站内调用和JS的站外调用。
修改方案:(ted1006 提供)
1、执行SQL语句:ALTER TABLE `uch_block` ADD `strlen` TEXT NOT NULL ;2、./admin/tpl/b ...


应该说一句`uch_block`这个要替换成你自己的数据库的表,不是所有人的前缀都是这个
回复

使用道具 举报

yanuhome 发表于 2008-9-4 13:20:33 | 显示全部楼层
3、./admin/admincp_block.php 修改代码:42行左右
这个怎么还带省略号的?
4、我测试了2遍都不行

还有这个是适用于哪个版本的?

有没有修改好的文件,传上来
回复

使用道具 举报

PCSHY110 发表于 2008-9-10 22:32:00 | 显示全部楼层
jihao
回复

使用道具 举报

pc77maikongjian 发表于 2008-9-11 17:26:59 | 显示全部楼层
学习了,谢谢楼主分享.
回复

使用道具 举报

alau01 发表于 2008-10-5 11:57:03 | 显示全部楼层
好贴.记下来.
回复

使用道具 举报

linmaogan 发表于 2008-10-9 11:34:55 | 显示全部楼层
参考上面的内容,我觉得有一个更好的实现方法:<!--{eval echo getstr($value[subject], 14);}-->即直接在模板文件中使用getstr()函数,这样就不用担心以后的升级问题了,我觉得最好不要去修改程序的源码
回复

使用道具 举报

wxcm2006 发表于 2008-10-20 12:33:56 | 显示全部楼层
请问一下楼主,CUH没有执行sql的功能,怎么办呢?正好遇到要截取文字长度的问题,请教了,谢谢~
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 10:45 , Processed in 0.022797 second(s), 2 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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