wecenter二次开发

wecenter二次开发

能不能开发这样的功能

建议a595975822 回复了问题 • 3 人关注 • 2 个回复 • 306 次浏览 • 2020-03-21 15:26 • 来自相关话题

wecenter有计划换框架吗

WeCenter 程序三叔 回复了问题 • 8 人关注 • 4 个回复 • 622 次浏览 • 2019-08-09 16:45 • 来自相关话题

还是自适应好啊。

回复

建站运营imningfeng 发起了问题 • 1 人关注 • 0 个回复 • 587 次浏览 • 2019-07-07 15:50 • 来自相关话题

为什么这段代码调用出来的图片会带问号+数字后缀?

回复

WeCenter 程序imningfeng 发起了问题 • 1 人关注 • 0 个回复 • 763 次浏览 • 2019-06-16 15:25 • 来自相关话题

Wecenter插件系统开发规范

插件fanta 发表了文章 • 0 个评论 • 1197 次浏览 • 2019-06-14 13:31 • 来自相关话题

1.命名规范 ...查看全部

1.命名规范



插件命名以wc_作为前缀+插件名,如插件test,即wc_test



2.目录新建



目录新建在根目录下plugin文件夹下,如插件名test,目录结构就是/plugins/wc_test/



3.目录结构



目录包含内容必须要有配置文件、核心类,非必要的有模型类、静态资源、第三方类、页面模板等,如test,则玩着目录如下



wc_test



|-config.php  配置文件



|-test.php   核心类



|-test_model  模型类



|-view     视图模板目录



|-static    静态资源目录



|-install.sql   安装sql



|-uninstall.sql  卸载sql



|-upgrade.sql  升级sql



4.配置文件



Config.php配置文件 返回一个多维数组,包含有:



name: 插件标识



title 插件标题名称



intro 插件介绍



author : 插件作者



version 插件版本



state  插件状态



config: 也是一个数组,包含所需的配置项,如:



  'config'=>[



  'ad_plugin_enable' =>



  array (



    'title' => '广告开启',



    'type' => 'radio',



    'value' => 'Y',



    'options' =>



    array (



      'Y' => '开启',



      'N' => '关闭',



    ),



  )



],



以上的配置config就是后台广告插件的配置显示效果,



'options' 对应的是配置项的值,



'value' 是默认值,



'type' 是配置类型,



'title' 是配置名称



常用的有textselect,radioCheckBox



ad_plugin_enable是开发者自己定义,调用的时候调用此键名即可



5.核心类



核心类同样继承自AWS_CONTROLLER,包含5个固定方法,即构造方法 install安装,uninstall卸载,enable启用,disable禁用,构造方法获取插件的配置和插件相关信息,安装、卸载、启用、禁用四个方法默认是调用系统的方法,也可以自定义,在方法里自行处理相关逻辑。



除了这5个方法之外,开发者可以自定义其他的方法进行调用。



6.模型类



模型类的定义名称需后接_model方可,如test_model,内部的定义与使用与model目录下的模型相同,



另注意一点,此处的模型名不可与model目录下的模型重名,如果重名,会去调用model目录下的模型,从而会导致找不到相关的方法一类的错误。



调用方法还是$this->model()进行调用。



6.staticview静态资源、视图目录



Staic目录存放css\js等静态资源



View 视图目可存放后台以及前台的视图模板



后台视图的要在目录下新建子目录admin,前台的模板直接放在view下即可,在核心类中,通过 PLUTPL::output('ad/banner');渲染页面,其中ad是插件名或者标识,banner是页面名称



后台的只需加上admin即可,如PLUTPL::output('ad/admin/edit');



7.安装、卸载、升级



安装、卸载、升级在后台都有相对应的操作,对应相应的sql执行即可。



8.插件调用



正常的调用只需用公共方法hook()方法调用即可,在后台或者其他的页面需要调用插件方法进行页面调用或方法的时候,可以通过doact方法,前台explore/doact  后台admin/plugin/doact  ,



添加广告按钮需要调用插件添加广告的方法,此处是超链接,可以通过admin/plugin/doact/?p=ad&a=edit进行传参调用,其中pa是必传的,p是插件名,a是方法名。


3.3.1手机端登陆后跳转页面怎么改? 感谢!

回复

WeCenter 程序awc 发起了问题 • 1 人关注 • 0 个回复 • 715 次浏览 • 2019-04-16 23:12 • 来自相关话题

二次开发的数据库词典何时更新成3.31的?

回复

WeCenter 程序marco_hsu 发起了问题 • 1 人关注 • 0 个回复 • 554 次浏览 • 2019-04-15 14:44 • 来自相关话题

需要一个二开思路

创意与设计marco_hsu 回复了问题 • 4 人关注 • 3 个回复 • 901 次浏览 • 2019-01-17 16:55 • 来自相关话题

企业微信打开问题页面点击评论会调出拨打电话页面

回复

WeCenter 程序天地_玄黄 发起了问题 • 1 人关注 • 0 个回复 • 746 次浏览 • 2018-12-07 09:06 • 来自相关话题

wecenter的威望算法是怎样的

问与答haines 回复了问题 • 2 人关注 • 1 个回复 • 906 次浏览 • 2018-10-24 08:46 • 来自相关话题

wecenter 站外调用数据实现

lidanghong 回复了问题 • 54 人关注 • 4 个回复 • 3707 次浏览 • 2015-01-12 22:39 • 来自相关话题

WeCenter 调用输出模板介绍

哥特复兴 发表了文章 • 7 个评论 • 7940 次浏览 • 2014-07-09 19:14 • 来自相关话题

