系统下载:https://www.eduaskcms.xin/download/show/15.html 更新日志:https://www.kancloud.cn/laowu199/e_dev/408412 系统捐赠:https://www.eduaskcms.xin/dashang.html 培训视频:https://www.eduaskcms.xin/download/show/26.html 系统发布至今已经快2年,我们准备长时间做下去,同时了也花费了大量的时间在这上面。所以,如果商业开发请授权支持(目前授权300元,一次捐赠终身授权),如果仅仅学习(不允许修改版权信息和LOGO)请捐赠至少10元支持。 如果是授权用户,WOOCMS内我们提供问题解答服务(你相当于多一个技术支持)。 ***** 首先是下载系统,然后安装(如果正常,系统会自动进入安装流程),如果安装有问题请查阅[安装说明](https://www.kancloud.cn/laowu199/e_dev/577920)。 完成成功以后:`域名/run` 去访问后台 ## <span style="color:green;">企业建站</span> 系统后台已经有完善的内容管理功能,但前台你网站页面还是需要你自己写的,一个简单的企业站你基本上只需要做首页和通用内页基础,所以一天1-2个站是很有可能完成的。 #### 开发前,需要需要知道的一些情况: * 你项目的网络可访问根目录是public目录 * 模板引擎是smarty,使用`{}`包括住的都是smarty语法,单独的js和css文件不经过PHP引擎,所以不要指望在js文件中动态变量输出 * 每个你创建的栏目都有对应的控制器,这些控制器都有2个方法show和view分别对应列表页和详情页 ~~~ Article 文章 Page 单页 Product 产品 Link 链接 Download 下载 Feedback 留言 Album 图集 ~~~ * 你自己的JS和CSS在`app\http\Callback`类中的`appBeforeHome`方法指定 * 开发过程中有输出有问题,多调试`{pr(变量或数据)} ` pr是系统内置函数用于调试打印数据结构 #### 建站开发: [建站相关详细文档](https://www.kancloud.cn/laowu199/e_dev/651072) * 这里罗列了一些常用的数据获取方式: ``` {menu('nav')} //获取当前前台栏目树形结构,里面只包含id {menu(栏目id)} //获取指定栏目ID的所有字段 {menu(栏目id,'字段名')} //获取指定栏目ID对应的指定字段值 {menu('nav_children', 栏目id)} //获取指定栏目下的所有子栏目 ,里面只包含子栏目id {menu('list')} //获取所有栏目详情字段列表 {call menu_link id=栏目id} 或 {menu_link(栏目id)} //栏目链接生成:返回指定栏目ID对应的列表页链接 {call layui_nav} //直接返回layui风格导航html结构 {call layui_nav length=6} //直接返回layui风格导航html结构,但一级栏目最多显示6个 {call layui_nav class="test"} //直接返回layui风格导航html结构,给ul加一个指定类名 {call bootstrap_nav} //直接返回bootstrap风格导航html结构 {call bootstrap_nav length=6} //直接返回bootstrap风格导航html结构,但一级栏目最多显示6个 {call bootstrap_nav class="nav-tabs"} // 直接返回bootstrap风格导航html结构,给ul加一个指定类名 {get_menu_data(栏目ID(integer) , 查询条数(integer), $options =[])} // 返回指定栏目ID下面的指定条数据 {get_ad_data(广告位变量,广告数量默认为0)} // 返回指定变量的广告数据 {setting('系统设置变量')} // 获取系统设置指定变量的值 比如:setting('site_title ')获取网站名称 //列表页数据,是指访问show方法后 由控制器assign(系统默认)出来的数据。 {$list} // 当前访问的列表数据 {$page} // 当前访问的页码数据 {$render} // bootstrap风格翻页html结构 {$menu_data} // 当前访问栏目的数据 {$top_id} // 当前访问栏目所在的一级栏目ID {$path} // 当前访问栏目所经过的所有栏目ID,可用于做"当前位置" {$side_menu['top_menu']} // 当前访问栏目所在的一级栏目数据 {$side_menu['menus']} // 内页侧栏目ID列表 // 详情页数据,是指访问view方法后 由控制器assign(系统默认)出来的数据。 {$data} // 当前访问的详情数据 {$prev} // 当前访问数据的上一条数据 {$next} // 当前访问数据的下一条数据 {$menu_data} // 当前访问栏目的数据 {$top_id} // 当前访问栏目所在的一级栏目ID {$path} // 当前访问栏目所经过的所有栏目ID,可用于做"当前位置" {$side_menu['top_menu']} // 当前访问栏目所在的一级栏目数据 {$side_menu['menus']} // 内页侧栏目ID列表 {include file="common/path.html" delimiter=' &gt; '} //获取 内页“当前位置”html结构 {call trim_content html=$data.content length=100} // 过滤掉html标签,并显示前100字符,比如列表需要提取部分文章详情内容 {call trim_content html=$data.summary|nl2br|default:$data.content length=100}// summary字段有就显示summary字段,否则显示content字段 {call index_link} // 返回首页链接 {call view_link item=$item} // 用于遍历列表时,返回每条数据对于的详情页链接 $item是你数据变量 // 全局变量: {$params} // 当前请求相关参数:模块、控制器、方法、url参数 {$args} // 当前url参数 {$mdl} // 当前请求 对应模型名 {$mdl_name} // 当前模型中文名 {$login} // 如果有登录获取用户信息 {$root} // 当前相对根域名 {$absroot} // 当前绝对根域名 {$isMobile} // 当前是否由手机请求 {$now} // 当前服务器时间 //举例: //循环栏目18的4条数据并附带一些查询条件 {foreach get_menu_data(18,4, ['cache' => true,'where'=>[['is_verify','=',1],['date','>','2018-06-07']]]) as $item} <li> <a href="{call view_link item=$item mdl=menu(18, 'type')}">{$item.title}</a> </li> {/foreach} {$adData= get_ad_data('index_banner', 4, ['cache' => true])} {$adData= get_ad_data('index_banner', 4, ['cache' => 300])} // 指定缓存过期时间 {$adData= get_ad_data('index_banner', 4, ['cache' => 300,'cacheKey' => '自定义缓存名字'])} //循环广告数据 {foreach $adData.Ad as $item} <li> <a href="{url($item.link)}"><img {if !$isMobile}src="{$absroot}{$item.thumb}"{else}src="{$absroot}{$item.mobile_thumb}"{/if} alt="{$item.title}"></a> </li> {/foreach} //列表页 循环列表 {foreach $list as $item} <li class="{cycle values='odd,even'}"> <div class="thumb"> <a href="{call view_link item=$item}" style="background-image: url('{$absroot}{$item.thumb}');" class="coverBg cms_tran"><img src="{$absroot}{$item.thumb}" alt="{$item.title}" class="hidden"/></a> </div> <h4><a href="{call view_link item=$item}">{$item.title}</a></h4> <p>{call trim_content html=$item.summary|nl2br|default:$item.content length=100}</p> </li> {/foreach} //内页栏目标题+测栏目输出 <div id="insiderBar"> <h2 class="reset">{$menu_data.title}</h2> <ul class="list"> {foreach $side_menu.menus as $menu_id} <li class="{if $menu_id==$menu_data.id}current{/if}"><a href="{call menu_link id=$menu_id}">{menu($menu_id,'title')}</a></li> {/foreach} </ul> </div> ``` * 如果是一个简单的企业站,一般你只需要些首页和内页基础2个html页面,栏目列表和详情系统都有默认的;其中列表风格系统内置了16种,翻页方式也可以选择(页码、瀑布流)。 * [如果栏目需要自定义列表模板或详情模板?](https://www.kancloud.cn/laowu199/e_dev/651086) * [如果每个栏目都需要单独上传广告图片?](https://www.kancloud.cn/laowu199/e_dev/651080) * [如何做搜索功能?](https://www.kancloud.cn/laowu199/e_dev/922241) ***** ***** ## <span style="color:green;">后台开发</span> #### 开发前,需要需要知道的一些情况: * 你如果需要WOOCMS在后台帮你管理一张表的数据,是必须需要模型类的 * 系统是基于ThinkPHP5.1的,所以ThinkPHP5.1本身功能都支持的 * 你最好是知道MVC思想的,然后模型文件默认都放到app\common\model目录下的 * 你最好是先知道WOOCMS的一些[规范](https://www.kancloud.cn/laowu199/e_dev/577922) * 每个控制器的主要几个操作对应: ``` 列表:lists 添加:create 修改:modify 排序:sort 导出:export 详情:detail 删除:delete 批量删除:batchDelete ``` * 你自己的控制器核心继承基类在app\common\controller下(默认是空的,用于写你自己项目的一些通用代码) ***** #### 开发步骤: * 创建基础模型文件+建表(基础表结构):后台>开发工具>模型生成 ![](https://box.kancloud.cn/487bd28498392d2ad7bddd31ea2b8ca8_1077x733.png) 文件名:英文字母组成,多个单词使用大驼峰或下划线形式 其中的**基础字段**建议的做法,至少勾选一个字段,这样才会自动帮你建表(否则需要手动建表),建表额时候会自动创建`id`字段主键自增(自动建表V1.3.2新增,之前版本需要手动建表) ***** * 创建后台控制器,这样才能通过URL访问:后台>开发工具>控制器生成 ![](https://box.kancloud.cn/594318c0e1db916eb87481dd3435c401_1012x496.png) 控制器名称一般和刚刚的模型名称一致 创建好以后,可以通过:*域名/run/控制器名/lists*访问列表,也可以在模型管理中找到该模型有对应列表的链接 ***** * 表字段取舍:后台>开发工具>模型管理>数据字典 ![](https://box.kancloud.cn/569ab5943383a9e1e0bff144700b378f_804x726.png) 不足的字段在这里面添加,多余的字段删除掉;这里可以完成大多数字段的建立,过于特殊的字段请自行在专业数据库管理工具中完成(V1.3.2以后才有这个功能,之前版本请自行在phpMyAdmin或Navicat工具中完成字段的取舍) ***** * 模型文件的各项配置编写:默认在`app\common\model`目录下找到你的模型文件: 1、`$form`属性:**一定需要写的属性**,添加和修改的表单都是通过这个属性进行自动判断使用什么表单组件,所以这个属性很重要,建议的做法是每个字段都要在这个属性中进行配置。[具体配置方式和有哪些表单元素组件?](https://www.kancloud.cn/laowu199/e_dev/408386) 2、`$assoc`属性:定义当前模型与其他模型之间的关联关系,关联查询都需要依靠这个属性进行处理。 [理解不清模型关联关系?](https://www.kancloud.cn/laowu199/e_dev/448632) [关联模型详解?](https://www.kancloud.cn/laowu199/e_dev/408389) 3、`$validate`:定义字段的验证规则,使用模型保存数据之前系统默认会自动验证,但还是需要你之间定义验证规则。[数据验证配置详解?](https://www.kancloud.cn/laowu199/e_dev/408387) 4、`$formGroup`:后台表单分组,如果你的表字段比较多可以考虑对字段进行分组。[分组使用说明?](https://www.kancloud.cn/laowu199/e_dev/408386#group) 5、`$fieldRespond`:后台表单字段响应,当某个字段为特定值时才显示某些字段。[字段响应举例说明?](https://www.kancloud.cn/laowu199/e_dev/408386#respond) 这些估计算基础和常用一点的设置,模型还有更多的一些说明,就请看模型具体文档了。模型建议的方式,除了文档以外可以多结合系统已有模型进行参照,比较有参照意义的模型有(Article、Menu、User等) ***** * 控制器文件的编写:`app\run\controller`目录下找到你的控制器文件: 1、lists方法:控制器你一定会修改的地方是lists方法,在这里你要定义你列表中需要显示哪些字段,以及列表搜索字段有哪些。 下面是文章Article控制器的示范: ``` public function lists(){ $this->local['filter'] = [ 'id', 'title', 'menu_id' => [ 'elem' => 'options', 'assoc_options' => [ 'where' => [ ['type', '=', $this->m] ], 'order' => ['id' => 'ASC'] ] ], 'date', 'is_verify' ]; $this->local['list_fields'] = array( 'title', 'menu_id', 'user_id', 'image', 'date', 'created', 'is_verify', 'is_index', 'list_order' ); $this->local['exportable'] = true; call_user_func(array('parent', __FUNCTION__));//调用父类方法实现列表功能 } ``` [其他列表中你估计会预计的情况?](https://www.kancloud.cn/laowu199/e_dev/408373) 列表可以多看Article和User控制器的示范 2、后台其他方法,基本上都不是必须会写代码的地方了,确实有情况,[请查阅后台控制器方法说明](https://www.kancloud.cn/laowu199/e_dev/408368)