多人博客项目构建过程(四)

前端开发

开发环境设置

 

 

修改项目信息

打开VS工具,选择package.json文件

选择webpack.config.dev.js文件

安装依赖

$npm install
$npm install react-router
$npm install react-router-dom

 

 开发

前端路由

#src/index.js
import React from 'react';
import ReactDom from 'react-dom';
import { BrowserRouter as Router, Route, Link } from "react-router-dom";

const Home = () => (
  <div>
    <h2>Home</h2>
  </div>
);

const About = () => (
  <div>
    <h2>About</h2>
  </div>
);

const App = () => (
  <Router>
    <div>
      <Route exact path="/" component={Home} />
      <Route path="/about" component={About} />
    </div>
  </Router>
);

ReactDom.render(<App />,document.getElementById('root'));

 

登录组件

<div class="login-page">
  <div class="form">
    <form class="register-form">
      <input type="text" placeholder="name"/>
      <input type="password" placeholder="password"/>
      <input type="text" placeholder="email address"/>
      <button>create</button>
      <p class="message">Already registered? <a href="#">Sign In</a></p>
    </form>
    <form class="login-form">
      <input type="text" placeholder="username"/>
      <input type="password" placeholder="password"/>
      <button>login</button>
      <p class="message">Not registered? <a href="#">Create an account</a></p>
    </form>
  </div>
</div>

 

 

 

//在src/component/login.js
import React from 'react';
import ReactDom from 'react-dom';
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import '../css/login.css'

export default class Login extends React.Component{
    render(){
        return (
            <div className="login-page">
                <div className="form">
                    <form className="login-form">
                    <input type="text" placeholder="邮箱"/>
                    <input type="password" placeholder="密码"/>
                    <button>登录</button>
                    <p className="message">还未注册? <a href="/reg">注册用户</a></p>
                    </form>
                </div>
            </div>
        ); 
    }
}
//src/index.js
import React from 'react';
import ReactDom from 'react-dom';
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import Login from './component/login';

const Home = () => (
  <div>
    <h2>Home</h2>
  </div>
);

const About = () => (
  <div>
    <h2>About</h2>
  </div>
);

class Root extends React.Component{
  render(){
    return (
    <Router>
      <div>
        <Route exact path="/" component={Home} />
        <Route path="/about" component={About} />
        <Route path="/login" component={Login} />
      </div>
    </Router>
    );
  }
}

ReactDom.render(<Root />,document.getElementById('root'));

 

 

//在src/CSS/login.css文件中
body {
  background: #456;
  font-family: SimSun;
  font-size: 14px;
}

