
二次开发
wecenter屏蔽500异常信息输出
WeCenter 程序 • 三叔 发表了文章 • 0 个评论 • 13 次浏览 • 16 小时前
哎,真是人怕出名猪怕壮。
又有他娘的弱鸡开始测试我网站了。
以前500异常显示是官方给我们站长自己好定位问题的。这下好了被一群傻吊哪来测试漏洞了。
索性我就把500异常屏蔽了。
打开 /system/function.inc.php ,查询_show_error 方法内第一行追加:
die('500 你懂的');
就好了。
两行代码搞定wecenter的bilibili链接转视频
建站运营 • 三叔 发表了文章 • 2 个评论 • 114 次浏览 • 2021-02-26 11:26
之前三叔写了个插件,三叔只是个技术爱好者对钱不太敏感。
所以三叔的B站视频解析插件只收费了20元。
但是三叔最近萌生想法就是只需要用户在前端增加两行代码解决文内视频解析。
于是这两天在业余时间写出了代码。
效果如
http://hot.bili123.com/?/article/1
具体操作很简单,三叔还写了一个懒人配置页面。
http://lab.bili123.com/pages/biliparsejs.php
稍微有点技术含量的就是你得找到要解析视频的div的标识。
如果你用的wecenter原生的主题。
直接把下面的代码贴到下即可
<script>
var _bilioption= {"container":".aw-article-content","position":"before","width":"","height":""};
</script>
<script asyn="asyn" src="//cdn.jsdelivr.net/gh/sl514/myres@master/biliparse.js"></script>
哎,又被人恶意搜索了。
更新与修复 • 三叔 发表了文章 • 1 个评论 • 156 次浏览 • 2021-02-20 14:15
自从上次把搜索功能改成未登录则使用百度搜索
https://wenda.wecenter.com/article/1774
搞我网站的哥门也和我卯上了。估计这老几对wecenter也是相当的熟悉。又开始了新的折腾。
一早上我就一分钟收到了40多封的错误邮件。
哎妈的。
索性我就直接把 /app/search/ajax.php的
Line33:
$rule_action['rule_type'] = 'black';
改为
$rule_action['rule_type'] = 'white';
把所有搜索都改成必须登陆才可以操作。
如果那位兄台在社区里。我想说的是。
你的IP 我这先记着。欢迎测试,但是别做入侵的事。否则《入侵计算机系统罪》可以了解下。
修改搜索功能为百度搜索
建站运营 • 三叔 发表了文章 • 0 个评论 • 249 次浏览 • 2021-02-01 08:36
前几天三叔的博客被人用搜索坑了以下。
因为文章太多,所以搜索起来比较慢。
所以昨天修改了下代码,如果是用户不登陆的情况下会使用百度搜索。
这里我们使用
“关键字 site:sanshu.cn”
的方式来操作。
具体的用法解释参照:
http://www.sanshu.cn/a/71173.html
wecenter的修改如下:
到/app/search/main.php下搜索 index_action然后在大概59行的位置找到如下代码:
$keyword = htmlspecialchars(base64_decode($_GET['q']));
在这行代码下追加:
if(!$this->user_id){
HTTP::redirect('https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd='.$keyword.' site:sanshu.cn');
}
代码里的site:sanshu.cn 改成 site:你的域名
这样,如果用户不登陆的情况下搜索 会跳到百度搜索页面。比如这样的
这样就不用担心陌生人恶意消耗你的网站服务器的性能了。
请求删除此贴
WeCenter 程序 • 技术-安辰 回复了问题 • 3 人关注 • 1 个回复 • 354 次浏览 • 2020-09-07 08:57
发一个用wecenter做的站,非问答,免费图标库下载站:图标盒子
建站运营 • bennyyao 回复了问题 • 2 人关注 • 2 个回复 • 746 次浏览 • 2020-08-18 13:53
wecenter中获取sessionid
WeCenter 程序 • 三叔 发表了文章 • 0 个评论 • 413 次浏览 • 2020-06-07 11:16
直接使用
session_id();
即可获取
B站(bilibili)视频地址转成播放器的插件上线
WeCenter 程序 • 三叔 发表了文章 • 5 个评论 • 878 次浏览 • 2020-05-09 21:28
本来打算收费10元的,后来觉得算了,也没几行代码 就放出来了。
效果如上图,本来这文章里只有一个B站播放地址。我的插件会把地址下面渲染出视频。
但是有锚点的才可以,也就是 代码里地址 必须是 有 a标签包含的才可以。这做法的原因是考虑到有的人不希望所有的地址被解析成视频。
插件地址:
http://market.wecenter.com/index.php?m=content&c=index&a=show&catid=6&id=65
手机模板开发修改对应文件基础认识,新手改模板可以看看
WeCenter 程序 • 卓越膜结构 回复了问题 • 8 人关注 • 3 个回复 • 1819 次浏览 • 2018-09-17 17:05
专为WeCenter打造的云端采集器【神箭手】发布2.0版 五大贴心功能打造最流畅的采集体验
WeCenter 程序 • timilive 回复了问题 • 85 人关注 • 34 个回复 • 14824 次浏览 • 2018-05-22 17:58
【WeCenter二次开发】不同分类的效果
小明明 发表了文章 • 8 个评论 • 5304 次浏览 • 2015-10-30 07:32
因为之前发布的是问题,不能编辑,在这更正。
第二篇,前端新建文件名,应改为新建 views/default/block/content_nav.tpl.htm。
【后台 分类设置】
【文章页面】
【问题页面】
【活动页面】
修改过程:
http://wenda.wecenter.com/question/27787
http://wenda.wecenter.com/question/27788
发福利了。。。小白实现问题置顶功能。。。
Mader 回复了问题 • 63 人关注 • 15 个回复 • 5806 次浏览 • 2016-01-11 14:29
【WeCenter二次开发】你至少要知道的那些事
小明明 发表了文章 • 18 个评论 • 7738 次浏览 • 2015-06-24 21:33
引言:
我仅仅是一个编程爱好者,遇到WeCenter的原因是想做个高考咨询的问答站。自己对PHP也只是略懂皮毛,更别说框架了。看了三天的ThinkPHP文档不太好消化。是WeCenter让我更好的理解了MVC的含义。
以下内容仅适合刚刚接触WeCenter准备二次开发的新同学,如果您是大神可以就此止步。如有说法不准确,请包涵,以下内容仅为个人理解。
=====================
1:框架结构有三层它们的作用及它们对应的文件夹如下:
控制器(程序流程,了解用户想要什么)--》APP
模型(数据库访问,提供用户需要的原材料)--》Model
视图(展示出来,也就是最后成品,由控制器放到用户面前)--》View
2:Wecenter的框架流程是什么样的?
控制器也就是app文件夹下的文件夹及文件,例如访问http://example.com/?/account/就是执行app/account/main.php 中 index_action 方法~再例如访问http://example.com/?/account/login/就是执行上述文件中login_action这个方法。
这(控制器函数/方法)里面会调用模型,即执行Model文件夹下的相关文件,访问数据库获得数据。例如$this->model('account')->get_user_info_by_uid($uid);就是在调用account这个用户模型,具体就是model/account.php里的相关方法~
调用完数据,要做的事情就是把数据展示出来。在控制器方法中一般都会以这样的语句结束:TPL::output("XXX");它所做的事情就是调用视图——我们通常所说的模板。
3:在调用模型之后输出视图,那么模型是怎么把数据传给视图的呢?
请注意这条语句:TPL::assign('AAA', 'BBB');,意思就是把BBB包装成AAA;BBB是由模型获得的数据,AAA是在视图展示的形式,在TPL::output("XXX");输出的模板中可通过<?php echo $this->AAA;?>来输出BBB这个值。
Tip:研究BBB来充分发挥AAA的价值:
上文说到“把BBB包装成AAA”,其实AAA和BBB完全可以理解为等价。
前些日子活跃了一阵子,看到一个用户问,怎么显示加入时间。其实加入时间即注册时间,get_user_info_by_uid()返回的应该是用户信息绝大多数字段,或者就是用户表全部字段,我没有一一比较。同时还会有微信消息设置信息。我通过视图<?php print_r($this->user);//打印数组?>发现有reg_time这个字段的值,只要把时间戳转化成易理解的日期即可。
所以,在开发初期可以多打印几个数组,掌握成员组成,说不准什么时候就可以用到。默认模板只是把认为有必要展示的内容展示出来了,你想展示其他的,研究BBB的内容。
编后语:
第一次打这么多字,还没有插图。向全部读完的童鞋致敬!愿大家开发出自己的特色产品,愿WeCenter越来越好~
WeCenter 二次开发基础说明(模块开发)
jat 发表了文章 • 20 个评论 • 13195 次浏览 • 2015-02-05 12:23
一. 组件文件目录结构说明
一般来说,一个模块需要下面几个文件,假设模块名为AA,则
app/AA – 应用目录
models/AA.php – 模型目录
static/css/default/AA.css – 静态文件
views/default/AA – 模板目录
二. URL 路由
WeCenter 有一个解析能力强大的 URL 路由,模块AA的访问设置如下
1. 动作访问:
/模块名/控制器/动作/ID
ID 为 id 查询, 例: 模块名/login/123, 则在 login 控制器中 $_GET['id'] 的值为 123
(*) 如果使用 /模块名/控制器/动作/ID 格式 Query string 的使用可以参照 兼容性的支持
(*) 如果动作在 main 控制器中可以省略, 例: 模块名/main/login/ 等同于 account/login/
(*) 如果动作名为 index 可以省略, 例: 模块名/login/index/ 等同于 account/login/
2. Query string
WeCenter 的查询字符串为使用 __ 分隔参数, 使用 – 为参数赋值, 在程序中直接使用 $_GET 取出内容
常规的: account/login/?return_url=1&callback=2
WeCenter 的: account/login/return_url-1__callback-2
(*) 在程序中输出 URL 请使用 get_js_url 函数, 因为这样会兼容 Rewrite 是否开启两种情况
3. 兼容性的支持
下面的几种 URL 形式在程序中都是被支持的:
http://domian/index.php?/question/id-320__column-log__source-doc
http://domian/index.php?/question/320?column=log&source=doc
http://domian/index.php?/question/?id=320&column=log&source=doc
http://domian/index.php?/question/320?column-log__source-doc
http://domian/index.php?/question/320&column-log__source-doc
三. 模板命名规则
程序中所有模板的存放规则为 模块/控制器/动作, 如果控制器为 main 则省略
如 account/main/login/ 对应的模板为 views/模板集/account/login.tpl.htm
如 account/setting/profile/ 对应的模板为 views/模板集/account/setting/profile.tpl.htm
四. 自动引入机制
WeCenter 类库, Model 的使用都是不需要事先引入文件的, 这使得在编程过程中变得方便快捷, 也避免了类库重复实例化的问题, 但是使用自动引入机制需要遵循下面的规则.
(*) 所有自动引入的类库都不需要事先实例化, 直接使用即可.
1. Model
放在 model 目录下, 文件名: name.inc.php
文件中需要有继承 AWS_MODEL 的 name_class
(*) 在程序中使用方法: $this->model('name')->action();
(*) 可用范围: CONTROLLER, Model
2. System 类库
放在 system 目录之下, 类名相对于 system 目录, 将 / 换成 _
例: Zend_Mail
路径: system/Zend/Mail.php
类名: Zend_Mail
(*) 在程序中使用方法: new, 静态调用, load_class('class_name');
(*) 可用范围: 任意, 不需要带参数实例化建议使用 load_class
3. 配置文件
放在 system/config 目录之下, 文件内容为一个 $config 数组, 命名为 配置名.php
(*) 在程序中使用方法: AWS_APP::config()->get('配置名')->数组下标
(*) 可用范围: 任意, 不需要带参数实例化建议使用 load_class
如需添加后台菜单,请在 system/config 目录下新建 admin_menu.extension.php 文件,格式与 admin_menu.php 一致。
五. 模板机制
WeCenter 的模板采用继承机制, 系统的 default 为主模板, 用户的自定义模板只需要更改很少的文件即可实现程序界面的定制.继承机制原理:
当管理员设定了一个 newstyle 模板, 用户访问首页
⬇
系统开始查找 views/newstyle/home/index.tpl.htm
⬇
找到相应文件 找不到文件
⬇ ⬇
读取内容并
解析后显示 ⬅ 读取 views/default/home/index.tpl.htm
建立模板集的方法:
1. 在 views 下面建立模板集目录
2. 在 static/css/ 下建立与模板集相同的目录, 我们建议从 static/css/default/ 拷贝一份内容到新建的模板集中, 然后开始修改工作.
六. 常用开发指导
JavaScript:
我们使用 jQuery 作为主要 framework, 载入的插件有:
jQuery Form ( http://malsup.com/jquery/form/ )
AJAX Upload ( http://valums.com/ajax-upload/ )
Valums file Uploader (修改过)
jQuery.ScrollTo
(*) 在 Javascript 中判断用户是否登录判断全局变量 G_USER_ID 是否大于 0 即可
(*) 全局变量在 header 模板中
(*) 所有 JS 请求 URL 需要加上 G_BASE_URL 前缀
(*) 全局 ajax 列表函数使用 bp_load_more
PHP:
关于 Zend Framwork 类库的使用方法请参考官方文档
(*) 在控制器中判断用户是否登录判断 $this->user_id 是否大于 0 即可
(*) 控制器与模板中始终可用 $this->user_id 和 $this->user_info
(*) 控制器与 Model 中禁止使用构造函数, 可以用 setup() 函数替代
(*) 程序已经提供了两个中文处理函数 cjk_substr 和 cjk_strlen
Access Rule:
public function get_access_rule()(*) 控制器中不加此函数, 则所有 action 必需登录可见
{
// 规则类型
// white: actions 里的 action 全部用户可见, 其余 action 需要登录
// black: actions 里的 action 需要登录, 其余 action 全部用户可见
$rule_action["rule_type"] = 'white';
$rule_action["actions"] = array(
'check_username',
'check_email',
'register_process',
'login_process',
'register_agreement',
'send_valid_mail',
'valid_email_active',
'request_find_password',
'find_password_modify'
);
return $rule_action;
}
模板:
(*) 在模板可以使用 PHP 代码, 全部静态类与 function, 但是不能使用 Model
(*) 模板中 $this-> 中的内容是全局通用变量, 可以在模板中引入的模板使用, 模板内部产生的变量则不能
(*) TPL::output 方法第二个参数为 false 时, 内容会返回给变量不会输出, 可以利用此方法做 JS 调用或者代码重用
注册页面和登陆页面弹出框处理
夏洛特 回复了问题 • 34 人关注 • 4 个回复 • 4620 次浏览 • 2014-09-17 19:54
分享一个自定义WC首页的方法(修改默认首页)
Alu 发表了文章 • 18 个评论 • 11874 次浏览 • 2014-04-11 14:04
在:system\core\uri.php有个默认控制器,修改这个参数
var $default_vars = array(
'app_dir' => 'home', //应用名
'controller' => 'main', //文件名
'action' => 'index'//执行的程序
);
【二次开发教程】三、友情链接开发,后台处理页面,附插件下载。
___在路上____ 回复了问题 • 75 人关注 • 16 个回复 • 9371 次浏览 • 2014-12-07 22:09
【二次开发教程】二、友情链接开发,前台申请页面。
buffonly 回复了问题 • 56 人关注 • 11 个回复 • 5829 次浏览 • 2014-04-24 14:45
发一个用wecenter做的站,非问答,免费图标库下载站:图标盒子
回复建站运营 • bennyyao 回复了问题 • 2 人关注 • 2 个回复 • 746 次浏览 • 2020-08-18 13:53
会PHP的看过来,WC这个文件的这段代码,是不是多余的?
回复WeCenter 程序 • 技术-安辰 回复了问题 • 1 人关注 • 1 个回复 • 637 次浏览 • 2019-12-06 19:10
发现wecenter后端有个很奇怪的问题,懂技术的都来看看。。。。。
回复WeCenter 程序 • bennyyao 发起了问题 • 2 人关注 • 0 个回复 • 1149 次浏览 • 2019-04-18 12:49
请问,现在的系统,对发布悬赏的判断,仅仅是有没有category参数吗? 有点困惑。。。
回复建站运营 • fanta 回复了问题 • 4 人关注 • 1 个回复 • 1115 次浏览 • 2019-04-08 13:31
wecenter屏蔽500异常信息输出
WeCenter 程序 • 三叔 发表了文章 • 0 个评论 • 13 次浏览 • 16 小时前
哎,真是人怕出名猪怕壮。
又有他娘的弱鸡开始测试我网站了。
以前500异常显示是官方给我们站长自己好定位问题的。这下好了被一群傻吊哪来测试漏洞了。
索性我就把500异常屏蔽了。
打开 /system/function.inc.php ,查询_show_error 方法内第一行追加:
die('500 你懂的');
就好了。
两行代码搞定wecenter的bilibili链接转视频
建站运营 • 三叔 发表了文章 • 2 个评论 • 114 次浏览 • 2021-02-26 11:26
之前三叔写了个插件,三叔只是个技术爱好者对钱不太敏感。
所以三叔的B站视频解析插件只收费了20元。
但是三叔最近萌生想法就是只需要用户在前端增加两行代码解决文内视频解析。
于是这两天在业余时间写出了代码。
效果如
http://hot.bili123.com/?/article/1
具体操作很简单,三叔还写了一个懒人配置页面。
http://lab.bili123.com/pages/biliparsejs.php
稍微有点技术含量的就是你得找到要解析视频的div的标识。
如果你用的wecenter原生的主题。
直接把下面的代码贴到下即可
<script>
var _bilioption= {"container":".aw-article-content","position":"before","width":"","height":""};
</script>
<script asyn="asyn" src="//cdn.jsdelivr.net/gh/sl514/myres@master/biliparse.js"></script>
哎,又被人恶意搜索了。
更新与修复 • 三叔 发表了文章 • 1 个评论 • 156 次浏览 • 2021-02-20 14:15
自从上次把搜索功能改成未登录则使用百度搜索
https://wenda.wecenter.com/article/1774
搞我网站的哥门也和我卯上了。估计这老几对wecenter也是相当的熟悉。又开始了新的折腾。
一早上我就一分钟收到了40多封的错误邮件。
哎妈的。
索性我就直接把 /app/search/ajax.php的
Line33:
$rule_action['rule_type'] = 'black';
改为
$rule_action['rule_type'] = 'white';
把所有搜索都改成必须登陆才可以操作。
如果那位兄台在社区里。我想说的是。
你的IP 我这先记着。欢迎测试,但是别做入侵的事。否则《入侵计算机系统罪》可以了解下。
修改搜索功能为百度搜索
建站运营 • 三叔 发表了文章 • 0 个评论 • 249 次浏览 • 2021-02-01 08:36
前几天三叔的博客被人用搜索坑了以下。
因为文章太多,所以搜索起来比较慢。
所以昨天修改了下代码,如果是用户不登陆的情况下会使用百度搜索。
这里我们使用
“关键字 site:sanshu.cn”
的方式来操作。
具体的用法解释参照:
http://www.sanshu.cn/a/71173.html
wecenter的修改如下:
到/app/search/main.php下搜索 index_action然后在大概59行的位置找到如下代码:
$keyword = htmlspecialchars(base64_decode($_GET['q']));
在这行代码下追加:
if(!$this->user_id){
HTTP::redirect('https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd='.$keyword.' site:sanshu.cn');
}
代码里的site:sanshu.cn 改成 site:你的域名
这样,如果用户不登陆的情况下搜索 会跳到百度搜索页面。比如这样的
这样就不用担心陌生人恶意消耗你的网站服务器的性能了。
wecenter中获取sessionid
WeCenter 程序 • 三叔 发表了文章 • 0 个评论 • 413 次浏览 • 2020-06-07 11:16
直接使用
session_id();
即可获取
B站(bilibili)视频地址转成播放器的插件上线
WeCenter 程序 • 三叔 发表了文章 • 5 个评论 • 878 次浏览 • 2020-05-09 21:28
本来打算收费10元的,后来觉得算了,也没几行代码 就放出来了。
效果如上图,本来这文章里只有一个B站播放地址。我的插件会把地址下面渲染出视频。
但是有锚点的才可以,也就是 代码里地址 必须是 有 a标签包含的才可以。这做法的原因是考虑到有的人不希望所有的地址被解析成视频。
插件地址:
http://market.wecenter.com/index.php?m=content&c=index&a=show&catid=6&id=65
在数据库里修改缓存类型
WeCenter 程序 • 三叔 发表了文章 • 0 个评论 • 437 次浏览 • 2020-04-20 21:19
有的时候大家会用到这个。 比如你之前用的memcache或redis,但是哪天这个缓存系统挂了。你再想切回File就会报错。
那就需要手动去数据库修改类型了。
这个我是在navcat里操作的。
点击筛选-》varname 包含 cache 记住了 是包含。
然后把value里的 改成 s:4:"file";
这里的s理论上是4,就是后面的字符串长度了。但是因为之前我是memcached 所以是9. 我偷懒没改成4
如果是memcached 那就是 s:9:"memcached";
如果是redis那就是 s:5:"redis";
在文章页中增加如下代码可以解析网易云音乐
插件 • 三叔 发表了文章 • 1 个评论 • 779 次浏览 • 2020-01-10 14:56
var mediaRegex = [{"regex":"","controller":""},
{"regex":"music.163.com\/#\/song\\\?id=(\\\d+)","controll":"<iframe frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\" width=330 height=86 src=\"//music.163.com/outchain/player?type=2&id={}&auto=1&height=66\"></iframe>"}];
jQuery(function(){
$(".aw-question-detail").find("a").each(function(){
var url = $(this).attr("href");
for(var i=0;i<mediaRegex.length;i++){
var mr = mediaRegex[i];
if(mr.regex=="")continue;
//debugger;
var result;
if((result = new RegExp(mr.regex,"g").exec(url)) != null){
var c = mr.controll.replace("{}",result[1]);
//debugger;
$(this).after(""+c+"
");
}
}
})
})
上面的代码请放到 /views/主题/article/index.tpl.htm的最下面即可。
效果如:
实际效果:
http://www.sanshu.cn/a/45.html
疯子设计:访问链接的流量互带
建议 • 三叔 发表了文章 • 0 个评论 • 473 次浏览 • 2020-01-02 17:52
这是一个想了很久,从效率和安全方面做出的思考。
大概思路:
1. 记录http请求中的referer(来路网址)
2. 去除搜索引擎和本站的地址(这些一般非常多还没啥用)
3. 在一个展现页面中展现这块数据
这个思路的目的是,A网页放问我的网站后。就会在我的来路展现页里被罗列出来,这样我的部分用户也会引流到A网页。这样实现双向引流。
如果权重高了,想出现在我的展现页里的网站都会在自己的网站或文章里出现我的链接,这样无疑就会增加我的网站外链。外链越多、访问量越大、权重越高。实现一个良性循环。
那设想有了,下面就是设计下如何高效和安全的去操作。
原本设计是这样的:
但是我觉得:按照某些恶意程序员的程序员的尿性,他肯定会将一堆色情、赌博的网址作为referer请求你的网址,这样就会造成你的展示页里出现很多非法网站。这是很可怕的。因为工信部会来查封你的网站。
所以:我决定增加一个域名备案查询的功能。正好把之前开发的网站备案查询的功能对接起来。
所以步骤中多了一个备案查询功能。
但是查询备案是一个非常耗时间的功能,这样会影响网页的打开速度,而且没必要每次都查询。
所以,我继续修改我的脑回路。
恩,这样安全系数应该很高了。下面就是如何更好的优化程序。
我觉得,展示网页的时候,还是不要做过多的操作好。所以我决定,查看网页的时候还是按照第一个脑图来。
下面是最终方案,有两套脑图:1 访问时候的设计 2. 后台异步执行的方案
访问网页的时候 只做referer插入操作,当然,还是要查询下数据库的,如果存在这个referer就忽略了。这里会在memcache中增加link的一个list来减少数据库的读写。
然后启动另一个进程或线程做如下操作,在做这步之前,我决定在referer表里增加一个checked字段,来做域名备案查询标识,防止比如google这类没有备案的域名重复的查询,这个没啥意思。
所以追加下面的脑图配合上面的脑图一起使用。
作者:三叔
文章出处:http://www.sanshu.cn/a/28.html
如果从上面链接点进去,1分钟内就会在 http://www.sanshu.cn/referer/ 看到这篇wecenter的连接