WeCenter 采用了很多 <?php TPL::output('xxoo'); ?> 这种方式调用输出一些模块内容,比如: {{{ <?php TPL::output('global/header.tpl.htm' ...查看全部
WeCenter 采用了很多 <?php TPL::output('xxoo'); ?> 这种方式调用输出一些模块内容,比如:
{{{
<?php TPL::output('global/header.tpl.htm'); ?>
}}} 表示的是此处输出的是header.tpl.htm这个文件的内容,里面包含的是网站头部的内容。

{{{
<?php TPL::output('global/header_meta.tpl.htm'); ?>
}}}输出header_meta.tpl.htm内容,包含的是网站的meta标签和引用的css和js文件。

{{{
<?php TPL::output('global/header_landing.tpl.htm'); ?>
}}}在注册页面调用输出这个模块,表示注册页面顶部上面的内容。

{{{
<?php TPL::output('block/content_nav_menu.tpl.htm'); ?>
}}} 输出发现页面顶部那个专题分类导航。

{{{
<?php TPL::output('block/sidebar_feature.tpl.htm'); ?>
}}}在发现等页面侧边栏输出专题模块。

{{{
<?php TPL::output('block/sidebar_hot_topics.tpl.htm'); ?>
}}}在发现等页面侧边栏输出热门话题模块。

{{{
<?php TPL::output('block/sidebar_hot_users.tpl.htm'); ?>
}}} 在发现等页面侧边栏输出热门用户的模块;

{{{
<?php TPL::output('block/sidebar_announce.tpl.htm'); ?>
}}}表示的是输出首页侧边栏的公告模块。

{{{
<?php TPL::output('block/sidebar_menu.tpl.htm'); ?>
}}} 表示输出首页侧边栏的**菜单栏**。

{{{
<?php TPL::output('block/sidebar_recommend_users_topics.tpl.htm'); ?>
}}}表示输出首页侧边栏的感兴趣的人或话题模块。

{{{
<?php TPL::output('topic/related_topics.tpl.htm'); ?>
}}}在话题页面侧边栏输出相关话题模块。

{{{
<?php TPL::output('global/footer.tpl.htm'); ?>
}}}这个表示的就是此处调用输出的是网站底部footer.tpl.htm的内容。

WeCenter一些常用的数据调用介绍

哥特复兴 发表了文章 • 14 个评论 • 10859 次浏览 • 2014-07-08 16:55 • 来自相关话题

目前WeCenter程序很多数据都是可以通过调用来实现内容展现和布局的。在前端调用的数据代码都可以在相对应的app文件里的main.php找到对应的代码。熟悉这些数据调用的代码有利于我们对模板进行二次开发。**注**:每组数据都对应的模块调用,比如首页这组数据 ...查看全部
目前WeCenter程序很多数据都是可以通过调用来实现内容展现和布局的。在前端调用的数据代码都可以在相对应的app文件里的main.php找到对应的代码。熟悉这些数据调用的代码有利于我们对模板进行二次开发。**注**:每组数据都对应的模块调用,比如首页这组数据对应的就是home里面的模板。

**全局用户信息**

{{{ <?php if ($this->user_id) { ?> :这个表示如果用户登录就显示后面的东西,其中user_id就表示用户id的意思;
<?php echo $this->user_info['notification_unread']; ?> : 表示输出用户未读的通知;
<?php echo $this->user_info['user_name']; ?> :表示输出用户名字;
<?php if ($this->user_info['inbox_unread'] != 0) {?> :输出用户未读私信;
<?php if ($this->user_info['invitation_available']) { ?> :输出用户可以邀请的好友数量;}}}

**首页相关:**

{{{$val['question_info'] : 问题信息;
<?php echo get_avatar_url($val['user_info']['uid'], 'mid'); ?> : 用户头像;
<?php echo $val['link']; ?><?php echo $val['title']; ?> : 问题链接和问题标题;
$val['add_time']) : 问题发布时间;
$val['article_info']['comments'] : 文章评论;
<?php _e('%s 个评论', $val['article_info']['comments']); ?> : 文章评论数量;
<?php _e('%s 个回复', $val['question_info']['answer_count']); ?> : 问题回答数量;
$val['topics'] : 话题;
$val['question_info']['question_id'] : 问题id;
$val['answer_info'] : 回答者信息;
$val['answer_info']['uid']: 回答者用户ID;
$val['answer_info']['agree_count'] : 回答者被赞同的数量;
$val['answer_info']['agree_users'] : 赞同用户;
<?php echo nl2br(strip_ubb(cjk_substr($val['answer_info']['answer_content'], 0, 130, 'UTF-8', '...'))); ?> : 输出回答摘要
$val['answer_info']['answer_content'] : 回答内容;
$val['answer_info']['attachs'] : 回答内容里的附件;
$t_val['is_image'] : 回答里的附件是否为图片;
$t_val['attachment'] : 回答里的附件的url;
$t_val['file_name'] : 回答里附件的文件名字;
$val['answer_info']['comment_count'] : 回答里的评论数量;}}}

**发现页面相关:**

{{{<?php echo $this->posts_list_bit; ?> : 发现页面的内容列表,调用的是ajax文件夹里的list.tpl.htm内容;
<?php echo $this->pagination; ?> : 翻页按钮的内容;
$this->feature_info : 专题信息;
$this->feature_info['id'] : 专题id;
$this->category_info['id'] : 分类id;
$val['question_id : 问题id;
$val['question_content'] : 问题内容;
$val['question_id' : 问题id;
$val['topics'] : 话题;
$t_val['topic_id'] : 话题id;
$t_val['topic_title'] : 话题标题;
<?php echo get_avatar_url($answer_user['uid'], 'mid'); ?> : 回答者头像;
$val['category_info']['title'] : 分类标题;
$val['answer']['user_info']['user_name'] : 回答者用户名;
$val['focus_count'] :关注数量;
$val['answer_count'] : 回复数量;
$val['view_count'] : 浏览量;
date_friendly($val['update_time'] : 发布时间;
$this->content_nav_menu as $key => $val : 专题导航菜单;}}}

**文章相关:**

{{{<?php echo $this->article_info['title']; ?> : 输出文章标题;
$this->user_info['permission']['is_administortar'] OR $this->user_info['permission']['is_moderator'] : 用户信息(是管理员还是作者);
$this->article_info['is_recommend'] : 文章被推荐;
$this->article_topics as $key => $val : 文章话题;
$this->article_info['message'] : 文章内容;
$this->article_info['attachs'] : 文章附件;
$attach['is_image'] : 附件是否是图片;
$attach['file_name'] : 附件名字;
$this->article_info['votes'] : 文章赞同按钮;
$this->article_info['vote_info']['rating'] : 文章投票信息;
$this->article_info['vote_users'] : 赞同文章用户;
<?php _e('%s 个评论', $this->comments_count); ?> : 文章评论数量;
$this->comments AS $key => $val : 文章评论(其实类似的很多后面跟了$key => $val是一个数组一样的,它还包括几个其他的调用文件,比如这个还包括子元素里的$val['user_info']['user_name'] 评论者姓名等等内容,这里我们就不去一一介绍了。)
<?php echo nl2br($val['message']); ?> : 输出文章内容;
$this->article_info['lock'] : 文章锁定;
$this->article_info['anonymous'] : 匿名作者;
$this->article_info['user_info']['integral'] : 积分;
$this->article_info['user_info']['reputation'] : 威望;
$this->reputation_topics , $this->reputation_topics AS $key => $val : 擅长话题;
$val['topic_id'] : 话题id;
$val['topic_title'] : 话题标题;
$this->question_related_list : 相关问题;
$this->article_list : 文章列表;
$this->article_topics[$val['id'] : 文章标题id;
<?php echo FORMAT::parse_attachs(nl2br(FORMAT::parse_markdown($val['message']))); ?> : 输出文章内容;
<?php if (cjk_strlen($val['message']) > 130) { ?> : 截取文章130个字;
$this->hot_articles AS $key => $val : 热门文章;
$this->content_nav_menu as $key => $val : 专题分类导航;
$val['child'] AS $_key => $_val :二级分类;
$val['icon'] : 图片导航;
$val['description'] : 描述;
$this->user_info['invite_count'] : 邀请数量;}}}


**问题页面相关**

{{{$this->question_info['question_content'] : 问题内容;
$this->question_info['lock'] : 锁定问题;
$this->question_info['is_recommend'] : 推荐问题;
$this->question_info['ip'] : 问题ip;
$this->question_topics as $key => $val : 问题标签;
$this->question_info['lock'] : 锁定问题;
$this->user_info['permission']['edit_question_topic'] : 编辑问题标签;
$this->related_topics AS $key => $topic_title : 相关话题;
$this->question_info['attachs'] : 问题附件;
$this->question_related_links : 问题相关链接;
$this->question_info['add_time'] : 问题发布时间;
$this->invite_users : 邀请用户回答;
$val['answer_content'] : 问题评论内容
$this->question_info['comment_count'] : 问题评论数量;
$this->question_info['question_id'] : 问题ID;
$this->question_thanks : 感谢提问者;
$this->question_info['update_time'] : 问题最新活动时间;
$this->question_info['view_count'] : 问题浏览量;
$this->question_info['focus_count'] : 问题关注数;
$this->question_related_list AS $key => $val) : 相关问题列表;
$this->question_info['best_answer'] : 最佳回复;
$val['user_rated_thanks'] : 感谢回复者;
$val['user_rated_uninterested'] : 没有帮助;
$this->question_info['question_detail'] : 问题描述;}}}

**发布**

{{{$this->question_category_list : 问题分类列表;
$this->recent_topics : 最近话题;
$this->human_valid : 验证码;
$this->article_category_list : 文章分类列表;
$this->article_info['message'] : 文章内容;
$this->article_topics : 文章标签;}}}



**话题页面相关**

{{{$this->redirect_message : 重定向内容;
$this->topic_info['topic_lock'] : 话题被锁定;
$this->topic_info['focus_count'] : 关注话题人数;
<?php echo $this->all_questions_list_bit; ?> :输出全部问题列表;
<?php echo $this->best_questions_list_bit; ?> : 输出精华问题列表;
<?php echo $this->articles_list_bit; ?> :输出文章列表;
$this->topic_info['topic_description'] : 话题描述;
$this->best_answer_users AS $key => $val : 最佳回复者;
$this->log_list : 话题修改记录;
$this->user_info['permission']['edit_topic'] :编辑话题;
$this->user_info['permission']['manage_topic'] : 管理话题;
$this->topics_list :话题列表;
$val['discuss_count'] : 该话题下的问题数量;
$val['focus_count'] : 该话题的关注人数;
$this->today_topic['topic_id'] : 今日话题id;
$this->today_topic['topic_title'] : 今日话题标题;
$this->today_topic['topic_description'] : 今日话题描述;}}}


**用户页面**

{{{$this->user['uid'] : 用户uid;
$this->user['verified'] : 用户认证;
$this->user['friend_count'] :关注人数;
$this->friends_list : 关注人数列表;
$this->user['fans_count'] : 粉丝数量;
$this->fans_list : 粉丝列表;
$this->focus_topics : 关注的话题;
$this->custom_group : 用户组;
$val['group_name'] : 用户组名称;
$val['group_id'] : 用户组id;
$this->feature_list : 专题列表;
$this->users_list : 用户列表;}}}

**其他**

{{{$this->feature_info['topic_count'] : 专题话题数量;
$this->sidebar_hot_topics AS $key => $val : 专题页面下的侧边栏热门话题;
$val['discuss_count'] : 专题下面的问题数量;
$this->feature_info['css'] : 自定义专题页面的css;
$this->favorite_tags : 收藏的标签;}}}

能不能开发这样的功能

回复

建议a595975822 回复了问题 • 3 人关注 • 2 个回复 • 306 次浏览 • 2020-03-21 15:26 • 来自相关话题

wecenter有计划换框架吗

回复

WeCenter 程序三叔 回复了问题 • 8 人关注 • 4 个回复 • 622 次浏览 • 2019-08-09 16:45 • 来自相关话题

还是自适应好啊。

回复

建站运营imningfeng 发起了问题 • 1 人关注 • 0 个回复 • 587 次浏览 • 2019-07-07 15:50 • 来自相关话题

为什么这段代码调用出来的图片会带问号+数字后缀?

回复

WeCenter 程序imningfeng 发起了问题 • 1 人关注 • 0 个回复 • 763 次浏览 • 2019-06-16 15:25 • 来自相关话题

二次开发的数据库词典何时更新成3.31的?

回复

WeCenter 程序marco_hsu 发起了问题 • 1 人关注 • 0 个回复 • 554 次浏览 • 2019-04-15 14:44 • 来自相关话题

需要一个二开思路

回复

创意与设计marco_hsu 回复了问题 • 4 人关注 • 3 个回复 • 901 次浏览 • 2019-01-17 16:55 • 来自相关话题

企业微信打开问题页面点击评论会调出拨打电话页面

回复

WeCenter 程序天地_玄黄 发起了问题 • 1 人关注 • 0 个回复 • 746 次浏览 • 2018-12-07 09:06 • 来自相关话题

wecenter的威望算法是怎样的

回复

问与答haines 回复了问题 • 2 人关注 • 1 个回复 • 906 次浏览 • 2018-10-24 08:46 • 来自相关话题

管理员如何删除答案,用户自己回答的问题如何删除?

回复

WeCenter 程序seosns 回复了问题 • 2 人关注 • 1 个回复 • 693 次浏览 • 2018-07-13 19:00 • 来自相关话题

最新版的wecenter 什么时候发布啊?我用3.12 的貌似存在 xss 攻击漏洞

回复

WeCenter 程序pangjincai 发起了问题 • 1 人关注 • 0 个回复 • 504 次浏览 • 2018-06-04 11:29 • 来自相关话题

Wecenter插件系统开发规范

插件fanta 发表了文章 • 0 个评论 • 1197 次浏览 • 2019-06-14 13:31 • 来自相关话题

1.命名规范 ...查看全部

1.命名规范



插件命名以wc_作为前缀+插件名,如插件test,即wc_test



2.目录新建



目录新建在根目录下plugin文件夹下,如插件名test,目录结构就是/plugins/wc_test/



3.目录结构



目录包含内容必须要有配置文件、核心类,非必要的有模型类、静态资源、第三方类、页面模板等,如test,则玩着目录如下



wc_test



|-config.php  配置文件



|-test.php   核心类



|-test_model  模型类



|-view     视图模板目录



|-static    静态资源目录



|-install.sql   安装sql



|-uninstall.sql  卸载sql



|-upgrade.sql  升级sql



4.配置文件



Config.php配置文件 返回一个多维数组,包含有:



name: 插件标识



title 插件标题名称



intro 插件介绍



author : 插件作者



version 插件版本



state  插件状态



config: 也是一个数组,包含所需的配置项,如:



  'config'=>[



  'ad_plugin_enable' =>



  array (



    'title' => '广告开启',



    'type' => 'radio',



    'value' => 'Y',



    'options' =>



    array (



      'Y' => '开启',



      'N' => '关闭',



    ),



  )



],



以上的配置config就是后台广告插件的配置显示效果,



'options' 对应的是配置项的值,



'value' 是默认值,



'type' 是配置类型,



'title' 是配置名称



常用的有textselect,radioCheckBox



ad_plugin_enable是开发者自己定义,调用的时候调用此键名即可



5.核心类



核心类同样继承自AWS_CONTROLLER,包含5个固定方法,即构造方法 install安装,uninstall卸载,enable启用,disable禁用,构造方法获取插件的配置和插件相关信息,安装、卸载、启用、禁用四个方法默认是调用系统的方法,也可以自定义,在方法里自行处理相关逻辑。



除了这5个方法之外,开发者可以自定义其他的方法进行调用。



6.模型类



模型类的定义名称需后接_model方可,如test_model,内部的定义与使用与model目录下的模型相同,



另注意一点,此处的模型名不可与model目录下的模型重名,如果重名,会去调用model目录下的模型,从而会导致找不到相关的方法一类的错误。



调用方法还是$this->model()进行调用。



6.staticview静态资源、视图目录



Staic目录存放css\js等静态资源



View 视图目可存放后台以及前台的视图模板



后台视图的要在目录下新建子目录admin,前台的模板直接放在view下即可,在核心类中,通过 PLUTPL::output('ad/banner');渲染页面,其中ad是插件名或者标识,banner是页面名称



后台的只需加上admin即可,如PLUTPL::output('ad/admin/edit');



7.安装、卸载、升级



安装、卸载、升级在后台都有相对应的操作,对应相应的sql执行即可。



8.插件调用



正常的调用只需用公共方法hook()方法调用即可,在后台或者其他的页面需要调用插件方法进行页面调用或方法的时候,可以通过doact方法,前台explore/doact  后台admin/plugin/doact  ,



添加广告按钮需要调用插件添加广告的方法,此处是超链接,可以通过admin/plugin/doact/?p=ad&a=edit进行传参调用,其中pa是必传的,p是插件名,a是方法名。


WeCenter 调用输出模板介绍

哥特复兴 发表了文章 • 7 个评论 • 7940 次浏览 • 2014-07-09 19:14 • 来自相关话题

WeCenter 采用了很多 <?php TPL::output('xxoo'); ?> 这种方式调用输出一些模块内容,比如: {{{ <?php TPL::output('global/header.tpl.htm' ...查看全部
WeCenter 采用了很多 <?php TPL::output('xxoo'); ?> 这种方式调用输出一些模块内容,比如:
{{{
<?php TPL::output('global/header.tpl.htm'); ?>
}}} 表示的是此处输出的是header.tpl.htm这个文件的内容,里面包含的是网站头部的内容。

{{{
<?php TPL::output('global/header_meta.tpl.htm'); ?>
}}}输出header_meta.tpl.htm内容,包含的是网站的meta标签和引用的css和js文件。

{{{
<?php TPL::output('global/header_landing.tpl.htm'); ?>
}}}在注册页面调用输出这个模块,表示注册页面顶部上面的内容。

{{{
<?php TPL::output('block/content_nav_menu.tpl.htm'); ?>
}}} 输出发现页面顶部那个专题分类导航。

{{{
<?php TPL::output('block/sidebar_feature.tpl.htm'); ?>
}}}在发现等页面侧边栏输出专题模块。

{{{
<?php TPL::output('block/sidebar_hot_topics.tpl.htm'); ?>
}}}在发现等页面侧边栏输出热门话题模块。

{{{
<?php TPL::output('block/sidebar_hot_users.tpl.htm'); ?>
}}} 在发现等页面侧边栏输出热门用户的模块;

{{{
<?php TPL::output('block/sidebar_announce.tpl.htm'); ?>
}}}表示的是输出首页侧边栏的公告模块。

{{{
<?php TPL::output('block/sidebar_menu.tpl.htm'); ?>
}}} 表示输出首页侧边栏的**菜单栏**。

{{{
<?php TPL::output('block/sidebar_recommend_users_topics.tpl.htm'); ?>
}}}表示输出首页侧边栏的感兴趣的人或话题模块。

{{{
<?php TPL::output('topic/related_topics.tpl.htm'); ?>
}}}在话题页面侧边栏输出相关话题模块。

{{{
<?php TPL::output('global/footer.tpl.htm'); ?>
}}}这个表示的就是此处调用输出的是网站底部footer.tpl.htm的内容。

WeCenter一些常用的数据调用介绍

哥特复兴 发表了文章 • 14 个评论 • 10859 次浏览 • 2014-07-08 16:55 • 来自相关话题

目前WeCenter程序很多数据都是可以通过调用来实现内容展现和布局的。在前端调用的数据代码都可以在相对应的app文件里的main.php找到对应的代码。熟悉这些数据调用的代码有利于我们对模板进行二次开发。**注**:每组数据都对应的模块调用,比如首页这组数据 ...查看全部
目前WeCenter程序很多数据都是可以通过调用来实现内容展现和布局的。在前端调用的数据代码都可以在相对应的app文件里的main.php找到对应的代码。熟悉这些数据调用的代码有利于我们对模板进行二次开发。**注**:每组数据都对应的模块调用,比如首页这组数据对应的就是home里面的模板。

**全局用户信息**

{{{ <?php if ($this->user_id) { ?> :这个表示如果用户登录就显示后面的东西,其中user_id就表示用户id的意思;
<?php echo $this->user_info['notification_unread']; ?> : 表示输出用户未读的通知;
<?php echo $this->user_info['user_name']; ?> :表示输出用户名字;
<?php if ($this->user_info['inbox_unread'] != 0) {?> :输出用户未读私信;
<?php if ($this->user_info['invitation_available']) { ?> :输出用户可以邀请的好友数量;}}}

**首页相关:**

{{{$val['question_info'] : 问题信息;
<?php echo get_avatar_url($val['user_info']['uid'], 'mid'); ?> : 用户头像;
<?php echo $val['link']; ?><?php echo $val['title']; ?> : 问题链接和问题标题;
$val['add_time']) : 问题发布时间;
$val['article_info']['comments'] : 文章评论;
<?php _e('%s 个评论', $val['article_info']['comments']); ?> : 文章评论数量;
<?php _e('%s 个回复', $val['question_info']['answer_count']); ?> : 问题回答数量;
$val['topics'] : 话题;
$val['question_info']['question_id'] : 问题id;
$val['answer_info'] : 回答者信息;
$val['answer_info']['uid']: 回答者用户ID;
$val['answer_info']['agree_count'] : 回答者被赞同的数量;
$val['answer_info']['agree_users'] : 赞同用户;
<?php echo nl2br(strip_ubb(cjk_substr($val['answer_info']['answer_content'], 0, 130, 'UTF-8', '...'))); ?> : 输出回答摘要
$val['answer_info']['answer_content'] : 回答内容;
$val['answer_info']['attachs'] : 回答内容里的附件;
$t_val['is_image'] : 回答里的附件是否为图片;
$t_val['attachment'] : 回答里的附件的url;
$t_val['file_name'] : 回答里附件的文件名字;
$val['answer_info']['comment_count'] : 回答里的评论数量;}}}

**发现页面相关:**

{{{<?php echo $this->posts_list_bit; ?> : 发现页面的内容列表,调用的是ajax文件夹里的list.tpl.htm内容;
<?php echo $this->pagination; ?> : 翻页按钮的内容;
$this->feature_info : 专题信息;
$this->feature_info['id'] : 专题id;
$this->category_info['id'] : 分类id;
$val['question_id : 问题id;
$val['question_content'] : 问题内容;
$val['question_id' : 问题id;
$val['topics'] : 话题;
$t_val['topic_id'] : 话题id;
$t_val['topic_title'] : 话题标题;
<?php echo get_avatar_url($answer_user['uid'], 'mid'); ?> : 回答者头像;
$val['category_info']['title'] : 分类标题;
$val['answer']['user_info']['user_name'] : 回答者用户名;
$val['focus_count'] :关注数量;
$val['answer_count'] : 回复数量;
$val['view_count'] : 浏览量;
date_friendly($val['update_time'] : 发布时间;
$this->content_nav_menu as $key => $val : 专题导航菜单;}}}

**文章相关:**

{{{<?php echo $this->article_info['title']; ?> : 输出文章标题;
$this->user_info['permission']['is_administortar'] OR $this->user_info['permission']['is_moderator'] : 用户信息(是管理员还是作者);
$this->article_info['is_recommend'] : 文章被推荐;
$this->article_topics as $key => $val : 文章话题;
$this->article_info['message'] : 文章内容;
$this->article_info['attachs'] : 文章附件;
$attach['is_image'] : 附件是否是图片;
$attach['file_name'] : 附件名字;
$this->article_info['votes'] : 文章赞同按钮;
$this->article_info['vote_info']['rating'] : 文章投票信息;
$this->article_info['vote_users'] : 赞同文章用户;
<?php _e('%s 个评论', $this->comments_count); ?> : 文章评论数量;
$this->comments AS $key => $val : 文章评论(其实类似的很多后面跟了$key => $val是一个数组一样的,它还包括几个其他的调用文件,比如这个还包括子元素里的$val['user_info']['user_name'] 评论者姓名等等内容,这里我们就不去一一介绍了。)
<?php echo nl2br($val['message']); ?> : 输出文章内容;
$this->article_info['lock'] : 文章锁定;
$this->article_info['anonymous'] : 匿名作者;
$this->article_info['user_info']['integral'] : 积分;
$this->article_info['user_info']['reputation'] : 威望;
$this->reputation_topics , $this->reputation_topics AS $key => $val : 擅长话题;
$val['topic_id'] : 话题id;
$val['topic_title'] : 话题标题;
$this->question_related_list : 相关问题;
$this->article_list : 文章列表;
$this->article_topics[$val['id'] : 文章标题id;
<?php echo FORMAT::parse_attachs(nl2br(FORMAT::parse_markdown($val['message']))); ?> : 输出文章内容;
<?php if (cjk_strlen($val['message']) > 130) { ?> : 截取文章130个字;
$this->hot_articles AS $key => $val : 热门文章;
$this->content_nav_menu as $key => $val : 专题分类导航;
$val['child'] AS $_key => $_val :二级分类;
$val['icon'] : 图片导航;
$val['description'] : 描述;
$this->user_info['invite_count'] : 邀请数量;}}}


**问题页面相关**

{{{$this->question_info['question_content'] : 问题内容;
$this->question_info['lock'] : 锁定问题;
$this->question_info['is_recommend'] : 推荐问题;
$this->question_info['ip'] : 问题ip;
$this->question_topics as $key => $val : 问题标签;
$this->question_info['lock'] : 锁定问题;
$this->user_info['permission']['edit_question_topic'] : 编辑问题标签;
$this->related_topics AS $key => $topic_title : 相关话题;
$this->question_info['attachs'] : 问题附件;
$this->question_related_links : 问题相关链接;
$this->question_info['add_time'] : 问题发布时间;
$this->invite_users : 邀请用户回答;
$val['answer_content'] : 问题评论内容
$this->question_info['comment_count'] : 问题评论数量;
$this->question_info['question_id'] : 问题ID;
$this->question_thanks : 感谢提问者;
$this->question_info['update_time'] : 问题最新活动时间;
$this->question_info['view_count'] : 问题浏览量;
$this->question_info['focus_count'] : 问题关注数;
$this->question_related_list AS $key => $val) : 相关问题列表;
$this->question_info['best_answer'] : 最佳回复;
$val['user_rated_thanks'] : 感谢回复者;
$val['user_rated_uninterested'] : 没有帮助;
$this->question_info['question_detail'] : 问题描述;}}}

**发布**

{{{$this->question_category_list : 问题分类列表;
$this->recent_topics : 最近话题;
$this->human_valid : 验证码;
$this->article_category_list : 文章分类列表;
$this->article_info['message'] : 文章内容;
$this->article_topics : 文章标签;}}}



**话题页面相关**

{{{$this->redirect_message : 重定向内容;
$this->topic_info['topic_lock'] : 话题被锁定;
$this->topic_info['focus_count'] : 关注话题人数;
<?php echo $this->all_questions_list_bit; ?> :输出全部问题列表;
<?php echo $this->best_questions_list_bit; ?> : 输出精华问题列表;
<?php echo $this->articles_list_bit; ?> :输出文章列表;
$this->topic_info['topic_description'] : 话题描述;
$this->best_answer_users AS $key => $val : 最佳回复者;
$this->log_list : 话题修改记录;
$this->user_info['permission']['edit_topic'] :编辑话题;
$this->user_info['permission']['manage_topic'] : 管理话题;
$this->topics_list :话题列表;
$val['discuss_count'] : 该话题下的问题数量;
$val['focus_count'] : 该话题的关注人数;
$this->today_topic['topic_id'] : 今日话题id;
$this->today_topic['topic_title'] : 今日话题标题;
$this->today_topic['topic_description'] : 今日话题描述;}}}


**用户页面**

{{{$this->user['uid'] : 用户uid;
$this->user['verified'] : 用户认证;
$this->user['friend_count'] :关注人数;
$this->friends_list : 关注人数列表;
$this->user['fans_count'] : 粉丝数量;
$this->fans_list : 粉丝列表;
$this->focus_topics : 关注的话题;
$this->custom_group : 用户组;
$val['group_name'] : 用户组名称;
$val['group_id'] : 用户组id;
$this->feature_list : 专题列表;
$this->users_list : 用户列表;}}}

**其他**

{{{$this->feature_info['topic_count'] : 专题话题数量;
$this->sidebar_hot_topics AS $key => $val : 专题页面下的侧边栏热门话题;
$val['discuss_count'] : 专题下面的问题数量;
$this->feature_info['css'] : 自定义专题页面的css;
$this->favorite_tags : 收藏的标签;}}}

固定顶部菜单导航栏,让页面下划始终显示菜单栏

哥特复兴 发表了文章 • 18 个评论 • 4594 次浏览 • 2014-05-14 13:30 • 来自相关话题

以官方默认模板为例: 打开common.css,搜索{{{ .aw-top-menu-wrap }}}把里面的{{{ position:relative; }}}改为{{{ ...查看全部
以官方默认模板为例:

打开common.css,搜索{{{
.aw-top-menu-wrap
}}}把里面的{{{
position:relative;
}}}改为{{{
position:fixed;
}}}
还没完,这样会导致菜单栏在屏幕的最上方会挡住下面的一些内容,所以你在.aw-top-menu-wrap下面再加一行css:

{{{
.aw-container-wrap {padding-top: 80px;}
}}}
要在手机端有同样效果,记得在common.cc里响应式下面的iphone和ipad横竖屏里的css部分也加上
{{{
.aw-container-wrap {padding-top: 80px;}
}}}
--END--

如何在首页和发现中插入自定义文章

jat 发表了文章 • 12 个评论 • 3561 次浏览 • 2014-05-11 15:16 • 来自相关话题

首先,你要自己发表一篇文章,记下它的 id,比如这篇文章的 id 就是 134。 然后,在 app/home/main.php(首页)第 64 - 67 行 {{{ if (! $this->user_info['em ...查看全部
首先,你要自己发表一篇文章,记下它的 id,比如这篇文章的 id 就是 134。
然后,在 app/home/main.php(首页)第 64 - 67 行
{{{
if (! $this->user_info['email'])
{
HTTP::redirect('/account/complete_profile/');
}
}}}
或 app/explore/main.php(发现)第 47 - 57 行
{{{
if ($_GET['category'])
{
if (is_numeric($_GET['category']))
{
$category_info = $this->model('system')->get_category_info($_GET['category']);
}
else
{
$category_info = $this->model('system')->get_category_info_by_url_token($_GET['category']);
}
}
}}}
之后加入
{{{
$article_showed_id = 刚才记下的文章 id;
$article_showed_info = $this->model('article')->get_article_info_by_id($article_showed_id);
if ($article_showed_info['has_attach'])
{
$article_showed_info['attachs'] = $this->model('publish')->get_attach('article', $article_showed_info['id'], 'min');
$article_showed_info['attachs_ids'] = FORMAT::parse_attachs($article_showed_info['message'], true);
}
$article_showed_info['message'] = FORMAT::parse_attachs(nl2br(FORMAT::parse_markdown($article_showed_info['message'])));
TPL::assign('article_showed_info', $article_showed_info);
}}}

$article_showed_info 是一个多维数组,可以在模板文件(views/default/home/index.tpl.htm 或 views/default/explore/index.tpl.htm)中使用
$this->article_showed_info 引用。

下面介绍下该数组的键:
{{{
$this->article_showed_info['id'] 文章 id
$this->article_showed_info['uid'] 发表这篇文章的用户 id
$this->article_showed_info['title'] 文章标题(如果过长则为部分)
$this->article_showed_info['message'] 文章内容
$this->article_showed_info['comments'] 文章的评论数
$this->article_showed_info['views'] 文章的浏览数
$this->article_showed_info['add_time'] 文章的添加时间(UNIX 时间)
$this->article_showed_info['has_attach'] 是否有附件
$this->article_showed_info['lock'] 是否锁定
$this->article_showed_info['votes'] 被赞数
$this->article_showed_info['title_fulltext'] 文章标题(全部)
$this->article_showed_info['category_id'] 文章所属话题的 id
$this->article_showed_info['is_recommend'] 是否被推荐
$this->article_showed_info['attachs'] 文章的附件(关联数组,键为附件的 id,值为关联数组,请使用 foreach 遍历)
$this->article_showed_info['attachs_ids'] 插入到文章的附件(数值数组,值为附件的 id)
}}}

遍历 $this->article_info['attachs']:
{{{
foreach ($this->article_info['attachs'] as $attach) {
}
}}}
下面介绍下 $attach 的键:
{{{
$attach['id'] = 附件 id
$attach['is_image'] 附件是否是图片
$attach['file_name'] 附件上传时的文件名
$attach['access_key'] 附件的访问密钥(暂时没用)
$attach['attachment'] 附件的 url
$attach['thumb'] 附件为图像时的缩略图 url(非图像时无此键)
}}}
输出附件下载链接时,应该使用 download_url($attach['file_name'], $attach['attachment']),而不应该直接使用 $attach['attachment']),直接使用会导致文件名不正确。

如果想输出文章的更多内容可以参考 app/article/main.php,具体示例请看 views/default/article/index.tpl.htm。

WeCenter二次开发教程(二):登录页面修改教程

哥特复兴 发表了文章 • 11 个评论 • 9016 次浏览 • 2014-04-16 15:39 • 来自相关话题

首先我们要知道登录页面的有关自己文件放在哪里。Html 文件在views\default\account\login.tpl.htm ,css文件在wecenter\static\css\default\login.css 里,js文件在wecenter\st ...查看全部
首先我们要知道登录页面的有关自己文件放在哪里。Html 文件在views\default\account\login.tpl.htm ,css文件在wecenter\static\css\default\login.css 里,js文件在wecenter\static\js\app\login.js 里。要修改登录页面的内容只要进入对应文件夹里修改就可以了。

这里要修改登录页的文字和背景图片可以用代码编辑器打开login.tpl.htm文件。如下图:


QQ截图20140415230020.jpg



可以看登陆页主要由登陆框,文字介绍部分以及背景图片三部分组成的。熟悉结构后,我们可以开始修改了。比如要修改文字介绍:
如下图,你只要按照对应的文字修改成自己的文字即可,比如想换成自己的Logo,只要把img标签里面那个<img src="<?php echo G_STATIC_URL; ?>/css/<?php echo $this->template_name; ?>/img/login_logo.png" alt="<?php echo get_setting('site_name'); ?>" /> **login_logo.png** 换为自己的Logo图片名字。

程序自带的登录页面文字都在上面的图片里,主要由三个p标签分三段包住,你可以在对应的文字地方改成自己的文字,如果不需要这么多段文字介绍,你也可以把一个完整的<p></p>标签删掉。

修改背景图片:
背景图片的代码就在文字介绍下面:


QQ截图20140415231147.jpg



要修改背景图片你只要把**login_01.jpg ,login_02.jpg,login_03.jpg**三张图片换成自己的图片文件名字,图片文件统一放在static\common文件夹里面。

如果想把登录页面换成一个简单的登录注册框怎么做?如下:

在views下新建模板名称,在模板文件里新建account文件,把default里这个文件夹下的login.tpl.htm复制过来,然后开始修改,我们只需要登录框,所以可以把那些背景图片和文字介绍删掉,最后只留下登录框内容。


QQ截图20140416151748.jpg



然后在static/css下新建css模板文件夹和css文件,名字和views那里模板名字相同。在css文件里开始写登陆框对应的样式,具体样式看你想要改成什么样的。

由于登录注册邮箱验证等文件都在account里,所以你要修改这些地方的话基本步骤都是一样的,只要把对应的内动换成你想改成的样子就可以,css可以统一写在一个css文件里。

WeCenter二次开发教程(一):熟悉模板结构

哥特复兴 发表了文章 • 13 个评论 • 17662 次浏览 • 2014-04-16 15:36 • 来自相关话题

<1>程序文件目录介绍: > app – 应用目录 models – 模型目录 plugins – 插件目录 static – 静态文件 system – 系统目录 ...查看全部
<1>程序文件目录介绍:

> app – 应用目录
models – 模型目录
plugins – 插件目录
static – 静态文件
system – 系统目录
views – 模板目录

我们简单的页面二次开发主要还是关注static和views这两个文件。 下面在介绍一下这个文件里面对应的目录功能,static里面文件分别是:
admin: 后台控制面板的css,js,图片这些文件;
common: 网站公用的图片,比如社区默认的头像图片;
css: 主要介绍css/default里的css文件功能,link.css – 全站字体颜色;common.css – 模板主css文件;login.css – 登录页面css register.css – 注册页面css user-setting.css – 用户设置页面css user.css – 用户主页css
js: 模板的js文件,包含一些公用的js文件以及一些控制对应功能的js文件,其中app文件里面就是包含的控制模板对应功能的js文件,mobile.js是手机版的Js文件;aw_template.js – 页面通用模板文件,如弹窗模板; function.js – 全站基本功能函数; app.js – 页面加载时调用的js; /editor – 编辑器js; /plug_module/plug-in_module.js – 全站基础框架js,内涵jQuery,bootstrap,附件上传,Hogan模板引擎。
接下来再看看views文件对应的内容:
其实views就是放对应的模板文件的,程序自带两个模板--默认的default和黑色的classblack,其中大家可能会发现classblack文件内容为空,这里你要了解下wecenter的模板继承机制,wecenter系统的 default 为主模板, 用户的自定义模板只需要更改很少的文件即可实现程序界面的定制。具体如下:


dev-2.jpg



<2>再说一下如何创建新模板:

1. 在 views 下面建立模板目录。如果你不想对模板结构做调整的话,里面可以不放内容,如果你想调整程序的结构布局这些东西,你需要从default里把对应的文件拷贝过来放新的模板文件里然后在进行二次修改开发,不建议直接在default里修改。 下为default模板(views/default)里对应的文件功能:
{{{
/account – 账户相关模板,如登录,注册等
/admin – 后台
/article
/block – 通用模块
/config – 配置分页样式
/favorite – 我的收藏
/feature – 专题
/global – 全局通用模块,如头部,底部
/home – 首页,发现页
/inbox – 私信
/install – 安装
/invitation – 邀请好友
/m – 移动版本模板
/migrate – 安装上传目录设置
/notifications – 通知
/people – 个人页面
/publish – 发起
/question – 问题
/reader – 阅读器
/search – 搜索
/topic – 话题
}}}
注意 : 目录下ajax目录下模板为数据模板

2. 在 static/css/ 下建立与模板相同的目录(文件名字要相同,都取你的模板名字为文件名称), 然后在里面开始创建css文件,同样的css文件名也要是你的模板名,这里我们不建议直接修改默认模板的css文件,因为会继承默认common.css里的属性的,所以只需要把你需要改动的css地方全部写在你新建的css文件里.

<3> 介绍页面的基本结构:

页面一般都由头部,中间内容,底部,侧边栏组成。其中头部和底部包括一些侧边栏是通用的,都是通过调用模块来实现的:
> 头部调用 : <?php TPL::output('global/header.tpl.htm'); ?>
底部调用 : <?php TPL::output('global/footer.tpl.htm'); ?>
侧边栏调用 : <?php TPL::output('block/sidebar_menu.tpl.htm'); ?>

中间内容部分基本上都是通过ajax来获取数据内容,因为WeCenter采用了bootstrap框架,所以内容的整体框架布局都是在图中这样的代码框架里插入内容:
{{{
<div class="container">
<div class="row">
<div class="col-md-12 col-sm-12">

</div>
</div>
</div>
}}}
到了内容里面具体的代码结构,我们采用的是如下图这种模块结构:
{{{
<div class="aw-mod">
<div class="aw-mod-head">
</div>
<div class="aw-mod-body">
</div>
<div class="aw-mod-footer">
</div>
</div>
}}}

侧边栏结构的话我们则把.aw-mod换成.aw-side-bar-mod即可。 其中aw是程序前缀,新建的模板要是需要添加或更改结构可以另外去一个前缀,方便后期修改维护。