.login-page {
  width: 360px;
  padding: 8% 0 0;
  margin: auto;
}
.form {
  font-family: "Microsoft YaHei", SimSun;
  position: relative;
  z-index: 1;
  background: #FFFFFF;
  max-width: 360px;
  margin: 0 auto 100px;
  padding: 45px;
  text-align: center;
  box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
}
.form input {
  outline: 0;
  background: #f2f2f2;
  width: 100%;
  border: 0;
  margin: 0 0 15px;
  padding: 15px;
  box-sizing: border-box;
  font-size: 14px;
}
.form button {
  text-transform: uppercase;
  outline: 0;
  background: #4CAF50;
  width: 100%;
  border: 0;
  padding: 15px;
  color: #FFFFFF;
  font-size: 14px;
  cursor: pointer;
}
.form button:hover,.form button:active,.form button:focus {
  background: #43A047;
}
.form .message {
  margin: 15px 0 0;
  color: #b3b3b3;
  font-size: 12px;
}
.form .message a {
  color: #4CAF50;
  text-decoration: none;
}

 

 

 可以看到如下界面,(http://127.0.0.1:3000/login

 

 

 注册组件

 

#src/component/reg.js
import React from 'react';
import {Link} from 'react-dom';
import '../css/login.css'

export default class Reg extends React.Component{
    render(){
        return (
            <div className="login-page">
                <div className="form">
                    <form className="login-form">
                    <input type="text" placeholder="姓名"/>
                    <input type="text" placeholder="邮箱"/>
                    <input type="password" placeholder="密码"/>
                    <input type="password" placeholder="确认密码"/>
                    <button>注册</button>
                    <p className="message">如果已经注册 <Link to="/reg">请登录</Link></p>
                    </form>
                </div>
            </div>
        ); 
    }
}

//在src/index.js添加
import Reg from './component/reg';

class Root extends React.Component{
  render(){
    return (
    <Router>
      <div>
        <Route exact path="/" component={Home} />
        <Route path="/about" component={About} />
        <Route path="/login" component={Login} />
        <Route path="/reg" component={Reg} />
      </div>
    </Router>
    );
  }
}

 导航栏组件

//...
class Root extends React.Component{
  render(){
    return (
    <Router>
      <div>
      <ul>
          <li><Link to="/">主页</Link></li>
          <li><Link to="/login">登录</Link></li>
          <li><Link to="/reg">注册</Link></li>
          <li><Link to="/about">关于</Link></li>
        </ul>
        <Route exact path="/" component={Home} />
        <Route path="/about" component={About} />
        <Route path="/login" component={Login} />
        <Route path="/reg" component={Reg} />
      </div>
    </Router>
    );
  }
}
//...

登录功能实现

 

 

 

import React from 'react';
import ReactDom from 'react-dom';
import '../css/login.css'

export default class Login extends React.Component{
    handleClick(event){
        event.preventDefault();
        console.log('~~~~~~~~~~~~~~~~~~');
        console.log(this);//Login
        console.log(event);
        console.log(event.target);//button
        console.log(event.target.form);
        console.log(event.target.form[0].value);
        console.log(event.target.form[1].value);
    }
    render(){
        return (
            <div className="login-page">
                <div className="form">
                    <form className="login-form">
                    <input type="text" placeholder="邮箱"/>
                    <input type="password" placeholder="密码"/>
                    <button onClick={this.handleClick.bind(this)}>登录</button>
                    <p className="message">还未注册? <a href="/reg">注册用户</a></p>
                    </form>
                </div>
            </div>
        ); 
    }
}

//src/component/login.js
import React from 'react';
import ReactDom from 'react-dom';
import '../css/login.css';
import UserService from '../service/user';

const userService = new UserService();

export default class Login extends React.Component{
    render(){
        return <_Login service={userService}/>;
    }
}

class _Login extends React.Component{
    handleClick(event){
        event.preventDefault();
        console.log('~~~~~~~~~~')
        let fm = event.target.form;
        this.props.service.login(
            fm[0].value,fm[1].value
        );

    }
    render(){
        return (
            <div className="login-page">
                <div className="form">
                    <form className="login-form">
                    <input type="text" placeholder="邮箱"/>
                    <input type="password" placeholder="密码"/>
                    <button onClick={this.handleClick.bind(this)}>登录</button>
                    <p className="message">还未注册? <a href="/reg">注册用户</a></p>
                    </form>
                </div>
            </div>
        ); 
    }
}

UserService的login方法实现

    devServer: {
        compress: true,
        port: 3000,
        publicPath: '/assets/',
        hot: true,
        inline: true,
        historyApiFallback: true,
        stats: {
            chunks: false
        },
        proxy: {
            '/api': {
                target: 'http://127.0.0.1:8000',
                changeOrigin: true
            }
        }
    }

axios异步库

 

import axios from 'axios';

export default class UserService{
    login(email,password){
        console.log(email,password,'++++++')
        //异步调用
        axios.post('/api/user/login', {
            'email': email,
            'password': password
          })/*dev server会代理*/
          .then(function (response) {
            console.log(response);
            console.log(response.data);
            console.log(response.status);
            console.log(response.statusText);
            console.log(response.headers);
            console.log(response.config);
          })
          .catch(function (error) {
            console.log(error);
          });
    }
}

 

 

参考:https://webpack.js.org/configuration/dev-server/#devserver-proxy

 

//在webpack.config.dev.js中添加
    devServer: {
        compress: true,
        port: 3000,
        publicPath: '/assets/',
        hot: true,
        inline: true,
        historyApiFallback: true,
        stats: {
            chunks: false
        },
        proxy: {
            '/api': {
                target: 'http://127.0.0.1:8000',
                pathRewrite: {'^/api' : ''},
                changeOrigin: true
            }
        }
    }

token持久化---LocalStorage

 

store.js

 

 

let store = require('store');
store.set('user','wayne');
console.log(store.get('user'));
store.remove('user');
console.log(store.get('user'));
console.log(store.get('user','a'));

store.set('user',{name:'wayne',age:30});
console.log(store.get('user').name);    

store.set('school',{name:'magedu'});    

store.each(function(value,key){
    console.log(key,'-->',value)
});
// user --> { name: 'wayne', age: 30 }
// school --> { name: 'magedu' }
store.clearAll();

console.log(store.get('user')); // undefined

store.addPlugin(require('store/plugins/expire'));//过期插件
store.set('token',res.data.token,(new Date()).getTime() + (8*3600*1000));

Mobx状态管理

Redux和Mobx

 

Mobx官网:https://mobx.js.org/

状态管理

 

1.同步调用

import React from 'react';
import ReactDom from 'react-dom';

class Service{
    handle(n){
        //同步
        console.log('pending~~~~~');
        for (let s=new Date();new Date()-s<n*1000;);
        console.log('done');
        return Math.random();
    }
}

class Root extends React.Component{
    state = {ret:null}
    handleClick(event){
        //同步返回值
        let ret = this.props.Service.handle(4);
    }

    render(){
        console.log('*'*20)
        return (
            <div>
                <button onClick={this.handleClick.bind(this)}>触发handleClick函数</button>
                <span style={{color:'red'}}>{new Date().getTime()} Service的handle函数返回值是:{this.state.ret}</span>
            </div>
        )
    }
}

ReactDom.render(<Root service={new Service()}/>,document.getElementById('root'));

2.异步调用

 

 

import React from 'react';
import ReactDom from 'react-dom';

class Service{
    handle(obj){
        //Promise
        new Promise((resolve,reject) => {
            setTimeout(()=>resolve('OK'),5000);
        }).then(
            value => {//
                obj.setState({ret:(Math.random()*100)});
            }
        )
    }  
}

class Root extends React.Component{
    state = {ret:null}
    handleClick(event){
        //异步不能直接使用返回值
        this.props.service.handle(this);
    }

    render(){
        console.log('*'*20)
        return (
            <div>
                <button onClick={this.handleClick.bind(this)}>触发handleClick函数</button>
                <span style={{color:'red'}}>{new Date().getTime()} Service的handle函数返回值是:{this.state.ret}</span>
            </div>
        )
    }
}

ReactDom.render(<Root service={new Service()}/>,document.getElementById('root'));

3.Mobx实现

import React from 'react';
import ReactDom from 'react-dom';
import {observable} from 'mobx';
import {observer} from 'mobx-react';

class Service{
    @observable ret = -1;
    handle(obj){
        //Promise
        new Promise((resolve,reject) => {
            setTimeout(()=>resolve('OK'),2000);
        }).then(
            value => {//
                this.ret = (Math.random()*100);
                console.log(ret);
            }
        )
    }  
}

@observer   //将react组件转换为响应式组件
class Root extends React.Component{
    // state = {ret:null}
    handleClick(event){
        //异步不能直接使用返回值
        this.props.service.handle(this);
    }

    render(){
        console.log('*'*20)
        return (
            <div>
                <button onClick={this.handleClick.bind(this)}>触发handleClick函数</button>
                <span style={{color:'red'}}>{new Date().getTime()} Service的handle函数返回值是:{this.state.ret}</span>
            </div>
        )
    }
}

ReactDom.render(<Root service={new Service()}/>,document.getElementById('root'));

 

login登录功能代码实现

//在src/service/user.js中
import axios from 'axios';
import store from 'store';
import {observable} from 'mobx';

store.addPlugin(require('store/plugins/expire'));

export default class UserService{
  @observable loggindin = false; //+被观察者

  login(email,password){
      console.log(email,password);
      //异步调用
      axios.post('/api/user/login', {
          'email': email,
          'password': password
        })/*dev server会代理*/
        .then((response) => {
          console.log(response.data);
          console.log(response.status);
          //+ 存储token
          store.set('token',response.data.token,(new Date()).getTime()+(8*3600*1000));
          this.loggindin = true;  //+ 修改被观察者
        })
        .catch( (error) => {
          console.log(error);
        });
  }
}
//src/component/login.js
import React from 'react';
import '../css/login.css';
import UserService from '../service/user';
import {Link,Redirect} from 'react-router-dom'
import {observer} from 'mobx-react';

const userService = new UserService();

export default class Login extends React.Component{
    render(){
        return <_Login service={userService}/>;
    }
}

@observer
class _Login extends React.Component{
    handleClick(event){
        event.preventDefault();
        let fm = event.target.form;
        this.props.service.login(
            fm[0].value,fm[1].value
        );

    }
    render(){
        if (this.props.service.loggedin){
            return <Redirect to='/' />; //+ 跳转
        }
        return (
            <div className="login-page">
                <div className="form">
                    <form className="login-form">
                    <input type="text" placeholder="邮箱"/>
                    <input type="password" placeholder="密码"/>
                    <button onClick={this.handleClick.bind(this)}>登录</button>
                    <p className="message">还未注册? <a href="/reg">注册用户</a></p>
                    </form>
                </div>
            </div>
        ); 
    }
}

前端注册功能实现

 

 

import axios from 'axios';
import store from 'store';
import {observable} from 'mobx';

store.addPlugin(require('store/plugins/expire'));

export default class UserService{
  @observable loggedin = false; //+被观察者

  login(email,password){
      console.log(email,password);
      //异步调用
      axios.post('/api/user/login', {
          'email': email,
          'password': password
        })/*dev server会代理*/
        .then((response) => {
          console.log(response.data);
          console.log(response.status);
          //+ 存储token
          store.set('token',response.data.token,(new Date()).getTime()+(8*3600*1000));
          this.loggedin = true;  //+ 修改被观察者
        })
        .catch( (error) => {
          console.log(error);
        });
  }
//新增reg函数
  reg(name, email, password){
    console.log(email,password);

    axios.post('api/user/reg',{
        'eamil':email,
        'password':password,
        'name':name
    })/* dev server会代理 */
    .then((response) => {//此函数需要注意this的问题
        console.log(response.data);
        console.log(response.status);
        //+ 存储token
        store.set('token',response.data.token,(new Date).getTime()+(8*3600*1000));
        //注册成功,返回token即成功登录
        this.loggedin = true; //+ 修改被观察者
    })
    .catch((error)=>{
      console.log(error);
    })
  }

 

 

//src/component/reg.js
import React from 'react';
import {Redirect} from 'react-router-dom';
import '../css/login.css'
import UserService from '../service/user';
import {observer} from 'mobx-react';

const userService = new UserService();

export default class Reg extends React.Component{
    render(){
        return <_Reg service={userService} />;
    }
}

@observer
class _Reg extends React.Component{
    handleClick(event){
        event.preventDefault();
        let fm = event.target.form;
        this.props.service.reg(fm[0].value,fm[1].value,fm[2].value);
    }

    render(){
        console.log('component reg!!')
        if(this.props.service.loggedin){
            return <Redirect to='/about'/>;
        }
        return (
            <div className="login-page">
                <div className="form">
                    <form className="register-form">
                    <input type="text" placeholder="姓名"/>
                    <input type="text" placeholder="邮箱"/>
                    <input type="password" placeholder="密码"/>
                    <input type="password" placeholder="确认密码"/>
                    <button onClick={this.handleClick.bind(this)}>注册</button>
                    <p className="message">如果已经注册 <a href="/login">请登录</a></p>
                    </form>
                </div>
            </div>
        ); 
    }
}

Ant Design

 

 

import {List} from 'antd';
import 'antd/lib/list/style/css';
import ReactDom from 'react-dom';

ReactDom.render(<List />,mountNode);

 

信息显示

import axios from 'axios';
import store from 'store';
import {observable} from 'mobx';

store.addPlugin(require('store/plugins/expire'));

export default class UserService{
  @observable loggedin = false; //+被观察者
  @observable errMsg = '';      

  login(email,password){
      console.log(email,password,'in login function!');
      //异步调用
      axios.post('/api/user/login', {
          'email': email,
          'password': password
        })/*dev server会代理*/
        .then((response) => {
          console.log(response.data);
          console.log(response.status);
          //+ 存储token
          store.set('token',response.data.token,(new Date()).getTime()+(8*3600*1000));
          this.loggedin = true;  //+ 修改被观察者
        })
        .catch( (error) => {
          console.log(error);
          this.errMsg = '登录失败';//+ 信息显示
        });
  }

  reg(name, email, password){
    console.log(email,password,name,'in reg f unction!');
    //异步调用
    axios.post('api/user/reg',{
        'email':email,
        'password':password,
        'name':name
    })/* dev server会代理 */
    .then((response) => {//此函数需要注意this的问题
        console.log(response.data);
        console.log(response.status);
        //+ 存储token
        store.set('token',response.data.token,(new Date()).getTime()+(8*3600*1000));
        //注册成功,返回token即成功登录
        this.loggedin = true; //+ 修改被观察者
    })
    .catch((error)=>{
      console.log(error);
      this.errMsg = '注册失败'//+ 信息显示
    });
  }

 

 

import React from 'react';
import '../css/login.css';
import UserService from '../service/user';
import {Link,Redirect} from 'react-router-dom'
import {observer} from 'mobx-react';
//新增
import {message} from 'antd';
import 'antd/lib/message/style';


const userService = new UserService();

export default class Login extends React.Component{
    render(){
        return <_Login service={userService}/>;
    }
}

@observer
class _Login extends React.Component{
    handleClick(event){
        event.preventDefault();
        let fm = event.target.form;
        this.props.service.login(
            fm[0].value,fm[1].value
        );

    }
    render(){
        console.log('in login.js')
        if (this.props.service.loggedin){
            return <Redirect to='/about' />; //+ 跳转
        }
        //新增
        if (this.props.service.errMsg){
            message.info(this.props.service.errMsg,3,
                ()=> SetTimeout(()=>this.props.service.errMsg=''),1000);
            
        }

        return (
            <div className="login-page">
                <div className="form">
                    <form className="login-form">
                    <input type="text" placeholder="邮箱"/>
                    <input type="password" placeholder="密码"/>
                    <button onClick={this.handleClick.bind(this)}>登录</button>
                    <p className="message">还未注册? <a href="/reg">注册用户</a></p>
                    </form>
                </div>
            </div>
        ); 
    }
}

 

 

import React from 'react';
import {Redirect} from 'react-router-dom';
import '../css/login.css'
import UserService from '../service/user';
import {observer} from 'mobx-react';
//新增
import {message} from 'antd';
import 'antd/lib/message/style';

const userService = new UserService();

export default class Reg extends React.Component{
    render(){
        return <_Reg service={userService} />;
    }
}

@observer
class _Reg extends React.Component{
    handleClick(event){
        event.preventDefault();
        let fm = event.target.form;
        this.props.service.reg(fm[0].value,fm[1].value,fm[2].value);
    }

    render(){
        console.log('component reg!!')
        if(this.props.service.loggedin){
            return <Redirect to='/about'/>;
        }
        //新增
        if(this.props.service.errMsg){
            message.info(this.props.service.errMsg,3,()=>{
                setTimeout(()=>this.props.service.errMsg='',1000);
            })
        }
        return (
            <div className="login-page">
                <div className="form">
                    <form className="register-form">
                    <input type="text" placeholder="姓名"/>
                    <input type="text" placeholder="邮箱"/>
                    <input type="password" placeholder="密码"/>
                    <input type="password" placeholder="确认密码"/>
                    <button onClick={this.handleClick.bind(this)}>注册</button>
                    <p className="message">如果已经注册 <a href="/login">请登录</a></p>
                    </form>
                </div>
            </div>
        ); 
    }
}

 

 

 

转载于:https://www.cnblogs.com/xiaoshayu520ly/p/11437593.html

免费个人博客系统(兼多用户博客系统)是支持一个空间2个网站的全能型网站管理系统,本免费个人博客系统通用和拓展性强,博客、文章系统、商城、企业网站、个性化论坛等类型网站都可以使用,将来网站无论如何转型或拓展,只需要修改模板就可以实现,无需重建网站。本系统不同于以往任何逻辑架构的网站程序。本软件开发者希望通过注重商业化开发,助力用户通过网络创业和赚钱,当然您也可以通过这个软件在互联网高效地展示自己。 详细说明: 1.本个人博客系统可以用于商业用途,本软件官方、开发者不收取任何授权费用; 2.本个人博客系统是支持一个空间2个网站的全能型博客系统; 3.本个人博客系统通用和拓展性强,博客、文章系统、商城、企业网站、个性化论坛等类型网站都可以使用; 4.本个人博客系统功能强大,代码少,运行效率更高,程序运行速度是其它主流同类软件的3~4倍,内存占用不到其它主流同类软件的五分之一; 5.开启和关闭会员注册,开启和关闭普通会员投稿功能; 6.会员功能拓展到了兼职专题功能,SEO设置和开放特约编辑的多用户不同权限管理功能等; 7.超级管理员可无密码一键登录任意会员后台,管理员用受限登录会员身份后台发布信息,也可让网站攻击者无法猜解密码; 8.自动生成手机版网站,系统默认带www的域名为PC模板站,不带www的顶级域名为手机站,不增加维护难度,就可以同时拥有2个网站; 9.博客程序还包含订单、秒杀、限时抢购和数量虚拟功能,助力用户互联网创业和商业化运营,就看脑洞大开的你怎么使用了; 10.本个人博客系统能够适应各种界面浏览器,后台可手机随时随地访问、管理和更新网站; 11.可一键切换成.shtml、.html、.htm、.asp、.aspx、.cgi、.php、.jsp、.cgi、/ 等网页后缀,模拟不同语言编程的网站程序; 12.前端页面精简,前端编码不用div标签,不用id、class规则的CSS样式,最大限度精简前端代码,鼓励用户抛弃div+CSS前端代码编写模式,我们这样做不是为了迎合HTML5,只是为了更合理的应用HTML标签; 13.安装程序自动识别和设置伪静态; 14.全站无死角SEO设置; 15.强大的内链逻辑,特别适应大数据类型网站使用; 16.强大的广告和精准广告设置; 17.数据缓存模式,不依赖外部服务器组件和其它插件,不额外占用服务器系统内存资源; 18.删除局部缓存和一键清除全部缓存; 19.可设置邮件实时通知新订单和访客留言; 20.可设置管理员回复留言可同时邮件通知留言者; 21.可查看和删除无用上传文件,为将来数据备份节省时间和空间; 22.特色的tag标签功能; 23.分类、tag标签、url表单填写自动补缺; 24.url表单可自动生成拼音,也可以用汉字,自动转码,有利于SEO搜索引擎排名; 25.开放式PHP原生态模板,用户任意修改、穿插内容或广告,无需花时间研究额外规则,模板修改成本更低; 26.可对模板备份,使用备份模板,并可对模板恢复系统初始状态; 27.模板修改全站页面秒更新; 28.可自定义SQL语句的图片展示页面; 29.后台可控制各个模块是否开启验证码、设置验证码长度,以及设置验证码破解难度; 30.访客留言关键词过滤; 31.可自定义导航; 32.可在线编辑js和CSS文件; 33.本免费个人博客系统(兼多用户博客系统)无后门。
LxBlog 多用户博客个人主页系统,一套基于php+mysql 数据库平台架构的多用户博客系统,该系统融合了Blog的最新元素,拥有强大的个人主页系统,独立的二级域名功能,灵活的用户模版系统,丰富的朋友圈和个性相册功能。 部分修正改进功能 1.改进个人页面的日志列表页的摘要 2.改进相册个人后台发表方式 3.改进音乐前台列表页为显示歌曲列表,点击试听后弹出播放窗口,取消音乐上传 4.改进个人首页中显示所加入朋友圈的更新信息功能  5.改进最新推送的文章在朋友圈的其他圈友中显示功能  6.改进日志同时推送到多个朋友圈的支持功能 7.改进朋友圈系统页列表、会员排行列表 8.改进朋友圈系统页 9.改进圈主推荐文章列表 10.改进写朋友圈写文章功能,即在圈子中加入"写文章"功能,转入个人后台编写,写文章后默认推送到该圈子 11.改进朋友圈邀请功能 12.改进头像大小控制 13.改进书签功能 部分新增功能: 1.增加日志、评论、留言表情 2.增加验证问题 3.增加在article.php页面中和该文章tag相关的文章 4.增加tags广告词锁定 5.增加列表页"隐藏日志","好友可见日志" 链接. 6.增加心情,天气在发表日志页 7.增加"上一篇","下一篇",在文章阅读页 8.增加"转移个人分类"功能,在个人后台日志列表页 9.增加日志管理的搜索功能 10.增加附件批量上传 11.增加文件和商品集成格式在日志发布过程中 12.增加相册前台图片列表页,单个图片显示页面 13.增加相册个人页面单图显示页面功能,增加图片播放器 14.增加短消息功能 15.增加系统首页博客文章、人数、今日文章数、评论数量的显示 16.增加最新博客内容在论坛首页的显示 17.增加个人分类在论坛推送到blog的文章 18.增加推送设定,即当博客向论坛推送时,管理员可以设置只允许推送至哪个或者哪些版块 19.增加随机访问列表 20.增加好友日志更新列表,在个人日志页面 21.增加可视化风格编辑 22.增加论坛文集 23.增加找回密码功能 24.增加好友分类 25.增加摘要分界符 26.增加自定义关键字链接 27.增加博主回复评论 28.增加转载功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值